我在Scapy中构建了一个网络嗅探器,但它无法处理我正在嗅探的数据包的速率(它增加了15-20分钟的延迟,这是不可接受的)。我以前以这种速度使用过Pcapy并取得了成功,但这次要省去我不得不重新编写使用Scapy的所有解析代码,我想将Pcapy收到的数据包转换为Scapy IP对象。问题是,当我尝试这样做时,我得到的IP和协议号码被加扰/不可用,就像Scapy读取数据包的错误部分一样。
下面的一些示例代码:
#!/usr/bin/python
from pcapy import findalldevs, open_live
from impacket import ImpactDecoder, ImpactPacket
from scapy.all import *
def sniff():
interface = "eth3"
print "Listening on: %s" % interface
# Open a live capture
reader = open_live(interface, 65535, 1, 100)
# Set a filter to be notified only for TCP packets
reader.setfilter('ip proto \\tcp')
# Run the packet capture loop
reader.loop(0, callback)
def callback(hdr, data):
pkt = IP(data)
if IP in pkt:
print pkt[IP].dst
# Parse the Ethernet packet
#decoder = ImpactDecoder.EthDecoder()
#ether = decoder.decode(data)
# Parse the IP packet inside the Ethernet packet
#iphdr = ether.child()
# Parse the TCP packet inside the IP packet
#tcphdr = iphdr.child()
# Only process SYN packets
#if tcphdr.get_SYN() and not tcphdr.get_ACK():
# # Get the source and destination IP addresses
# src_ip = iphdr.get_ip_src()
# dst_ip = iphdr.get_ip_dst()
# # Print the results
# print "Connection attempt %s -> %s" % (src_ip, dst_ip)
def main():
sniff()
if __name__ == "__main__":
main()
输出的一个例子:
30.184.113.84
0.120.231.205
30.184.113.91
5.64.113.97
0.120.231.206
21.248.113.98
0.120.231.207
0.120.231.208
0.120.231.209
0.120.231.210
0.120.231.211
0.48.243.73
正如你所看到的那些知识产权没有意义,你认为我哪里出错了。 Eth3连接到NetGear镜像端口。
感谢您的时间。
答案 0 :(得分:0)
没关系,只是我是个白痴,我责怪银行假日星期一。我试图从错误的层检测数据包。将raw转换为Ether,Scapy为我完成剩下的工作。
def callback(hdr, data):
pkt = Ether(data)
if IP in pkt:
print pkt[IP].dst
else:
print list(pkt)
干杯