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

时间:2013-09-06 09:19:13

标签: c# .net sockets port

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

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

2 个答案:

答案 0 :(得分:0)

  

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

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

答案 1 :(得分: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));

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