2013-09-29 155 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转发到您的计算机?你可以从外面访问你的网络服务器(使用普通的浏览器,也许从你的移动设备)? –

相关问题