我正在C#中构建一个win7程序,它充当数据包嗅探器,搜索特定数据包,并在接收到它时对数据包源执行traceroute。以下是捕获的外观,捕获和使用wireshark的结果是一样的。
//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){
}
问题是它在执行方法上超时。服务器是我PC的外部IP(在此处更改)。这有什么问题?
答案 0 :(得分:0)
据我了解您的问题,您尝试将数据从客户端发送到数据包嗅探器。
TCP连接的主要参与者是服务器和客户端。服务器正在等待来自客户端的连接请求。客户端启动连接,然后经常发送请求。
数据包嗅探器只是一个旁观者,听取客户端和服务器的通信。
在您的描述中,我找不到有关服务器的任何信息,因此我假设没有。由于没有服务器,因此无法建立连接,客户端将获得超时。
我不知道您尝试实现的确切想法,但也许您不需要嗅探器而是服务器。但是,如果您需要实施嗅探器,则应在您的计算机上运行(Web)服务器软件,该软件接受来自客户端的连接尝试。