在 OS X 上使用 pypcap 和 dpkt 的 Python 嗅探器

标签 python pcap packet-sniffers dpkt

我实际上是在尝试用 python 嗅探数据包(使用 pypcap 和 dpkt)。

我尝试了以下方法:

import dpkt, pcap
pc = pcap.pcap()     # construct pcap object
pc.setfilter('src host X.X.X.X or dst host X.X.X.X')
for timestamp, packet in pc:
    print dpkt.ethernet.Ethernet(packet)

但是当我启动脚本时没有任何反应......我是不是错过了什么?

使用 Python 2.7 在 OS X 优胜美地 (10.10) 上

最佳答案

这个问题很老,但对于可能遇到这个问题的新人来说。 github“链”项目使用 pypcap 和 dpkt 来完成这类事情(免责声明:我参与了所有三个项目:) https://github.com/SuperCowPowers/chains

  • chains/sources/packet_streamer.py(显示使用 pypcap 进行“嗅探”的代码)
  • chains/links/packet_meta.py(显示使用 dpkt 进行数据包解析的代码)

对于那些只想使用 pypcap/dpkt 的人,这里有一个有效的代码片段:

import pcap
import dpkt

sniffer = pcap.pcap(name=None, promisc=True, immediate=True)
for timestamp, raw_buf in sniffer:
    output = {}

    # Unpack the Ethernet frame (mac src/dst, ethertype)
    eth = dpkt.ethernet.Ethernet(raw_buf)
    output['eth'] = {'src': eth.src, 'dst': eth.dst, 'type':eth.type}

    # It this an IP packet?
    if not isinstance(eth.data, dpkt.ip.IP):
        print 'Non IP Packet type not supported %s\n' % eth.data.__class__.__name__
        continue 

    # Grab ip packet
    packet = eth.data

    # Pull out fragment information
    df = bool(packet.off & dpkt.ip.IP_DF)
    mf = bool(packet.off & dpkt.ip.IP_MF)
    offset = packet.off & dpkt.ip.IP_OFFMASK

    # Pulling out src, dst, length, fragment info, TTL, checksum and Protocol
    output['ip'] = {'src':packet.src, 'dst':packet.dst, 'p': packet.p,
                    'len':packet.len, 'ttl':packet.ttl,
                    'df':df, 'mf': mf, 'offset': offset,
                    'checksum': packet.sum}
    print output

关于在 OS X 上使用 pypcap 和 dpkt 的 Python 嗅探器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27162098/

相关文章:

python - 提取 xarray 中的坐标值

python - 解决 setup.py 中的 header 依赖关系

python - 使用 pcapy 或 scapy 监控自生(HTTP)网络流量

c - 如何解决 ‘struct iphdr’ 没有名为 ‘daddr’ 的成员之类的错误

带有本地设备服务器的 iOS 数据包隧道提供程序

python - Python 中的 Json 文件处理 : Writing input to file

python - 从字典中减去元素

python - Python中的“就地”字符串修改

c# - 如何使用 C# 正确解析 RAW(Raw Ip) 数据包?

filter - 如何在 WireShark 中只捕获传入的 TCP 流?