我已经设置了一个简单的脚本,如下所示:
sshpass -p $password ssh -T $username@$ip_address -p 30007 <<- EOF > $save_file.pcap
sh
tcpdump -i eth5.1 -s 0 -n -v -U -w -
EOF
sed -i '1d' $save_file.pcap
该脚本的目的是让我可以在远程设备上运行 tcpdump,同时将输出保存到本地计算机上的文件中(远程设备的存储容量非常有限,因此这将允许我获得大量捕获,当然,还可以让我更快地按需设置捕获)。
和 heredoc的目的sh
是因为默认情况下,我不会被放入此远程设备的适当外壳中。在远程设备中发出sh
让我能够运行我的 tcpdump 的正确 shell,而这个 heredoc 是我发现完成此任务并且仍然将信息移植回我的本地文件的唯一方法。
我遇到的问题是,一旦脚本到达该脚本的 tcpdump 部分,我的终端就会得到如下输出,就像我在将 tcpdump 运行到文件时所期望的那样:
drew@drew-Ubuntu-18:~/Desktop$ ./Script.sh
tcpdump: listening on eth5.1, link-type EN10MB (Ethernet), capture size 65535 bytes
Got 665
当然,随着越来越多的数据包被捕获并通过管道传输到我的本地文件中,“Got”计数器也会增加。不幸的是,到目前为止,我发现停止此操作并返回终端的唯一方法是启动CTRL
+ C
。
这里的问题是,这不仅会停止远程机器上的 tcpdump,还会结束在我的本地机器上运行的脚本。
这当然意味着我的脚本中没有任何进一步的运行,并且除了sed
我在这里包含的数据之外,我还需要使用这些数据执行许多任务。
我试图改为设置如下:
tcpdump -i eth5.1 -s 0 -n -v -U -w - &
read -n 1 -s; kill $!
这里的思考过程是我的原始 tcpdump 信息仍将发布到标准输出,因此仍将填充到我的本地捕获文件中。但是,似乎当我尝试以这种方式运行捕获时&
,它实际上并没有让我在终端中发布任何其他内容(不确定是否总是有太多的垃圾飞行或什么)。我什至在本地尝试过,似乎尝试将原始 tcpdump 发布到标准输出并不会让其他任何事情发生。
基于这些信息,此时我唯一能想到的就是我是否可以使用某种方式使用CTRL
+C
来关闭远程计算机上的 tcpdump,但保持我的脚本仍在运行。我可以尝试任何建议吗?或者其他更合乎逻辑的方法?
我建议对您的远程捕获流量脚本进行一些改进:
防止CTRC+C杀死你的脚本:
这可以使用陷阱来捕获
SIGINT
。您通常将其放在脚本的开头。看这个例子:显然,可以改进获得您想要的唯一 ssh 的过滤器。
从中过滤掉与远程机器的通信
tcpdump
您告诉我们您的系统对捕获反应不佳,可能是递归数据捕获使系统过载。根据您正在收听的接口,您可能会创建一个递归情况,其中在您与远程计算机的每个连接中,控制连接数据将被添加到捕获中,这反过来将生成更多数据包来馈送
tcpdump
。所以你
tcpdump
可能需要过滤掉本地和远程机器之间的通信。使用类似于:或者:
这可能会缓解缓慢和不稳定,因此脚本会表现得更好。稍后请参阅有关使用
nc
.限制数据包的数量
tcpdump
以避免一直使用CTRC+ C。如果您只想捕获一小部分流量,则应
tcpdump
限制tcpdump
.例如捕获 100 个数据包并返回:
限制
tcpdump
时间以避免一直使用CTRC+ C。如果要捕获 5 分钟(300 秒)的流量,请使用
timeout
远程端的命令。如:丢掉那个壳
您正在使用 shell,因为您需要 $PATH 来调用
tcpdump
. 而是调用完整tcpdump
路径。如:
无缓冲
tcpdump
tcpdump
输出到tcpdump
tostdout
被缓冲。要取消缓冲以更快地从远程主机获取数据,并在中断它时丢失更少的数据,请使用-l
:这对您的情况可能有用也可能没用,请进行一些测试。当你用 CTRL-C 打断它时,它肯定会给你留下更多的数据。
不使用 SSH 获取流量转储。改为使用
netcat
。如果您没有如此严格的安全要求,例如在您自己的网络中进行捕获,并且没有防火墙阻止两台主机之间的端口,请放弃该 SSH 以获取
tcpdump
输出。这是一个计算量很大的协议,如果您需要捕获更多的远程流量,它会妨碍您。改为使用nc
来获取tcpdump
数据。与本地机器一样:
远程机器:
放弃那个
sshpass
使用 ssh 密钥而不是密码进行身份验证。
最后,如果做得更专业,考虑使用代理+专业服务的可能性。
您可以使用
cshark
.