“tcpdump”捕获最后的数据包

“tcpdump”捕获最后的数据包

我正在监视某个端口,因为我的应用程序使用该端口,似乎连接会随机断开,我想查看连接断开之前通过的最后一个数据包是什么:我使用了这一行

 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] 将捕获写入文件

相关内容