在LINUX下演示tcpdump抓包时,发现无法实现又显示当前抓到的包,又把文件保存起来的方式。找了一下国内的解决方法,怎么也找不到,用bing去国外一找第一个就是:
https://stackoverflow.com/questions/25603831/how-can-i-have-tcpdump-write-to-file-and-standard-output-the-appropriate-data
我根据实际情况调整如下:
tcpdump arp -v -U -w - | tee arp.pcap | tcpdump -r -
另一个会话 ping 一个同网段中不存在的IP,这里就可以看出一个个包显示出来。Ctrl+C中止后,就可以看到arp.pcap的文件。
这个命令很烧脑,分步解释一下:
tcpdump arp 是指抓 arp 类型的包。
-v 是显示详细情况,但在 -w 的参数影响下,只显示 got 5 这样的内容了。
-U 文件及时写入,而不是缓存一些后再写
(用 -l 也可以实现相同效果,但两者还是)
-w 把抓到的内容写到文件中,其中后面跟的文件是一个“减号”!即标准输入/输出。这种用法我没碰过。
然后用 tee 把标准输出保存成文件
然后继续用 tcpdump -r 把标准输入解析显示出来。
现在看到关键是 tee,我反过来,在百度搜索 tcpdump tee,虽然出现了好几条,甚至man tcpdump中就自带示例了。
tcpdump arp -l | tee arp.pcap
这个一点也不费解。但抓到的包是文本的,丢失了原始的二进制信息。