侦听 C# 套接字中的特定端口

本文关键字:套接字 侦听 | 更新日期: 2023-09-27 18:30:19

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

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 上阅读这些内容?

侦听 C# 套接字中的特定端口

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

没有任何

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

从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 流量。我不知道如何通过配置将其限制为某个端口的方法,因此我认为您必须自己过滤数据。