使用Lua读取pcap文件

我在使用lua方面很新。我的领域是在wireshark中探索lua。我有一个捕获的pcap文件。我该如何打开该文件并读取不同头中的不同信息(比如tcp/udp头中的端口号,http头中的应用程序相关信息等)。

非常抱歉这是一个直接的问题,但我没有任何东西可以参考来解决这个问题。我找不到任何例子涉及到这些信息。你们能不能至少指出一些方向/参考来利用。

点赞
用户1009479
用户1009479

在Wireshark中,Lua API非常强大。它可以用于编写分析器(dissectors)、后处理器(post-dissectors)和监控器(taps)。您可以从Wireshark软件的帮助中开始使用 Lua Support in Wireshark,或访问 参考手册。Wireshark官方 Lua wiki 也很有帮助。请注意,一些代码示例已过时。

在您的情况下,只需要对pcap文件进行分析。有另一种方法可以实现此目的。Wireshark命令工具 Tshark 可用于分析pcap文件,并将结果输出到文本文件(或者,如果需要,xml格式化文件)。您可以使用 Lua 脚本调用 tshark 并处理结果,如处理任何文本文件。

以下是我编写的在Windows中分析 Megaco 协议的示例。正如您所看到的,其他脚本语言也可以以这种方式使用,特别是 Perl。但 Lua 代码明显更优雅,并且在实践中更有效率。

local XmlFile = io.popen('"C:\\Program Files\\Wireshark\\tshark"  -nn -r 3gpp_mc.cap -d udp.port==1001,megaco -T pdml ')
--local XmlFile = io.open("xmlexample.xml", "r")
local RawXml = XmlFile:read("*all")

local Megaco = {}
for m in string.gmatch(RawXml, '<proto name="megaco".-</proto>') do
    Megaco[#Megaco + 1] = m
end

local Item = {}
for i = 1, #Megaco do
    for p in string.gmatch(Megaco[i], 'show=(".-")') do
    print(p)
    end
end
XmlFile:close()

更新: 关键是使用 tshark 输出所需信息,然后让 Lua 进行文本处理。Tshark 拥有丰富的参数集,详情请见 此处。以下是如何调用 tshark 以满足您的需求:

tshark -nn -r file.pcap -T fields -E separator=; -e frame.number -e ip.src -e ip.dst -e tcp.srcport -e tcp.dstport (tcp)
2013-06-01 14:04:48