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
还能根据端口等信息判断出SSH
或SMB2
或其他。
2019-03-07 遇到的一点小问题
在处理抓包数据时,发现某次data['TCP'].seq
得到的seq数值比上一条小,但是Wireshark上展示的处理后数据并没有这种情况,一番查找后才发现原来scapy
处理后的该类型存储为int
,然后出现了大于2的32次方的情况,就重新从0开始展示了。所以在处理展示seq
和ack
数据时,减去第一条的值,如果<0
还要在+=2**32
。
Debug
Java用久了,声明变量都会声明类型,遇到不熟悉的都习惯直接Ctrl进类里面查找方法,但Python不需要声明类型,有时候得到的数据也不知道什么类型,当然了知道了也看不懂里面都有什么方法可以使用。。。所有Python开发时遇到陌生类建议使用Debug
来查看。不然每次遇到新的类,都要使用print(type(变量名))
查看类型,print(help(变量名))
或print(help(scapy.fields.FlagValue))
查看方法,效率太低了。
Vim Emulator
安装PyCharm时,勾选了ideaVim选项,所以一打开PyCharm时没法像往常那样进行复制黏贴删除等编辑操作。解决办法就是取消勾选Tools - Vim Emulator
,或者直接在Settings - Plugins
,ideaVim插件,右键选择卸载。
Settings - Plugins
网友评论