我正在尝试为基于Wireshark的命令行编写TShark过滤器。 我想将这些选项添加到命令中:
-i 2 (interface with index n°2)
-a duration:60 (the "scan" should last 60 seconds)
-v (print the result and exit)
-x (print an ASCII dump in the file)
和仅捕获具有这些特性的数据包的过滤器:
"ip" (only IP packets)
"ip.src == 192.168.0.1" (source IP adress should be 192.168.0.1)
"ip.dst == 111.222.111.222" (destination IP adress should be 111.222.111.222)
"port == 80 or port == 443" (port should be http or https)
"http.request.method == 'GET'" (it should be a GET request)
然后我想将结果保存在文件“test.txt”中。 所以最后的命令应该是:
tshark -i 2 -a duration:60 -vx -f "ip" && "ip.src == 192.168.0.1" && "ip.dst == 111.222.111.222" && "port == 80 or port == 443" && "http.request.method == 'GET'" > test.txt
但我不断收到来自Windows的错误消息,指出'"ip.src == 192.168.0.1"
不是公认的内部或外部命令。我试着用空格,没有空格等等,但是无法想办法让这个工作。
问题可能来自我“链接”条件的方式。
答案 0 :(得分:1)
和仅捕获具有这些特殊性的数据包的过滤器
...
“http.request.method =='GET'”(应该是GET请求)
最后一部分 EXTREMELY 很难与捕获过滤器一起使用。如果可以避免这种情况,使用捕获过滤器 rest 相对容易:
"ip src 192.168.0.1 && ip dst 111.222.111.222 && (tcp port 80 or tcp port == 443)"
并且您可能能够将整个* shark过滤器用作读取过滤器:
-r "ip && ip.src == 192.168.0.1 && ip.dst == 111.222.111.222 && (tcp.port == 80 or tcp.port == 443) && http.request.method == 'GET'"
(请注意它是tcp.port
,而不仅仅是port
)。
但是,请注意,对于HTTP-over-SSL / TLS,如果请求已加密,您必须安排解密这些请求才能使http.request.method == 'GET'
生效。< / p>
(“or”子句的括号可能没有必要,但我更喜欢它们只是使表达式的含义更加明显。)
答案 1 :(得分:0)
tshark -f
选项需要capture filters,而不是wireshark显示过滤器。这与libpcap语法相同。
答案 2 :(得分:0)
您必须删除过滤器部件之间的"
个字符。尝试:
"ip && ip.src == 192.168.0.1 && ip.dst == 111.222.111.222 &&
port == 80 or port == 443 && http.request.method == 'GET'"