C#套接字,如何获取所有侦听(套接字)计算机的IP地址和端口号

时间:2011-01-13 22:31:09

标签: c# sockets

我正在使用C#套接字在设备(客户端)和计算机(服务器)之间建立连接。 一切都很好,除了我试图避免用户输入设备上连接的IP地址和端口号这一事实。相反,我想要一个列表框或下拉列表中的所有IP地址与侦听套接字。只是想知道是否有办法获得监听(套接字)主机的所有IP地址和端口号?

感谢您的帮助! :)

2 个答案:

答案 0 :(得分:2)

您要求做的是称为端口扫描。它主要涉及测试范围和每个端口中的每个IP地址,并报告该尝试的成功。它很慢,如果网络上有任何类型的威胁监控,它会引起很多警报,因为端口扫描是攻击者试图找到网络漏洞的方式之一。

所以简而言之,这是一个坏主意,可能不会足够响应你用于此目的。相反,您可能会考虑使用中央服务器作为每个服务器将注册的“目录”。

或者您可以在子网上send out a broadcast并等待服务器响应。这就是一些对等网络在Windows中的工作方式。请注意,这假设您也是服务器的开发人员,您可以添加服务器监听广播所需的逻辑。

答案 1 :(得分:0)

通过使用UDP广播,您可以将数据发送到正在侦听固定端口的服务器。以下是工作示例。

 foreach (IPAddress ip in allLocalNetworkAddresses.AddressList)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);


            //Allow sending broadcast messages
            client.SetSocketOption(SocketOptionLevel.Socket,
            SocketOptionName.Broadcast, 1);

               //Create endpoint, broadcast.
            IPEndPoint AllEndPoint = new IPEndPoint(IPAddress.Broadcast, Port);                     

            byte[] sendData = Encoding.ASCII.GetBytes("1");
           //Send message to everyone on this network
            client.SendTo(sendData, AllEndPoint);
            Console.Write("Client send '1' to " + AllEndPoint.ToString() +
            Environment.NewLine);