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

本文介绍了如何使用Wireshark的Lua接口扩展其功能,以捕获和存储HTTP传输数据。通过创建监听器和定义Field对象,可以获取并分析HTTP包的各个层次,包括Frame、IP、TCP、HTTP及数据内容。提供了一个简单的Lua脚本示例,该脚本可以在tshark中运行以执行包截取。Field类用于提取包中的特定字段信息,与Wireshark协议栈显示的信息相同。

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说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值