Python - SPAN端口上的Pcapy to Scapy,奇怪的行为

时间:2015-05-05 09:05:07

标签: python scapy

我在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镜像端口。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

没关系,只是我是个白痴,我责怪银行假日星期一。我试图从错误的层检测数据包。将raw转换为Ether,Scapy为我完成剩下的工作。

def callback(hdr, data):

    pkt = Ether(data)

    if IP in pkt:

        print pkt[IP].dst
    else:

        print list(pkt)

干杯