2017-05-04 53 views
0

我正在嘗試使用tcpdump測試單向tcp捕獲的linux行爲。嘗試捕獲服務器上的單向tcp數據

這種情況是服務器A通過交換機M向目的地Y發送數據包。同時,M也將發送相同的數據包到目的地Z,在那裏我想捕獲所有數據包。 A到Y的連接是一個tcp連接。

爲了合成上述場景,我有3個端子上服務器Ž打開運行下面的命令:

  1. nc -l 0.0.0.8 4444

  2. telnet -b 0.0.0.10 0.0.0.8 4444

  3. tcpdump -i <interface name associated with 0.0.0.8> port 4444

0.0.0.8和0.0.0.10是單獨的插槽中的獨立NIC卡,在這種情況下是插槽1和插槽6。

從telnet會話,我成功地發送數據,但是,tcpdump沒有捕獲任何數據包。如果我從終端3中刪除port 4444,我會看到來自我的網絡的數據,但從telnet會話中看不到任何數據。我還應該注意到,我也沒有收到錯誤消息。

我假設,b/c我在互聯網上閱讀它,該telnet創建一個tcp連接,這就是爲什麼我相信tcpdump應該工作。我錯了嗎?我應該做其他事嗎?在這臺服務器上不能使用WireShark或類似的東西。我也試過tcpdump host 0.0.0.8 port 4444無濟於事。非常感謝您的任何建議。

+1

操作系統可能會繞過網卡,因爲源和目標位於同一臺計算機上,所以tcpdump無法捕獲它。 Unix.SE或SuperUser.com會是這個問題的更好地方,因爲它不是關於編程。 – Barmar

回答

0

如果節點M是一個真正的開關,而不是一個集線器,則節點Z不應該接收去往節點Y的TCP報

TCP是基於連接的協議。也就是說,當節點A想要與節點Y交談時,它將首先廣播一個請求節點Y的MAC地址的ARP請求(請注意,連接到交換機的所有節點都將看到此數據包)。當節點Y用它的MAC地址直接響應節點A時,則節點A將直接向節點Y發起TCP連接。

如果節點M是交換機,它將僅將目的地爲MAC地址F的分組直接轉發給它知道要連接到具有MAC地址F的節點的端口。它不會將該分組轉發到所有端口,而只轉發到目標節點的端口。另一方面,如果節點M是集線器,它將始終將所有數據包轉發到所有端口,而不管目的地是什麼。