[Wireshark] 11.4.Post-Dissection Packet Analysis

847 阅读2分钟

11.4.1.Listener

每一个与特定过滤器或特定tap(test access port,测试接入端口 ) 匹配的数据包都会调用一次监听器(Listener)。它能够读取协议树、数据包的Tvb缓冲区以及分路数据,但它不能够向协议树中添加数据;

11.4.1.1.Listener.new([tap],[filter],[allfields])

创建一个新的Listener tap对象

  • 参数

    • tap(可选)

      该tap的名字。详见 Listener.list() 中关于如何打印有效的监听器名称;

    • filter(可选)

      一个应用于tap的显示过滤器。每个匹配的数据包都将调用 tap.packet 函数。它的默认值是 nil,它匹配每一个数据包(例如,“m2tp”);

    • allfields(可选)

      是否生成所有的field,默认是 false;

      PS:这很影响性能;

  • 返回值

    • 一个新创建的 Listener 监听器对象;
  • 可能出现的错误

    • tap registration error

11.4.1.2.Listener.list()

得到一个包含所有已注册的 Listener tap 名称的Lua数组表;

ps:这个操作开销非常大,应仅在错误排查时使用;

11.4.1.3.示例

--print a list of tap listener to stdout
for _,tap_name in pairs(Listener.list()) do
    print(tap_name)
end
  • 返回值

    • 一个包含所有已注册的 tap 名称的Lua数组表;

11.4.1.4.listener.remove()

移除一个tap Listener;

11.4.1.5.listener:__tostring()

为tap Listener 生成调试信息字符串;

11.4.1.6.listener.packet

模式:仅用于赋值(Mode: Assign only)

一个当有数据包与 Listener 监听器过滤器匹配时就会被调用的方法;

当再之后被Wireshark调用时,packet方法将会被赋予以下参数:

  1. 一个 Pinfo 对象
  2. 一个 Tvb 对象
  3. 一个 tapinfo
function tap.packet(pinfo,tvb,tapinfo) ... end

ps: tapinfo 是一个基于 Listener的类型的表,不存在则为空;

11.4.1.7.listener.draw

模式:仅用于赋值(Mode: Assign only)

一个每隔几秒钟就会被调用一次的方法,用来重新绘制GUI对象;

在Tshark中,该函数仅在每次捕获文件(capture file)结束时调用;

当再之后被Wireshark调用时,draw 方法将不会被赋予任何参数;

 function tap.draw() ... end

11.4.1.8.listener.reset

模式:仅用于赋值(Mode: Assign only)

一个仅在捕获运行(capture run)结束时调用的放法;

当再之后被Wireshark调用时,reset 方法将不会被赋予任何参数;

function tap.reset() ... end