如何使用tcpdump捕获最后N秒的数据包


14

如何使用tcpdump捕获数据包的最后N秒?


1
“给我”不会把你带到这里。也许您应该向我们展示您到目前为止所做的尝试,以及您究竟在哪里遇到无法解决的问题。
matthias krull 2011年

您想要的bash命令是:“ man tcpdump”
William Pursell 2011年

Answers:


15

如果只希望tcpdump运行n秒然后退出,则可以使用超时。

例如:

timeout 2 tcpdump -eni mon0

否则,我不相信tcpdump可以选择执行此操作。


不幸的是,CentOS 5.x中没有超时命令。它是在较新版本的coreutils中添加的。我升级操作系统的另一个动机。
Mister_Tom 2014年

我想如果您没有超时,则可以使用脚本创建类似超时的内容:
siesta 2014年

对我来说很棒。我用它来监视无法正常运行的程序的所有流量。我以N秒的超时时间启动了tcpdump。然后,我启动了该程序(最多需要N秒)。
Trevor Boyd Smith

问题要求捕获最后 N秒。您的答案告诉您如何捕获 N秒。
Flimzy

3

我认为实现此目标的最佳方法是使用tcpdump的-G标志,该标志与-w一起使用时,将每N秒将转储保存到一个新文件中。例如:

tcpdump -w outfile-%s -G 10

这将每隔10秒创建一个新文件,名称为“ outfile-XXXX”(其中XXXX代表自纪元以来的秒数)。

有关更多详细信息,请参见tcpdump(8)和strftime(3)的手册页。


CentOS 5.10附带的tcpdump 3.9.4没有-G选项。我真的需要升级我的操作系统。
Mister_Tom,2014年

-G不会停止tcpdump命令。它仍然永远运行。超时2 tcpdump将在2秒后停止命令。
ciceron

@ciceron:问题不在于停止tcpdump。这是关于捕获最后N秒。您的建议将捕获 N秒。绝对不是OP要求的。
Flimzy

1

您可以使用tethereal代替tcpdump。您可以使用以下命令行选项:

-a duration:X

尽管这可以回答问题,但是如果您可以提供解释为什么会这样做会更好。
DavidPostill

tcpdump本身不允许有时间限制的数据包跟踪,但tshark允许。(自从问及回答此问题以来,nthe成为Ethreal成为Wireshark) tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcap将从接口eth0到文件$ {hostname).10mins.pcap中捕获价值十分钟的流量
Andrew Beals

0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

记下PID,说是11193

at 11:00 kill 11193

现在只需等到11:00,您的捕获将被杀死但会被保存


fwiw pgrep是ps | grep的更好选择;特别是在这里
好人

0

我试图解决相同的问题,所以,我编写了一个可移植的脚本以n秒钟运行tcpdump。

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

用法./tcpdump_for_n_sec.sh tcpdump的秒参数

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap

0

sudo tcpdump -i -w&将运行tcpdump处于睡眠模式

  • w:将输出保存在.pcap文件中&:tcpdump进程将在睡眠模式下运行注意:如果需要,请确保有足够的可用空间。运行一段时间。如果注销,它将终止,直到您终止进程为止。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.