数据包捕获不接收直接发送到IP地址的数据

时间:2013-09-29 18:59:37

标签: c# java android sockets

我正在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(在此处更改)。这有什么问题?

1 个答案:

答案 0 :(得分:0)

据我了解您的问题,您尝试将数据从客户端发送到数据包嗅探器。

TCP连接的主要参与者是服务器和客户端。服务器正在等待来自客户端的连接请求。客户端启动连接,然后经常发送请求。

数据包嗅探器只是一个旁观者,听取客户端和服务器的通信。

在您的描述中,我找不到有关服务器的任何信息,因此我假设没有。由于没有服务器,因此无法建立连接,客户端将获得超时。

我不知道您尝试实现的确切想法,但也许您不需要嗅探器而是服务器。但是,如果您需要实施嗅探器,则应在您的计算机上运行(Web)服务器软件,该软件接受来自客户端的连接尝试。