0

我在监听指定端口时遇到问题。我有以下代码:

Socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Unspecified);
Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
Socket.Bind(new IPEndPoint(localAddr, 80));

Socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), BitConverter.GetBytes(0));

Socket.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, new AsyncCallback(ReadCallback), null);

一切似乎都很好,我捕获了传入和传出的数据包,我拥有我需要的所有信息,只有一个例外 - 它侦听所有端口,而不仅仅是我在 Bind() 方法中指定的 80。有谁知道如何在端口 80 上读取这些内容?

4

2 回答 2

0

我拥有我需要的所有信息,只有一个例外 - 它侦听所有端口,而不仅仅是我在 Bind() 方法中指定的 80

没有任何例外。从您发布的代码来看,它不可能从端口 80 以外的任何端口读取。

于 2013-09-06T09:29:43.213 回答
0

阅读 Microsoft 的文档(http://msdn.microsoft.com/en-us/library/windows/desktop/ee309610(v=vs.85).aspx)告诉我们这一行

Socket.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), BitConverter.GetBytes(0));

网络接口控制器将捕获LAN 上的所有IPv4 或 IPv6 流量。我不知道如何通过配置将其限制在某个端口,所以我认为你必须自己过滤数据。

于 2013-09-09T08:28:32.483 回答