2010-07-10 42 views
6

我試圖在本地網絡上發送SYN數據包並使用Wireshark監視它們,一切正常,除非當我嘗試將數據包發送到我自己的IP地址時,它似乎「似乎」因爲它表示發送了1個數據包,但它並未真正發送,因此我無法在Wireshark中看到數據包,也無法看到數據包的任何答案。我的設置是計算機A(192.168.0.1),TCP Socket服務器在端口40508上偵聽,計算機B(192.168.0.2)。Scapy SYN發送我們自己的IP地址

在計算機B我測試:

ip=IP(src="192.168.0.2",dst="192.168.0.1") 
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345) 
send(ip/SYN) 

它工作正常,我看到的Wireshark SYN數據包和從192.168.0.1的SYN/ACK響應

在計算機A我測試:

ip=IP(src="192.168.0.1",dst="192.168.0.2") 
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345) 
send(ip/SYN) 

它也能正常工作,我看到SYN數據包和RST/ACK(192.168.0.2上的端口40508上沒有服務器偵聽,因此它發送RST/ACK)響應來自192.168.0.2

但是當我嘗試在計算機A:

ip=IP(src="192.168.0.2",dst="192.168.0.1") 
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345) 
send(ip/SYN) 

沒有出現在Wireshark的,彷彿包從未發送,但它說,像其他測試:發送1包。並沒有返回任何錯誤。如果我在計算機B上運行相同的測試並嘗試將數據包發送到它自己的IP地址,我也遇到了同樣的問題。

對於我的程序,我真的需要發送一個SYN數據包到我自己的IP地址,有沒有辦法做到這一點,或者是不可能的?

由於提前,

Nolhian

回答

2

什麼樣的網絡設備(S)爲您的Wireshark安裝監聽?我懷疑它正在監聽實際的網卡(以太網,wifi或其他,根據Wireshark FAQ) - 當從計算機發送到自己時,操作系統當然可以繞過設備(爲什麼要打擾它?),並且只是通過在內核內存中的TCP/IP堆棧中複製位來執行「發送」。

換句話說,我懷疑你的包發送OK,只是Wireshark的可能沒看出來。爲了驗證這個假設,你可以嘗試(例如)使用瀏覽器訪問本地計算機上已有和不存在的端口,並查看Wireshark是否看到數據包。

+1

換句話說,數據包是在回送接口上發送的。 – Borealid 2010-07-10 05:24:40

+0

謝謝你的答案,我檢查過,就是這樣,數據包在loopback接口上,wireshark在lo上看到它。由於我沒有來自數據包的SYN/ACK答案,我猜它從來沒有達到192.168.0.1,我還試圖把另一個端口沒有聽到它,仍然沒有RST/ACK答案。所以我試圖讓服務器監聽127.0.0.1而不是192.168.0.1,但仍然沒有,生成的數據包在環回發送,但它沒有響應。如果服務器是在127.0.0.1,我寫了一個TCP套接字連接的Python客戶端,它工作正常... – Nolhian 2010-07-10 06:41:48

+0

我真的迷失在那裏:(任何想法,爲什麼它永遠不會在本地響應,但它會相同的生成數據包由另一臺計算機發送,或者當TCP套接字嘗試連接(甚至是本地)時? – Nolhian 2010-07-10 06:42:17

相關問題