我有一个与 Oracle 数据库通信的应用程序,它的日志记录非常糟糕,因此我唯一能弄清楚它向我们的数据库发送了什么 SQL 的方法就是通过嗅探 TNS.requests 数据包;我想根据数据包中包含特定名称(即是否存在特定字符串)来过滤这些数据包。我该怎么做?
谢谢。
答案1
您是否尝试过“包含”或“匹配”运算符?例如,
tns.request and tns contains "Marshmallows"
或者简单地
frame matches "(?i)marshmallows"
第一个例子查找包含区分大小写的字符串“Marshmallows”的 TNS 请求。第二个例子查找任意框架中任意位置的“marshmallows”,忽略大小写。(“contains”执行简单的字符串匹配;“matches”允许您使用 PCRE 修饰符)。
更新:在 Wireshark 2.6 及更高版本中,“匹配”默认不区分大小写。您可以使用“(?-i)”PCRE 修饰符来强制区分大小写。
答案2
您的问题有多种解释:
您正在使用 WireShark,并希望进行更复杂的过滤以更好地分析数据。在这种情况下,请阅读文档。您还可以在Lua,如果您需要额外的表现力。
你想过滤掉这些数据包;即应用程序级防火墙或国家入侵检测系统。 查看L7 过滤器用于防火墙/整形,或呼噜对于 NIDS(我认为后者也可以使用一些 Lua 脚本)
您想捕获数据包以记录、创建统计数据或执行任何其他自动化任务。检查tcpdump / libpcap和/或我自己的Lua 的 libpcap 绑定。