python3使⽤scapy分析修改pcap⼤⽂件(1G)
对pcap⽂件分析⽐较常⽤的是C语⾔进⾏分析。这⾥由于常⽤python3,所以在⽹上寻使⽤python3来处理这种⼤pcap包。不过现在⽹上有的对应教程⾮常少,⽽⼀⼤部分是⽤rdpcap来打开⽂件的,这个⽅法在打开⼤⽂件是完全⾏不通的,内存完全不够⼤,⽽且运⾏太慢。最后我到了使⽤PcapReader读⽂件返回⼀个迭代器来解决⼤⽂件占⽤太多内存的问题。在pcap中数据结构⾥处理中也遇到了很多问题。下⾯我就说⼀下我的⼀些总结。【代码运⾏没问题】
附:如果觉得scapy处理⼤⽂件偏慢,希望能够更加快速的遍历pcap⽂件,可以看我的这篇博客:
python3安装scapy【仅供参考】:
⾸先导⼊包
from scapy.all import *
接下来是读取pcap⽂件:
with PcapReader('input.pcap') as pcap_reader:#返回⼀个迭代器
for pkt in pcap_reader:#for循环进⾏遍历
#对pkt进⾏相应的处理
要对pkt进⾏处理,⾸先得知道怎么访问⾃⼰要访问的数据,这⾥pkt直接打印会是这样:
这样的输出显然不是我们想要的,这⾥采⽤repr(pkt)返回⼀个字符串【这⾥我也不懂哈】,打印出来:
这⾥已经可以把⼀个数据包完整的打印出来了。但如果我们要对数据包进⾏过滤呢?⽐如把arp包过滤掉:
if 'ARP' in pkt:
continue
就是这么简单,过滤TCP,UDP也是⼀样的。如果我们要对源IP,⽬的IP等进⾏更改,可以这样做:
pkt['Ether'].src = '00:00:00:00:00:01'
pkt['Ether'].dst = '00:00:00:00:00:03'
pkt['IP'].src = '10.0.0.1'
pkt['IP'].dst = '10.0.0.3'
前两个是更改mac地址,后⾯两个是更改IP地址,他这⾥的索引原理我没整明⽩,如果有懂这个的⼤佬望告知!
最后附上完整代码:
#coding=utf-8
from scapy.all import *
#import os
def change(pkt):
pkt['Ether'].src = '00:00:00:00:00:01'
pkt['Ether'].dst = '00:00:00:00:00:03'
pkt['IP'].src = '10.0.0.1'
pkt['IP'].dst = '10.0.0.3'
return pkt
def write_file():#过滤并进⾏写⽂件
writers = PcapWriter('udp_from_input.pcap')#被写的⽂件
i=0
with PcapReader('input.pcap') as pcap_reader:#进⾏读的⽂件        for pkt in pcap_reader:
if 'UDP' in pkt:
#print(repr(pkt))
pkt = change(pkt)
writers.write(pkt=pkt)
print(i)#计数⽤,表⽰程序还在跑,没有卡死
i+=1
def read_test(n):#读函数
i=0
with PcapReader('udp_from_input.pcap') as pcap_reader:
for pkt in pcap_reader:
python怎么读文件
print(repr(pkt))
if(i>n):
break
i+=1
if __name__=='__main__':
read_test(4)#这⾥是进⾏读
希望能够多多交流!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。