Tshark 3.0.5如何筛选排除空值/Null的http.referer字段
解决Tshark筛选无Referer的HTTP请求问题
我来帮你搞定这两个命令的问题,同时给出精准的筛选方案:
第一个命令的错误原因及修复
你碰到的bash: !http.referer: event not found是Bash的历史命令扩展机制搞的鬼:在双引号里,!会被Bash当成调用历史命令的标记,而不是Tshark过滤规则的一部分。
修复起来很简单,把整个过滤条件用单引号包起来就行,这样Bash就不会解析里面的特殊字符了:
tshark -Y 'http.request == 1 and !http.referer' -T fields -e frame.time -e http.referer -e http.host -r traffic.pcap > no_referer.txt
这里!http.referer的作用是匹配不存在http.referer字段的HTTP请求。
第二个命令的错误原因及修复
Unexpected end of filter string是因为你在双引号里嵌套了未转义的双引号:http.referer == ""里的内层双引号会被Bash提前识别为字符串结束符,导致Tshark拿到不完整的过滤规则。
同样用单引号包裹整个过滤条件就能解决,或者转义内层双引号(前者更简洁):
# 方式1:单引号包裹整个过滤条件(推荐) tshark -Y 'http.request == 1 and http.referer == ""' -T fields -e frame.time -e http.referer -e http.host -r traffic.pcap > no_referer.txt # 方式2:转义内层双引号(双引号包裹过滤条件时用) tshark -Y "http.request == 1 and http.referer == \"\"" -T fields -e frame.time -e http.referer -e http.host -r traffic.pcap > no_referer.txt
这里http.referer == ""匹配的是存在http.referer字段但值为空的请求。
合并筛选:覆盖两种无有效Referer的场景
如果你需要同时筛选出“没有referer字段”和“referer字段为空”的两种情况,可以把两个规则合并:
tshark -Y 'http.request == 1 and (!http.referer or http.referer == "")' -T fields -e frame.time -e http.referer -e http.host -r traffic.pcap > no_referer.txt
关于Root提示的说明
Running as user "root" and group "root". This could be dangerous.只是Tshark的安全提醒,告诉你以root身份运行存在风险,只要你确认操作的安全性,这个提示不会影响命令执行。
内容的提问来源于stack exchange,提问作者user2965031
相关产品推荐
相关产品推荐

