2012-07-21 48 views
0

我需要從遠程主機的不同接口收集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任何影響以太網頭,所以我不能使用它

回答

0

創建目標機器上,在你把這些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

0

這兩個ssh可能是最好的方法,但你也可以在第一個sed的'/ ^/one /'上,第二個sed's/&/two /',以及然後在本地主機上用「egrep'^ one'| sed's/one //'」將它們分開。

您也可以將輸出保存在一對文件中,並在「完成」時將其返回。

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