您的位置:首页 > 理论基础 > 计算机网络

WireShark使用lua接口截获网络数据

2016-04-01 15:58 555 查看
wireshark可以使用lua来扩展wireshark的功能。

例如你可以用wireshark结合lua来做一个截获http传输并存储到磁盘的脚本。

首先定义一个监听器用来监听http数据包。

local tap = Listener.new("http")


然后定义里需要截获的分析好的数据,这需要使用Field对象。

例如

local host = Field.new("http.host")--用来获得http协议的host字段
local location = Field.new("http.location")--用来获得http协议的location字段
local dst_ip = Field.new("ip.dst")
local src_ip = Field.new("ip.src")--获得包的目的ip地址与源ip地址
local dst_port = Field.new("tcp.dstport")--获得tcp协议的目的端口号


可以使用Field.list()函数来获得可用Field的完整列表。你也可以在wireshark的Filter Expression列表中找到这些字段。

然后可以为tap定义一个回调函数packet,每当有http协议的报文时wireshark将调用这个函数,参数tvb是报文的二进制缓冲区。在该函数中调用Field变量可以取得分析好的字段,如果不存在返回nil。

我们要截获的http协议包就包括这几层协议Frame,IP,TCP,HTTP,data-text-lines(这个是http内容),这些上层协议的字段你都可以通过Field字段取得。

下面这一个截获框架,你可以使用tshark -X lua_script:tap.lua来执行这个例子,当然它什么都不做。tshark -Q 可以关闭多余的打印,-i 2 选择设备2。

tap.lua

local tap = Listener.new("http")

local http = Field.new("http")
local host = Field.new("http.host")
local location = Field.new("http.location")
local dst_ip = Field.new("ip.dst")
local src_ip = Field.new("ip.src")
local dst_port = Field.new("tcp.dstport")
local src_port = Field.new("tcp.srcport")

local text = Field.new("data-text-lines")

function tap.packet(pinfo,tvb,tapinfo)
--获取对应的字段
local dst = dst_ip()
local src = src_ip()
local h = host()
local dstp = dst_port()
local srcp = src_port()
--这里可以对截获的数据做存储打印等处理
print(tostring(dst))
print("host : "..tostring(h))
end

function tap.draw()
print("draw called")
end

function tap.reset()
print("reset called")
end


Field就是用来提取俘获包中的相应字段的,和WireShark界面中的协议栈中的信息等价。

详细的API说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua wireshark 网络 抓包