2013-09-29 71 views
0

我在C#中構建了一個win7程序,它充當一個數據包嗅探器,用於搜索特定數據包,並在收到數據包時執行traceroute。捕捉看起來如何,捕捉和使用wireshark的結果是一樣的。數據包捕獲沒有收到直接發送到IP地址的數據

//Start capture 
       startStop.Text = "Stop"; 

       capture = true; 

       socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 

       info.Text = "Capturing on: " + ifaces.SelectedItem.ToString(); 
       socket.Bind(new IPEndPoint(ifs[ifaces.SelectedIndex], 0)); 

       socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); 

       byte[] byTrue = new byte[4] { 1, 0, 0, 0 }; 
       byte[] byOut = new byte[4]; 

       socket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut); 

       socket.BeginReceive(data, 0, data.Length, SocketFlags.None, new AsyncCallback(OnReceive), null); 

發送特定數據包的程序是一個將數據發送到IP地址的android應用程序。

try{ 
      string server="http://32.32.32.32/" 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(server); 
      httppost.setEntity(new StringEntity("TRACERT")); 
      HttpResponse response = httpclient.execute(httppost); 
     }catch(Exception e){ 

     } 

問題是它在執行方法上超時。服務器是我的電腦的外部IP地址(在這裏更改)。這裏有什麼問題?

回答

0

據我瞭解您的問題,您嘗試將數據從客戶端發送到數據包嗅探器。

TCP連接的主要玩家是服務器和客戶端。服務器正在等待來自客戶端的連接請求。客戶端啓動連接並經常發送請求。

數據包嗅探器只是一個旁觀者,正在監聽客戶端和服務器的通信。

在你的描述中我找不到有關服務器的任何信息,所以我認爲沒有。由於沒有服務器,連接無法建立,客戶端獲得超時。

我不知道你試圖實現的確切想法,但也許你不需要一個嗅探器,而是一個服務器。但是如果你需要實現一個嗅探器,你應該在你的計算機上運行一個(網絡)服務器軟件,它接受來自客戶端的連接嘗試。

+0

我建立了XAMPP Apache服務器。它適用於我使用內部IP並從同一個Wifi內發送。與外部它不。 – hubert

+0

@hubert我假定內部和外部地址是指您的互聯網路由器在WAN端(外部)使用的地址以及您在路由器(內部)後面的專用IP範圍內使用的地址。您是否在路由器中配置了端口轉發以將端口80轉發到您的計算機?你可以從外面訪問你的網絡服務器(使用普通的瀏覽器,也許從你的移動設備)? –

相關問題