我尝试从服务器计算GET
请求。
我使用tshark
。
我运行follow命令来过滤传入流量并仅获取GET
个请求:
/usr/sbin/tshark -b filesize:1024000 -b files:1 \
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \
-w samples.pcap -R 'http.request.method == "GET"'
如您所见,我定义了将过滤结果存储到1个文件,其最大尺寸为1G且名称为:samples.pcap
。
问题是,当我尝试打开pcap文件时,我看到tshark stored all traffic there
:
3245 172.692247 1.1.1.1 -> 2.2.2.2 HTTP [TCP Retransmission] Continuation or non-HTTP traffic
3246 172.730928 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3247 172.731944 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3248 172.791934 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1
3249 172.825303 1.1.1.1 -> 2.2.2.2 HTTP HTTP/1.1 200 OK [Unreassembled Packet [incorrect TCP checksum]]
3250 172.826329 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3251 172.826341 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3252 172.826347 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3253 172.826354 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
3254 172.826359 1.1.1.1 -> 2.2.2.2 HTTP Continuation or non-HTTP traffic
我有非常大的流量,在10分钟内我得到pcap文件大小950M。解析它需要大约4分钟。
有趣的是,当我尝试运行它而不将其存储到本地文件(但在/ tmp下)时:
/usr/sbin/tshark \
'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \
-R 'http.request.method == "GET"':
3.776587 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1
4.775624 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/clsWebClient.php HTTP/1.1
8.804702 1.1.1.1 -> 2.2.2.2 HTTP GET /services/client/client.php?cnc=13 HTTP/1.1
它可以工作,但是在这种情况下我在/ tmp下有几个大小为1G +的临时文件。
我错过了什么吗?
谢谢
=============================================== ======
修改
Lars要求添加-f
:
sudo /usr/sbin/tshark -T fields -e 'http.request.uri contains "cnc=13"' \
-b filesize:1024000 -b files:1 \
-f 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' \
-w samples.pcap
没有帮助,仍然samples.pcap存储所有流量:
74 6.908388 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic
75 6.908394 172.20.0.23 -> 89.78.170.96 HTTP Continuation or non-HTTP traffic
答案 0 :(得分:3)
当你想要组合-w和bpf数据包过滤器(即你在-f上添加的内容)时,这似乎有效:
tcpdump -nli en1 -w - 'tcp port 80' | tshark -i - -R'http.request.method == "GET"'
(用tshark替换初始tcpdump会导致本地系统出现此错误: tshark:无法识别的libpcap格式)
自1.4.0版本捕获(或从捕获中读取)并再次写出结果时,似乎不再支持保存读取过滤器(-R)的结果(请参阅:{{3} })。据推测1.4.0之前的版本允许写入pcap并使用-b
限制输出(尚未测试)。
如果您只想要-R的文本输出(而不是pcap输出)。我认为上面的命令将是你的解决方案。
要限制输出(即你提到你只想采样)你可以在处理管道的任何一点使用head -c <bytes>
:
tcpdump -nli en1 -w - 'tcp port 80' | \
tshark -i - -R'http.request.method == "GET"' | \
head -c 1024000 > output.txt
生成一个名为output.txt或
的1024000字节文本输出文件tcpdump -nli en1 -w - 'tcp port 80' | \
head -c 1024000 | \
tshark -i - -R'http.request.method == "GET"' > output.txt
处理为TCP端口80预先过滤的102400字节的pcap输入,并将文本输出放入名为output.txt的文件中
答案 1 :(得分:2)
好吧,不要使用-w,它会保存原始数据,你应该使用重定向运算符“&gt;”指定目标目录。