Wireshark是否有API可供开发人员编写与其交互/增强的程序或插件?

17

我在谷歌上找不到很好的结果。是否有适用于Wireshark的API,可以将其与主源代码分离,以便我们可以开发与其交互并处理其提供的数据的程序?

编辑:感谢您提供了不同的接收数据包的建议,但是我想要实现将数据包注入Wireshark。嗅探将是项目的重要部分,但我不确定所提供的解决方案是否允许数据包注入。


它提供的数据是指什么?这是格式化输出吗?还是收集网络数据的能力? - doron
收集网络数据的能力并不是Wireshark所独有的。然而,Wireshark的界面使其成为有用的数据,我希望为它开发一个插件。不过,要开始这项工作似乎需要浏览所有源代码,这是一项艰巨的任务。 - jim
7个回答

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)`

祝你好运!


2

tshark提供了一个CLI,可以访问Wireshark的大部分功能,如果你想利用Wireshark的协议分析器和数据操作能力。

如果你想深入研究Wireshark的源代码,它有几个C库可能会有用,特别是wiretap和epan。使用示例可以在tshark源代码中找到。但是,你需要搭建相当多的脚手架才能使用这些库。

如果你想开发插件,这个页面可能会为你提供一些答案。


2
尝试一下 Wireshark 新版本中提供的 Lua 脚本编程功能,你可以编写自定义协议解剖器(如针对自有协议等)。

http://wiki.wireshark.org/Lua


2

1

我无法找到任何信息表明在开发人员指南中可能存在这种可能性。因此,这似乎表示“不行”。


0

由于至少有一个制造商生产与Wireshark集成的商业产品,因此这一定是可能的。根据维基百科,它似乎是通过它所产生的数据进行直接集成,Wireshark使用libpcap。快速的谷歌搜索显示有几个选项可供选择。

Scapy看起来确实很有趣,虽然它并没有真正与Wireshark交互,但你可以用它来捕获数据包。


0
Wireshark使用libpcap,该库抽象了数据包嗅探中的平台差异,并提供了数据文件格式。这就是我将数据包注入Wireshark的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接