Wireshark:显示过滤器与嵌套解析器

2024-02-02

我有一个通过 AMQP 发送 JSON 对象的应用程序,我想使用 Wireshark 检查网络流量。 AMQP 解析器将有效负载作为字段中的一系列字节给出amqp.payload,但我想提取和过滤 JSON 对象中的特定字段,因此我尝试在 Lua 中为此编写一个插件。

Wireshark 已经有一个 JSON 解析器,所以我希望能够利用它,而不必自己处理 JSON 解析。

这是我的代码:

local amqp_json_p = Proto("amqp_json", "AMQP JSON payload")
local amqp_json_result = ProtoField.string("amqp_json.result", "Result")
amqp_json_p.fields = { amqp_json_result }
register_postdissector(amqp_json_p)

local amqp_payload_f = Field.new("amqp.payload")
local json_dissector = Dissector.get("json")

local json_member_f = Field.new("json.member")
local json_string_f = Field.new("json.value.string")

function amqp_json_p.dissector(tvb, pinfo, tree)
   local amqp_payload = amqp_payload_f()
   if amqp_payload then
      local payload_tvbrange = amqp_payload.range
      if payload_tvbrange:range(0,1):string() == "{" then
         json_dissector(payload_tvbrange:tvb(), pinfo, tree)
         -- So far so good.  Let's look at what the JSON dissector came up with.
         local members = { json_member_f() }
         local strings = { json_string_f() }
         local subtree = tree:add(amqp_json_p)
         for k, member in pairs(members) do
            if member.display == 'result' then
               for _, s in ipairs(strings) do
                  -- Find the string value inside this member
                  if not (s < member) and (s <= member) then
                     subtree:add(amqp_json_result, s.range)
                     break
                  end
               end
            end
         end
      end
   end
end

(首先,我只是看看result字段,我正在测试的有效负载是{"result":"ok"}.)

它让我成功了一半。以下内容显示在数据包解析中,而如果没有我的插件,我只能得到 AMQP 部分:

Advanced Message Queueing Protocol
    Type: Content body (3)
    Channel: 1
    Length: 15
    Payload: 7b22726573756c74223a226f6b227d
JavaScript Object Notation
    Object
        Member Key: result
            String value: ok
            Key: result
AMQP JSON payload
    Result: "ok"

现在我希望能够使用这些新字段作为显示过滤器,并将它们添加为 Wireshark 中的列。以下工作适用于两者:

  • json(显示为Yes当作为列添加时)
  • json.value.string(我也可以用json.value.string == "ok")
  • amqp_json

But amqp_json.result不起作用:如果我将它用作显示过滤器,Wireshark 不会显示任何数据包,如果我将它用作列,则该列为空。

为什么它的行为不同json.value.string and amqp_json.result?我怎样才能实现我想要的? (看来我确实需要一个自定义解析器,就像json.value.string我只能过滤any成员具有一定的价值,但不一定result.)


I found wireshark-dev 邮件列表上的一个帖子 http://wireshark-dev.wireshark.narkive.com/qMnA5KPY/lua-post-dissector-not-getting-field-values(“Lua 后解析器未获取字段值”,2009-09-17、2009-09-22、2009-09-23),指向interesting_hfids哈希表,但从那时起代码似乎发生了很大变化。

如果您想尝试一下,这里是我的 PCAP 文件,base64 编码,包含一个数据包:

1MOyoQIABAAAAAAAAAAAAAAABAAAAAAAjBi1WfYOCgBjAAAAYwAAAB4AAABgBMEqADcGQA
AAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB/tcWKO232y46mkSqgBgxtgA/AAAB
AQgKRjDNvkYwzb4DAAEAAAAPeyJyZXN1bHQiOiJvayJ9zg==

解码用base64 -d(在 Linux 上)或base64 -D(在 OSX 上)。


事实证明我不应该尝试比较display的财产json.member场地。有时它由 JSON 解析器设置,有时它只是保持不变Member.

正确的解决方案包括检查json.key字段,但由于我正在寻找的密钥可能永远不会被转义,所以我可以在range成员字段的属性。

所以而不是:

            if member.display == 'result' then

I have:

            if member.range:range(1, 6):string() == 'result' then

现在过滤和列都可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wireshark:显示过滤器与嵌套解析器 的相关文章

  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • 确定已编译Lua的编译器版本

    我有一些已编译的 LuaQ 我需要确定用于编译它的确切版本 有什么可能的方法吗 编译的脚本在文件开头有一个标头 4 bytes signature x1bLua 1 byte version 0x51 1 byte format 1 byt
  • AMQP 消息的版本控制

    是否有关于在 AMQP 中使用版本化消息的既定最佳实践 假设我正在对消息模式进行语义版本控制 我希望支持消息的当前主要版本以及以前的主要版本 这是一个现实的期望吗 处理版本化消息的不同选项有何优缺点 我已经看到版本化路由密钥和版本消息头作为
  • 如何在 emacs lua-mode 中配置缩进?

    完整的 emacs 新手在这里 我在 Ubuntu 上使用 emacs 23 1 1emacs 入门套件 https github com technomancy emacs starter kit 我主要在 lua 模式下工作 安装了pa
  • Lua 访问表的键和值

    我想在关卡编辑器中读取 Lua 文件 这样我就可以以可视化格式显示其数据供用户编辑 如果我有一个像这样的 Lua 表 properties Speed 10 TurnSpeed 5 Speed显然是关键并且10价值 我知道如果我知道像这样的
  • 如何通过 C API 在自己的环境中执行不受信任的 Lua 文件

    我想通过调用在其自己的环境中执行不受信任的 lua 文件lua setfenv http pgl yoyo org luai i lua setfenv这样它就不会影响我的任何代码 该函数的文档仅解释了如何调用函数 而不解释如何执行文件 目
  • 在Luasocket中,在什么条件下,即使在select告诉它可以安全读取之后,accept调用也可以阻塞?

    卢阿索基特select http w3 impa br diego software luasocket socket html select函数应该告诉何时可以在不阻塞的情况下读取套接字 它显然也可以用来告诉服务器套接字何时准备好接受新连
  • 如何使用wireshark清晰捕获mysql查询sql

    因为我们使用远程开发Mysql服务器 所以不能轻易检查查询sql 如果使用本地服务器可以tail f general log file查看调用某个http接口时执行了哪些sql 所以我安装了一个wireshark捕获这些从本地发送的查询sq
  • Lua C API:初始化结构体 C 中的变量矩阵

    我正在尝试使用 Lua C API 创建一个用户数据 并在其中关联一个元表 我将在其中收集矩阵 我无法得到的是如何将初始化矩阵的每个分量设置为零 我按照我的描述编译我的 Lua 模块 C 代码here https stackoverflow
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 从 Java/Spring 检索 RabbitMQ 队列中未确认消息的数量

    有没有办法返回未确认的消息数 我正在使用此代码来获取队列中的消息数 DeclareOk declareOk amqpAdmin getRabbitTemplate execute new ChannelCallback
  • RabbitMQ 3.1.3 和丢失的时间戳头

    如果消息中缺少时间戳头 是否可以将代理配置为插入时间戳头 因此 如果发布客户端没有添加时间戳标头 代理是否可以插入与交易所收到消息的时刻相匹配的时间戳值 我应该在哪里寻找该配置 或者这是一个坏主意 截至2015年 原来的问题有了新的答案 这
  • 如何从 Lua 内部运行另一个脚本?

    我需要从另一个 Lua 脚本中执行一个 Lua 脚本 有多少种方法 我该如何使用它们 通常您会使用以下内容 dofile filename lua 但你可以通过以下方式做到这一点require 很好 例子 foo lua io write
  • MiBand 2 可以检测触摸吗?

    我在Github上看过很多非官方的MiBand SDK 例如 https github com Freeyourgadget Gadgetbridge https github com Freeyourgadget Gadgetbridge
  • 云到设备 Azure IoT REST API

    我探索了如何使用 Azure REST API 将数据从设备发送到云 它运行无缝 没有任何问题 我没有找到有关使用 Azure IoT Hub REST API 向 Arduino 板发送云到设备消息的好文章 有人可以就此提供建议吗 您还可
  • 表长度运算符的性能

    卢阿有 运算符来计算用作数组的表的 长度 在诸如 C 之类的语言中 计算出某个内容的长度后 通常不会再次计算它 例如int len strlen string 这在 Lua 中有什么不同吗 其中一个的效率是否比另一个低 显然这可能不会显示显
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • Lua(命令行)执行后保持打开状态

    我已经广泛寻找这个但我似乎找不到它 有什么方法可以执行Lua通过双击脚本 在中执行它 Lua Command Line 并在执行后保持打开状态 例如 print Hello World 该代码可以编译并运行 但是如果我双击hello lua
  • Linq 是如何工作的(在幕后)?

    我正在考虑为 Lua 制作类似 Linq 的东西 并且我大致了解 Linq 的工作原理 但想知道是否有一篇好文章 或者是否有人可以解释 C 如何使 Linq 成为可能 注意 我的意思是在幕后 比如它如何生成代码绑定等等 而不是最终用户语法
  • 如何循环遍历表并保持顺序?

    我得到了下表 local a 12 30 24 60 60 year 30 24 60 60 month 24 60 60 day 60 60 hour 60 minute 1 second 但是 当我对它进行配对循环并打印 key val

随机推荐

  • 如何在 MonoTouch 和 Objective-C 之间做出选择? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 今天在当地 Net 活动中参加了关于 Mono 的会议后 人们 接触 了 MonoTouch 作为 iPhone 开发的替代方案 尽管 Mono
  • Javascript / jQuery - 如何将媒体和图像数据转换为二进制文本格式

    我需要通过 json 发送图像 媒体 因为需要将其转换为文本格式 我如何通过 jQuery Javascript 实现这一点 你可以在这篇文章中找到你的答案在javascript中获取图像数据 https stackoverflow com
  • 删除 svn 存储库中的所有文件

    也许这是一个非常简单的问题 但我还没有找到如何删除外部 SVN 存储库中当前存在的所有文件 我可以使用以下方法仅删除一个文件 svn delete m delete README http myrepo com svn myrepo REA
  • 上传文件时克服主机对 PHP/POST 数据的最大文件大小限制?

    我目前拥有一个相当平庸的低成本 共享 主机 因为这是我现在能负担得起的 并且希望在页面上实现一个非常基本的文件上传功能 我希望允许将最大 100MB 的文件上传到服务器 但我的免费主机将 PHP MAX FILESIZE 限制为 32MB
  • Rails 3 的 API 错误自定义,如 Github api v3

    我正在 Rails3 应用程序上添加一个 API 效果非常好 但我在以下位置看到了以下 Github api v3http developer github com v3 http developer github com v3 HTTP
  • C# 子类返回类型的协方差

    有谁知道为什么 C 不支持协变返回类型 即使尝试使用接口 编译器也会抱怨这是不允许的 请参阅以下示例 class Order private Guid id private String productName private double
  • PHP XMLWriter,如何插入换行符?

    我正在使用 XMLWriterhttp www php net manual en book xmlwriter php http www php net manual en book xmlwriter php让我的网络客户端创建一个 X
  • ZF2 如何获取最后插入的id值?

    我一直坚持使用 Zend Framework 2 获取最后一个插入 id 我放弃了这个 有尝试过的组合 var dump this gt tableGateway gt insert insert var dump this gt tabl
  • 使用 Capistrano + Gitlab 进行部署,使用 via:remote_cache

    我正在使用 capistrano 部署 PHP Web 应用程序 并且我们有一个内部 gitlab 服务器 无法在网络外部访问 我正在尝试使用remote cache进行部署 因为如果使用它进行复制会花费很多时间 我已经查过了This ht
  • Mongodb 验证错误

    我面临着这个奇怪的问题 它给了我特定模式的 ValidationError 我不太确定崩溃的原因 因为对象的类型对我来说似乎非常好 works fine but the Data in ObservationsObject is LOST
  • 将按钮与屏幕底部对齐

    我在框架布局中有两个按钮 希望它们在屏幕底部对齐 一个在另一个下面 Using android layout gravity bottom 使它们相互重叠 我使用相对布局没有任何问题 但相对布局不支持android layout gravi
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0,

    我正在与 EF 合作 我正在尝试执行这一行 public ActionResult Edit string id return View obj FindSemesterById id 我在我的项目中安装了 EF 版本 5 但我收到这个错误
  • 在 PHP 中重写 web.config 中的查询字符串 url

    我想重定向 url 来自http example com page name id 45 http example com page name id 45 to http example com page name 45 http exam
  • 批处理文件:如何读取文件?

    如何从批处理文件中读取文件 文本或二进制 有没有办法以二进制模式或文本模式读取它 在 NT 风格的 cmd exe 下 您可以使用以下命令循环遍历文本文件的行 FOR F i IN file txt DO echo i 在命令提示符下键入
  • 在 Android 中从 HTML 生成位图

    如何在 Android 中从 HTML 生成位图 Can the WebView用于此或是否有更好的方法 例如可能使用WebView直接渲染引擎 如何 我想实现以下方法 public Bitmap toBitmap Context cont
  • 覆盖 grails.views.default.codec='html' 配置回 'none'

    在 Grails grails views default code none 在 grails Config groovy 中 我可以在 GSP 文件中显式对表达式进行 HTML 编码 myValue encodeAsHTML 如果我设置
  • Django 中的自动完成字段

    我有类似以下的模型 class Country models Model name models CharField max length 50 unique True class City models Model name models
  • 在codeigniter php中将多维数组转换为单数组

    我有一个多维数组 如下所示 Array 0 gt Array 0 gt stdClass Object id gt 237 1 gt stdClass Object id gt 228 1 gt Array 0 gt stdClass Ob
  • Pandas - 尽管存在但未阅读的列

    我有以下一组数据 url team1 team2 win toss bat or bowl outcome win game date day n night ground rain duckworth lewis match id typ
  • Wireshark:显示过滤器与嵌套解析器

    我有一个通过 AMQP 发送 JSON 对象的应用程序 我想使用 Wireshark 检查网络流量 AMQP 解析器将有效负载作为字段中的一系列字节给出amqp payload 但我想提取和过滤 JSON 对象中的特定字段 因此我尝试在 L