Wireshark是否有API可用于开发交互或增强的程序/插件?
我在网上搜索没有找到很好的结果。有没有什么API可以让我们在不直接接触Wireshark的主要源代码的情况下,开发与它互动的程序,并处理它提供的数据呢?
补充:感谢大家提供的不同接收数据包的方法,但我想在Wireshark中实现数据包注入。虽然嗅探数据包是我项目的重要部分,但我不确定之前提到的解决方案是否支持数据包注入。
7 个回答
2
试试他们在新版Wireshark中提供的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)`
祝你好运!