美文网首页
使用Python scapy分析pcap文件的一些记录

使用Python scapy分析pcap文件的一些记录

作者: 苍蝇的梦 | 来源:发表于2019-02-28 15:31 被阅读0次

    2019-02-28 遇到的一点小问题

    scapy

    安装方法网上很多,懒得贴了。就是电脑上Python环境太多,一开始安装插件的环境不是现在当前使用的这个,后面到Python Interpreter确认了一下,重新安装了一下。
    然后就是在win10系统上使用时遇到问题:ImportError: cannot import name 'NPCAP_PATH' from 'scapy.arch.pcapdnet' (C:\ProgramData\Anaconda3\lib\site-packages\scapy\arch\pcapdnet.py)。网上搜了下,已经有人提出官方也解决了。不过现在还没办法直接pip install scapy或者Python Interpreter里安装最新版本,所以需要下载源码替换目录C:\ProgramData\Anaconda3\Lib\site-packages\scapy里面的全部文件或者pip时先git文件下来。
    试着打印数据,可以了。

    packets = rdpcap("/Users/wannoo/Downloads/test.pcap")#mac路径
    for data in packets:
        print(data.payload.name)#打印出'IP','IPV6','ARP'或者其他
    #这个方法点进去看里面是这样的。
    with PcapReader(filename) as fdesc:
            return fdesc.read_all(count=count)
    #所以我们也可以这样:
    with PcapReader('test.pcap') as packets:  # 文件在同一个目录
        for data in packets:
            if 'TCP' not in data:
                continue
            print(data.time, "wannoo", data['TCP'].options[2][1][0])#打印出Timestamp信息
    

    测试打印前23条看看内容。

    packets = rdpcap("F:/wannoo/test.pcap", 23)#windows这样不用考虑转义字符
    #或者是这种打开方式:
    with PcapReader('F:\\wannoo\\test.pcap') as packets: #Windows这样需要考虑转义字符
        for data in packets.read_all(23):
    

    type(data) 类型:<class 'scapy.layers.l2.Ether'>
    repr(data) 内容:<Ether dst=f4:b5:20:0c:61:71 src=68:fe:f7:02:a0:f9 type=0x800 |<IP version=4 ihl=5 tos=0x0 len=52 id=0 flags=DF frag=0 ttl=64 proto=tcp chksum=0xa4c0 src=192.168.10.31 dst=192.168.10.148 |<TCP sport=51672 dport=bacula_dir seq=2860371338 ack=897457815 dataofs=8 reserved=0 flags=A window=4030 chksum=0x3a30 urgptr=0 options=[('NOP', None), ('NOP', None), ('Timestamp', (746688471, 2322044551))] |>>>
    然后还能获取其他需要的参数,比如使用data['TCP'].flags.value判断24为PA(PSH、ACK),16为A(ACK);或者在data.payload.name=='IP'时通过data.payload.proto数值判断17=='UDP',其他TCP还能根据端口等信息判断出SSHSMB2或其他。

    2019-03-07 遇到的一点小问题
    在处理抓包数据时,发现某次data['TCP'].seq得到的seq数值比上一条小,但是Wireshark上展示的处理后数据并没有这种情况,一番查找后才发现原来scapy处理后的该类型存储为int,然后出现了大于2的32次方的情况,就重新从0开始展示了。所以在处理展示seqack数据时,减去第一条的值,如果<0还要在+=2**32

    Debug
    Java用久了,声明变量都会声明类型,遇到不熟悉的都习惯直接Ctrl进类里面查找方法,但Python不需要声明类型,有时候得到的数据也不知道什么类型,当然了知道了也看不懂里面都有什么方法可以使用。。。所有Python开发时遇到陌生类建议使用Debug来查看。不然每次遇到新的类,都要使用print(type(变量名))查看类型,print(help(变量名))print(help(scapy.fields.FlagValue))查看方法,效率太低了。

    Debug
    Vim Emulator

    安装PyCharm时,勾选了ideaVim选项,所以一打开PyCharm时没法像往常那样进行复制黏贴删除等编辑操作。解决办法就是取消勾选Tools - Vim Emulator,或者直接在Settings - Plugins,ideaVim插件,右键选择卸载。

    Tools - Vim Emulator
    Settings - Plugins

    相关文章

      网友评论

          本文标题:使用Python scapy分析pcap文件的一些记录

          本文链接:https://www.haomeiwen.com/subject/nkgcuqtx.html