為什麼tcpreplay發送的封包沒有出現在伺服器上?

為什麼tcpreplay發送的封包沒有出現在伺服器上?

我正在嘗試將 pcap 檔案重播到 HTTP 伺服器。在此之前,我嘗試手動檢查我是否正確使用 tcpreplay。

我已經開始netcat -l 12345監聽特定連接埠。讓我們稱其為“伺服器”在我運行的其他機器上tcpdump捕獲所有流量,目標為文件中的特定連接埠dummy.pcap。之後,我在客戶端電腦上運行 netcat,連接到“伺服器”並發送幾條訊息。我檢查了 pcap 的結果tshark,它顯示資料包已被捕獲。

我再次在伺服器上啟動 netcat,並在客戶端上啟動 tcpreplay:

tcpreplay -d 5 -i eth0 -t dummy.pcap

但伺服器上的 netcat 控制台上沒有任何顯示。我嘗試在“伺服器”上運行 tcpdump,它顯示已收到資料包。

為什麼封包沒有出現在 netcat 控制台中?

答案1

TCPreplay 將重播伺服器上的流量,但由於 TCP 協定的性質,它實際上並未與伺服器「通訊」。因此,基本上您的伺服器正在接收 TCP 封包,但從未建立實際的 TCP 連接,因為重播未完成正確的握手。這就是為什麼您的 netcat 中沒有顯示 TCP 會話的原因。

根據我的經驗,這種 tcpdump 僅對分析有用,如果您擔心複製一系列命令/數據,您需要找到一個特定於您的協定的工具(在我的例子中,它涉及編寫自訂客戶端)。

如何記錄和回放http互動?

來自 tcpreplay維基百科:

向伺服器發送流量

問題

您有一個 pcap 捕獲並希望在另一台伺服器上重播該流量。

解決方案

首先,這僅適用於 ICMP 和 UDP 流量。 Tcpreplay 不支援在伺服器上傳送 TCP 流量,因為它不同步 TCP 流中的 Syn/Ack 編號。

也就是說,您需要變更目標 IP 和 MAC 位址以符合目標伺服器的 IP 和 MAC 位址。在本例中,我們假設目標伺服器 IP 為 10.10.1.1,其 MAC 位址為 00:01:02:03:04:05。

還有他們的常問問題:

=== tcpreplay 支援傳送流量給伺服器嗎? === 如果「伺服器」指的是監聽連接埠的守護程式 (Unix) 或服務 (Windows)(常見的例子是 Web 或郵件伺服器),那麼可能不是。最大的問題是 tcpreplay 不了解 TCP 等常見協定的狀態。這意味著它無法同步 Syn/Ack 來建立有效的 TCP 會話。

相關內容