Wireshark是否有API可用于开发交互或增强的程序/插件?

17 投票
7 回答
22868 浏览
提问于 2025-04-15 18:53

我在网上搜索没有找到很好的结果。有没有什么API可以让我们在不直接接触Wireshark的主要源代码的情况下,开发与它互动的程序,并处理它提供的数据呢?

补充:感谢大家提供的不同接收数据包的方法,但我想在Wireshark中实现数据包注入。虽然嗅探数据包是我项目的重要部分,但我不确定之前提到的解决方案是否支持数据包注入。

7 个回答

2

试试他们在新版Wireshark中提供的Lua脚本功能吧。你可以编写自定义的解析器,用来处理你自己的协议等等。

http://wiki.wireshark.org/Lua

2

tshark 是一个命令行工具,可以让你使用 Wireshark 的很多功能。如果你想利用 Wireshark 的协议分析和数据处理能力,这个工具会很有帮助。

如果你想深入了解 Wireshark 的 源代码,里面有几个 C 语言的库可能会对你有用,特别是 wiretap 和 epan。这些库的使用示例可以在 tshark 源代码 中找到。不过,要使用这些库,你需要搭建不少的基础设施。

如果你想开发插件,这个页面 可能会给你一些帮助。

5

我使用pypcap来读取数据包,使用dpkt来解析这些数据包。

比如,想要用dpkt从保存的pcap文件中读取数据包,可以这样做:

import socket
import dpkt
import sys
pcapReader = dpkt.pcap.Reader(file(sys.argv[1], "rb"))
for ts, data in pcapReader:
    ether = dpkt.ethernet.Ethernet(data)
    if ether.type != dpkt.ethernet.ETH_TYPE_IP: raise
    ip = ether.data
    src = socket.inet_ntoa(ip.src)
    dst = socket.inet_ntoa(ip.dst)
    print "%s -> %s" % (src, dst)

如果想用pypcap直接从网络上抓取数据帧,可以这样:

    import pcap
    pc = pcap.pcapObject()
    dev = sys.argv[1]
    pc.open_live(dev, 1600, 0, 100)
    pc.setfilter("udp port 53", 0, 0)
    while 1:
        pc.dispatch(1, p.pcap_dispatch)

当然,这两个工具可以一起使用:(摘自pypcap的主页)

>>> import dpkt, pcap
>>> pc = pcap.pcap()
>>> pc.setfilter('icmp')
>>> for ts, pkt in pc:
...     print `dpkt.ethernet.Ethernet(pkt)`

祝你好运!

撰写回答