我正在监视某个端口,因为我的应用程序使用该端口,似乎连接会随机断开,我想查看连接断开之前通过的最后一个数据包是什么:我使用了这一行
sudo tcpdump -XX -i eth0 port 3050 | tail >> tcpamir.txt
但为了让它工作,我必须启动另一个终端并发出问题
sudo killall tcpdump
有更好的方法吗? EDIT1:仅捕获最后一个数据包很重要,因为我不希望文件膨胀,因为有足够的流量来快速填充磁盘空间。
答案1
好吧,我想我找到了解决方案:
sudo tcpdump -XX -i eth0 -w tcpamir-%s.txt -G 10 port 3050
这将每 10 秒将输出文件轮换为一个名为tcpamir-<unixtimestamp>.txt
如果您担心挂起的文件大小,您还可以修改输出文件,因此它每天都会覆盖自身。欲了解更多信息,请阅读man 3 strftime
。
我想到类似的东西
sudo tcpdump -XX -i eth0 -w tcpamir-%R.txt -G 86400
其中%R
给出了 24 小时制时间(例如 12:40)。
读取相关输出文件
sudo tcpdump -r tcpamir-<unixtimestamp>.txt
第二种解决方案:
将其拆分为更多命令并将其保存为脚本/函数:
sudo tcpdump -XX -i eth0 port 3050 >> tcptmp.txt
sudo tail -n100 tcptmp.txt >> tcpamir.txt
sudo rm tcptmp.txt
答案2
如果您只想写入捕获的所有流量,则只需将 -w 添加到删除行'|尾 >> tcpamir.txt'
# tcpdump -XX -i eth0 port 3050 -w tcpamir.cap
如果您要在wireshark中分析捕获,则扩展名必须是.cap当您确保捕获完成时,您可以使用以下命令杀死它Ctrl + C
注意:-w [filename.cap] 将捕获写入文件