packet python 属性_packet python - CSDN
精华内容
参与话题
  • python中优雅的使用ffmpeg:PyAV

    万次阅读 2020-02-21 17:43:06
    但是ffmpeg是由纯C语言写成,对于python用户来说使用难度较高,为此今天向大家推荐一款在python中使用ffmpeg的开发包:PyAV PyAV提供了ffmpeg的python接口,但实际是它只是使用ffmpeg做后端,使用Cython封装了...

    ffmpeg是强大的多媒体处理工具,堪称多媒体处理的瑞士军刀,涵盖了大量的多媒体处理工具。但是ffmpeg是由纯C语言写成,对于python用户来说使用难度较高,为此今天向大家推荐一款在python中使用ffmpeg的开发包:PyAV

    PyAV提供了ffmpeg的python接口,但实际是它只是使用ffmpeg做后端,使用Cython封装了ffmpeg的接口,所以实际调用的还是ffmpeg。

    PyAV安装

    PyAV是跨平台的,可以根据自己的环境和平台选择安装。

    Windows安装PyAV:

    在Windows下安装PyAV可以参照博客https://blog.csdn.net/Dillon2015/article/details/91358179

    Mac OS X和Ubuntu上安装PyAV:

    在Mac OS X和Ubuntu上安装PyAV可以参考官网安装方法

    PyAV使用

    PyAV提供了非常方便的接口使开发者不需要太关注底层细节。

    视频分割为独立的帧

    有的时候做处理时需要将一段视频按帧分成一张张图像,在ffmpeg命令行中只需要一条命令:

    ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg

    -r表示每秒提取图像的数量,如果等于帧率则会将所有帧都提取出来。

    在PyAV中实现同样的功能也很简单,

    import av
    ​
    container = av.open(path_to_video)
    #path_to_video是你视频的路径
    for frame in container.decode(video=0):
        frame.to_image().save('frame-%04d.jpg' % frame.index)

    保存关键帧

    对于一个视频序列来说并不是所有帧都一样,因为视频编码在进行帧间预测时会出现相互参考的情况,如果一帧的参考帧丢失或损坏了那么这一帧就无法正确解码,所以对于那些用于被参考的帧就相对更重要了。

    av.video.frame.VideoFrame类中有一个属性key_frame用以表示该帧是否是关键帧。

    import av
    import av.datasets
    ​
    container = av.open(path_to_video)
    # Signal that we only want to look at keyframes.
    stream = container.streams.video[0]
    stream.codec_context.skip_frame = 'NONKEY'
    ​
    for frame in container.decode(stream):
        # We use `frame.pts` as `frame.index` won't make must sense with the `skip_frame`.
        frame.to_image().save(
            'night-sky.{:04d}.jpg'.format(frame.pts),
            quality=80,
        )

    在以上代码中跳过了非关键帧,将所有关键帧保存下来。

    视频转封装

    视频转封装就是改变视频的封装格式而不改变其中视频流、音频流等的编码方式,例如从mp4->mkv

    过程如下:

     

    import av
    import av.datasets
    ​
    input_ = av.open(path_to_video)
    output = av.open('remuxed.mkv', 'w')
    ​
    # Make an output stream using the input as a template. This copies the stream
    # setup from one to the other.
    in_stream = input_.streams.video[0]
    out_stream = output.add_stream(template=in_stream)
    ​
    for packet in input_.demux(in_stream):
        # We need to skip the "flushing" packets that `demux` generates.
        if packet.dts is None:
            continue
    ​
        # We need to assign the packet to the new stream.
        packet.stream = out_stream
        output.mux(packet)
    ​
    output.close()

    生成视频

    PyAV还可以和numpy配合使用,直接将ndarray转换成视频帧,使得对帧的操作更加灵活和方便。

    from __future__ import division
    ​
    import numpy as np
    ​
    import av
    ​
    duration = 4
    fps = 24
    total_frames = duration * fps
    container = av.open('test.mp4', mode='w')
    stream = container.add_stream('mpeg4', rate=fps)
    stream.width = 480
    stream.height = 320
    stream.pix_fmt = 'yuv420p'
    ​
    for frame_i in range(total_frames):
        img = np.empty((480, 320, 3))
        img[:, :, 0] = 0.5 + 0.5 * np.sin(2 * np.pi * (0 / 3 + frame_i / total_frames))
        img[:, :, 1] = 0.5 + 0.5 * np.sin(2 * np.pi * (1 / 3 + frame_i / total_frames))
        img[:, :, 2] = 0.5 + 0.5 * np.sin(2 * np.pi * (2 / 3 + frame_i / total_frames))
    ​
        img = np.round(255 * img).astype(np.uint8)
        img = np.clip(img, 0, 255)
    ​
        frame = av.VideoFrame.from_ndarray(img, format='rgb24')
        for packet in stream.encode(frame):
            container.mux(packet)
    ​
    #Flush stream
    for packet in stream.encode():
        container.mux(packet)
    ​
    #Close the file
    container.close()

    以上代码生成了一段480x320帧率24fps的视频。

    小结

    PyAV还要更多更强大的功能,感兴趣的小伙伴可以自己安装试试哦。

    感兴趣的请关注微信公众号Video Coding

     

    展开全文
  • python教程全解 python使用scapy监听抓取网络数据包。 scapy具有模拟发送数据包、监听解析数据包、互联网协议解析、数据挖掘等多种用处。这里我们只来说一下scapy监听数据包,并按照不同的协议进行解析。 首先...

    分享一个朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开

    docker/kubernetes入门视频教程


    全栈工程师开发手册 (作者:栾鹏)
    python教程全解

    python使用scapy监听抓取网络数据包。

    scapy具有模拟发送数据包、监听解析数据包、互联网协议解析、数据挖掘等多种用处。这里我们只来说一下scapy监听数据包,并按照不同的协议进行解析。

    首先需要安装scapy包,点击下载

    python库的安装方法请参考Python库的安装与卸载

    scapy也是基于libcap的交互式网络分析工具,所以还要安装winpcap软件,为监控网卡提供接口。winpcap

    scapy由于功能丰富,内容较多,所以在导入时会比较慢。在pycharm中可以导入,pydev中导入卡死。

    如果导入卡死,可以把自己编写的python程序,放在scapy库的根目录下。比如scapy库在C:\Python27\Scripts\scapy-master下,则在成功安装scapy库以后,可以将自己的py程序放在这个文件夹下执行。

    python2.7下

    #coding:utf-8
    #由于scapy没有自动将库目录添加到python系统目录内,所以这里先查看模块目录在哪里,再添加到系统搜索路径下
    from scapy.all import *   #导入scapy较慢,如果无法导入,就将py文件放到scapy库,C:\Python27\Scripts\scapy-master文件夹下执行
    print("sucess import")
    def pack_callback(packet):
    #     print packet.show()  #可以查看包的结构属性等
        if packet["TCP"].payload:  #检测tcp负载是否有数据,有Ethernet、IP、TCP几个阶段
            appstr=str(packet["TCP"].payload)  #将tcp负载字节数组转化为字符串
            #匹配自定义正则表达式
            pat = 'Content-Type:(.*)[;\r\n]'   #创建一个正则表达式,在字符串中匹配这个正则表达式,这里以Content-Type:开头,以;或\r结尾的
            pat = re.compile(pat);   #使用正则表达式,创建正则对象
            m = re.search(pat,appstr)  #查询是否存在匹配的子字符串
            if m:
                print(m.groups())  #打印需要()输出的内容
    # 嗅探数据包,参数:过滤器,回调函数,网卡,个数
    ifacestr="HUAWEI Mobile Connect - Network Card"  #网口名称,这里要换成自己的网卡名称
    filterstr="tcp port 110 or tcp port 8080 or tcp port 80"  #过滤条件,为空表示不限制
    sniff(filter=filterstr,prn=pack_callback,iface=ifacestr,count=0)  #count等0表示一直监听,要想监听数据包,需要首先安装winpcap
    
    

    在程序中ifacestr参数为你要监听的网卡的名称,为下图中红色标记部分
    这里写图片描述

    python3.6下

    还没有安装成功
    
    展开全文
  • Python】模拟radius coa报文

    千次阅读 2016-02-05 14:04:14
    Radius协议中网关设备NAS是client,实现radius协议的服务为服务端(例如freeradius),这种情况下radius server并不能主动给NAS发送信息。在 rfc3576 Dynamic Authorization Extensions to RADIUS 中定义了一种...

    Radius协议中网关设备NAS是client,实现radius协议的服务为服务端(例如freeradius),这种情况下radius server并不能主动给NAS发送信息。在 rfc3576 Dynamic Authorization Extensions to RADIUS 中定义了一种radius的拓展,叫做 Change-of-Authorization (CoA) ,通过这个协议就可以从radius server主动给 radius client发起请求,例如用户下线,用户上网带宽动态修改等需求就可以通过COA来完成。

    下面就是用pyrad来完成一种COA的请求发送,需求是通过python发送COA给网关,网关正确应答ACK。

    注意: pypi中的pyrad最新版本并没有实现coa,你可以通过github自行安装 pyrad : http://github.com/andreynpetrov/pyrad.git 这个版本有这部分实现。

    COA中定义的code

    
    40 - Disconnect-Request [RFC2882]   下线请求
    
    41 - Disconnect-ACK [RFC2882]   下线确认
    
    42 - Disconnect-NAK [RFC2882]    下线不正常
    
    43 - CoA-Request [RFC2882]   coa请求
    
    44 - CoA-ACK [RFC2882]   coa确认
    
    45 - CoA-NAK [RFC2882]   coa不正常
    

    Python模拟COA

    这里的COA请求是网关设备厂商自定义的,用来完成用户认证,具体包结构定义只能参照rfc和厂家给的定义来实现,这里只记录下程序如何写的。调试中几个重要的点有: 网关厂商的字典,对于字典中厂商自定义字段的含义和值是否正确,防火墙是开启对应的白名单。 如果总是无法调通,请抓包对比,然后再测试。

    #coding:utf-8
    import socket, sys
    import pyrad.packet
    from pyrad.client import Client
    from pyrad.dictionary import Dictionary
    
    
    #NAS and Radius same 注意字典的加载
    dict_dir = "./dictionary"
    SECRET = "test"
    NASIP = "172.16.15.188"
    
    
    def send_coa_auth(uname, acl="auth_sla", qos="32M_Full"):
        """
            send coa message to NAS, the attributes are
            User-Name
            Calling-Station-Id
            Benu-ACL-Policy
            Benu-QoS-Policy
        """
        srv = Client(server=NASIP, secret=SECRET, dict=Dictionary(dict_dir))
        req = srv.CreateCoAPacket(code=pyrad.packet.CoARequest, User_Name=uname)
        req["Calling-Station-Id"] = uname
        req["NAS-IP-Address"] = NASIP
        req["Benu-ACL-Policy"] = acl  # Benu开头为厂商定义字段
        req["Benu-QoS-Policy"] = qos
    
        try:
            print "Sending COA request"
            reply = srv.SendPacket(req)
        except pyrad.client.Timeout:
            print "DAS(NAS or Bas) does not reply"
            return
        except socket.error, error:
            print "Network error: " + error[1]
            return
    
        if reply.code==pyrad.packet.CoAACK:
            print "Coa accepted"
        elif reply.code==pyrad.packet.CoANAK:
            print "Coa nak"
        else:
            print reply.code
        print "Attributes returned by NAS:"
        for i in reply.keys():
            print "%s: %s" % (i, reply[i][0])
    
    if __name__ == "__main__":
        send_coa_auth("F8-CF-C5-83-09-B9")
    
    '''
    # python coa_auth.py
    import settings failure
    Sending COA request
    Coa accepted
    Attributes returned by NAS:
    Event-Timestamp: 1452219598
    '''

    参考

    使用python发送COA报文动态改变RADIUS用户属性 此博主有很多相关的研究,表示感谢

    展开全文
  • KNN算法代码实例实现(python

    千次阅读 2018-09-14 09:18:43
    本文由本人原创,仅作为自己的学习记录 ...下面是实例,假设有零食,包,电器三类商品,商品分别有价格,评价两类属性(数据我事先分别存在三个不同的TXT中,在实际过程中,应该是先对大量数据作处理得到数据)...

    本文由本人原创,仅作为自己的学习记录

    KNN算法的实现思路是,分别计算未知数据到其他各个数据的欧几里得距离之和(也可以是其他距离),然后进行从小到大排序,排序的列表前K个值中,属于其他数据类别最多的,说明该未知数据类型与这类数据越相似。

    下面是实例,假设有零食,包,电器三类商品,商品分别有价格,评价两类属性(数据我事先分别存在三个不同的TXT中,在实际过程中,应该是先对大量数据作处理得到数据),现在有一个商品,价格10,评价10,需要去预测该商品属于哪一类商品

    下面是三个不同的txt内容,每一行分别为 价格,评价

    1.零食.txt

    0.5,10
    1,20
    2,30

    2.包.txt

    100,3
    300,2
    500,1

    3.电器.txt

    50,5
    40,8
    30,9

    应该是先读取三类数据,每一类数据生成一个二维列表,然后与新商品的坐标(10,10)计算距离,所有距离形成一个列表,然后从小到大排序,截取前K个值,判断前K个值中属于类别最多的类别,则该商品最可能属于该类别

    本文中取得K=总数据长度/2+1,实际上KNN算法最应该注意的是K的取值,因为K的取值直接影响了最后的结果

    下面是代码:

    #coding=utf-8  
    from __future__ import division
    import numpy
    import math
    
    
    def getfooddata(food_file):
        fooddata=[]
        foodlines=open(food_file,'r')
        for line in foodlines:
            fooddata.append(list(line.strip('\n').split(',')))
        for i in range(0,len(fooddata)):
            for j in range(0,len(fooddata[0])):
                fooddata[i][j]=float(fooddata[i][j])
        return fooddata
    def getpacketdata(pack_file):
        packetdata=[]
        packetlines=open(pack_file,'r')
        for line in packetlines:
            packetdata.append(list(line.strip('\n').split(',')))
        for i in range(0,len(packetdata)):
            for j in range(0,len(packetdata[0])):
                packetdata[i][j]=float(packetdata[i][j])
        return packetdata
    def getelcdata(elc_file):
        elcdata=[]
        elclines=open(elc_file,'r')
        for line in elclines:
            elcdata.append(list(line.strip('\n').split(',')))
        for i in range(0,len(elcdata)):
            for j in range(0,len(elcdata[0])):
                elcdata[i][j]=float(elcdata[i][j])
        return elcdata
    def KNN_arithm(fooddata,packetdata,elcdata,expected_data):
        distance = []
        food =[]
        packet=[]
        elc=[]
        food_index=0
        packet_index=0
        elc_index=0
        for i in range(0,len(fooddata)):
            food.append(math.sqrt((numpy.square(expected_data[0]-fooddata[i][0])+numpy.square(expected_data[1]-fooddata[i][1]))))
            distance.append(math.sqrt((numpy.square(expected_data[0]-fooddata[i][0])+numpy.square(expected_data[1]-fooddata[i][1]))))
        for j in range(0,len(packetdata)):
            packet.append(math.sqrt((numpy.square(expected_data[0]-packetdata[i][0])+numpy.square(expected_data[1]-packetdata[i][1]))))
            distance.append(math.sqrt((numpy.square(expected_data[0]-packetdata[i][0])+numpy.square(expected_data[1]-packetdata[i][1]))))
        for n in range(0,len(elcdata)):
            elc.append(math.sqrt((numpy.square(expected_data[0]-elcdata[i][0])+numpy.square(expected_data[1]-elcdata[i][1]))))
            distance.append(math.sqrt((numpy.square(expected_data[0]-elcdata[i][0])+numpy.square(expected_data[1]-elcdata[i][1]))))
        distance.sort(reverse=False)
        k=int(len(distance)/2)+1
        distance = distance[0:k-1]
        for m in distance:
            if m in food:
                food_index=food_index+1
            elif m in packet:
                packet_index=packet_index+1
            else:
                elc_index=elc_index+1
        final=[food_index,packet_index,elc_index]
        final_index= final.index(max(final))
        if final_index==0:
            print "该类别为零食"
        elif final_index==1:
            print "该类别为包"
        else:
            print "该类别为电器"
    if __name__ =="__main__":
        expected_data=[10,10]
        k=8
        food_file=u"D:\\eclipse\\eclipse_workplace\\yuntu\\src\\零食.txt"
        pack_file=u"D:\\eclipse\\eclipse_workplace\\yuntu\\src\\包.txt"
        elc_file=u"D:\\eclipse\\eclipse_workplace\\yuntu\\src\\电器.txt"
        fooddata=getfooddata(food_file)
        packetdata=getpacketdata(pack_file)
        elcdata=getelcdata(elc_file)
        print fooddata,packetdata,elcdata
        KNN_arithm(fooddata, packetdata, elcdata, expected_data)

    下面是我的运行结果:

    [[0.5, 10.0], [1.0, 20.0], [2.0, 30.0]] [[100.0, 3.0], [300.0, 2.0], [500.0, 1.0]] [[50.0, 5.0], [40.0, 8.0], [30.0, 9.0]]
    该类别为零食
    

    本文仅做为学习的记录,存在很多不足之处。

    展开全文
  • python的反射机制

    千次阅读 2014-03-05 12:33:07
    获得对象的属性和方法使用getattr()方法 注意点: 1. 如下例子中, 'home.cates'文件夹下有'LoginError.py'文件, 文件包含class LoginError 使用import 只能引入到文件, 到class级别应该使用getattr,  2.获得类以后...
  • 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器...
  • scapy-整体设计和数据发送流程

    千次阅读 2011-01-19 21:06:00
    scapy涉及了pf_packet套结字编程,路由以及面向对象设计等诸技术,它本身使用python编写,熟悉python的家伙这下有福了,可以目睹这个优秀的软件而无需下载编译源码之类的了。 scapy中到处都是class,...
  • 本文参考:...(1)通过Python的struct模块将C的结构体转换成Python语言(struct.Struct) (2)打包和解包(pack_into和unpack_from) (3)序列化和
  • 一、问题描述 ...之前也是可以连接mysql,突然在大数据量的操作时就报错了。 这个原因很难说,我的原因是协议优先级的问题,也是数据大的问题。 二、解决方法 打开cmd,输入ping localhost ...
  • python3使用winpcap

    千次阅读 2019-12-27 15:57:57
    python3使用winpcap关于winpcap的简单介绍winpcap抓包介绍(各函数及其参数)对于上面的示例代码的介绍 关于winpcap的简单介绍 winpcap的历史说起来就比较麻烦了, 简单来说,他使用unix下跨平台 抓包工具libpcap 往...
  • 后台服务在运行时发现一个问题,运行一段时间后,接口请求报错; pymysql.err.InterfaceError: (0, '') 排查到原因是数据库操作对象实例未注销,但是持有的数据库连接已经过期,导致后续数据库操作不能正常进行;...
  • 废话不多说,直接上代码。 需要注意的是,FFmpeg的版本很多,最新版本可能有些函数已经换成别的了。如果无法自行更改代码,可以找我以前相关FFmpeg的文章,下载我x64版本的工程包,里面就有这个版本的FFmpeg。...
  • pcap文件的python解析实例

    万次阅读 多人点赞 2016-07-23 18:44:34
    同时也一直想学python。凑一块儿了...于是,便开工了。座椅爆炸!正文首先要说的是,我知道python有很多解析pcap文件的库,这里不使用它们的原因是为了理解pcap文件的格式细节。使用tcpdump你可以很容易抓取到一系列...
  • Python 神操作:远程开机和关机

    千次阅读 2019-03-11 19:12:37
    Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机。 本文目标 远程开机原理 Python 远程开机代码实现 Python 关机说明 更多Python视频、源码、资料加...
  • pymysql的连接池实现

    千次阅读 2017-12-26 11:14:20
    在使用pymysql作为MySQL驱动时,在多线程模型下,如果我们没有为每个线程创建一个单独的连接的话,就会遇到下列错误pymysql.err.InternalError: Packet sequence number wrong - got 0 expected 1这是因为pymysql的...
  • 使用pyav访问网络视频流

    万次阅读 2018-06-26 20:50:48
    深度学习项目中使用python-opencv获取视网络频流出错,找替代方案.要求能得到numpy格式的图片,供opencv和深度模型使用。 方案选型 据我所知道的方法,在python中访问网络视频流(rtsp 或者http视频流)有以下...
  • 运行环境 1、pycharm3.6 2、MySQL 8.0.12 首先是按照书本上的操作输入代码(123456为我的密码... import pymysql conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock',user='root', passw...
  • PF_PACKET 设备层编程接口

    千次阅读 2009-06-20 16:49:00
    http://bbs.openlab.net.cn/forums/threads/167.aspx定义: #include "/usr/include/sys/socket.h" #include "/usr/includ/sys/if_packet.h" packet_socket = socket(PF_PACKET, socket_
  • 这篇文章主要介绍了Python随机函数库random的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 众所周知,python拥有丰富的内置库,还支持众多...
  • PF_PACKET笔记

    千次阅读 2015-08-28 17:27:37
    PF_PACKET 从设备驱动层接收或发送原始数据包, 可用于用户在物理层以上构建自己的通信协议. socket_type 可为:SOCK_RAW或SOCK_DGRAM. 其中SOCK_RAW可用于发送原始数据包, 此时可自定义数据链路层头部; ...
1 2 3 4 5 ... 20
收藏数 2,421
精华内容 968
关键字:

packet python 属性