2来自远程主机的tcpdumps

问题描述:

我需要从远程主机的不同接口收集tcpdump。
目前我做以下列方式:2来自远程主机的tcpdumps

ssh remotehost "tcpdump -i iface1 -w - " > iface1_dump.pcap & 
ssh remotehost "tcpdump -i iface2 -w - " > iface2_dump.pcap 

我不知道是否有实现它在单一的SSH连接(也许有些复杂的shell重定向是治愈),以尽量减少数据包丢失,而方式第二ssh命令是在它的途中
2条件:
远程主机具有真正磁盘空间有限,所以我不能在该主机上本地和tcpdump
的tcpdump -i任何影响以太网头,所以我不能使用它

创建目标机器上,在你把这些2行上的一个文件“SEND_DATA”:

tcpdump -i iface1 -w - | nc <IP> <PORT1> 
tcpdump -i iface2 -w - | nc <IP> <PORT2> 

每台机器都有netcat的,所以它的工作原理。您标记SEND_DATA可执行

接下来,你的电脑上打开一个监听端口,和远程计算机上运行脚本:

> OUT1 nc -l -p PORT1 
> OUT2 nc -l -p PORT1 
ssh remotehost SEND_DATA 

在这一瞬间,文件OUT1 & OUT2将开始接收数据。

您还需要查阅2个版本的nc手册,因为我看到有时参数有所不同。

+0

你无法相信,但该主机没有安装nc/netcat。 这是非常特定的服务器,运行非常特定的WindRiver Linux发行版 – 2012-07-21 15:05:09

+0

然后,您必须安装netcat,某些ssh客户端,某些ftp客户端等。否则,您可以将2个命令放入scrit文件,并配置tcpdump以输出不同的内容在同一个控制台上,然后在PC上拆分合并的输出。 – alinsoar 2012-07-21 15:07:41

这两个ssh可能是最好的方法,但你也可以在第一个sed的'/ ^/one /'上,第二个sed's/&/two /',以及然后在本地主机上用“egrep'^ one'| sed's/one //'”将它们分开。

您也可以将输出保存在一对文件中,并在“完成”时将其返回。

ssh remotehost "tcpdump -iiface1 -w- & 
       tcpdump -iiface2 -w- >&2 2>/dev/null" >iface1_dump.pcap 2>iface2_dump.pcap