使用lua读取pcap文件

时间:2013-05-31 19:40:03

标签: networking lua wireshark packet

我在使用lua时非常新。我的地区是在wireshark探索lua。我有一个捕获的pcap文件。如何打开该文件并在不同的标题中读取不同的内容(如tcp / udp标题中的端口号,http标题中的应用程序相关信息等)。
我很抱歉这是一个直接的问题,但我没有任何东西要提及解决这个问题。我无法在哪里找到这些信息的例子。你们可以在某个方向/参考方面至少取决于使用。

1 个答案:

答案 0 :(得分:4)

wireshark中的Lua API功能非常强大。它可以用来编写解剖器,后解剖器和水龙头。您可以从Wireshark软件帮助中的Lua Support in Wireshark 开始,或Reference Manual。 wireshark官方Lua wiki也很有帮助。请注意,某些代码示例已过期。

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

这是我在Windows中分析Megaco protocal的一个例子。如您所见,其他脚本语言也可以这种方式使用,尤其是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有一组丰富的参数可供使用,有关详细信息,请参阅here。以下是根据您的需要致电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)