Сокеты C #, Как получить IP-адреса и номер порта всех слушающих (сокетов) компьютеров - PullRequest
0 голосов
/ 14 января 2011

Я использую сокеты C # для соединения устройства (клиента) и компьютера (сервера).Все работает хорошо, за исключением того, что я пытаюсь избежать ввода пользователем IP-адреса и номера порта для подключения к устройству.Вместо этого я хочу список или раскрывающийся список всех IP-адресов с прослушивающими сокетами.Просто интересно, есть ли способ получить все IP-адреса и номера портов хостов с прослушиванием (сокетом)?

Спасибо за любую помощь!:)

Ответы [ 2 ]

2 голосов
/ 14 января 2011

То, что вы просите сделать, называется сканированием портов. В основном это включает тестирование каждого IP-адреса в диапазоне и каждого порта и сообщение об успешности этой попытки. Это медленно и вызывает много аварийных сигналов, если в сети есть какой-либо мониторинг угроз, потому что сканирование портов является одним из способов, которыми злоумышленники пытаются найти сетевые уязвимости.

Короче говоря, это плохая идея, и, вероятно, вы не будете достаточно отзывчивы, чтобы вы могли использовать ее для этой цели. Вместо этого вы можете рассмотреть использование центрального сервера в качестве «каталога», в котором каждый сервер будет регистрироваться.

Или вы можете отправить широковещательную рассылку в своей подсети и дождаться ответа серверов. Вот как некоторые из одноранговых сетей работают в Windows, например. Обратите внимание, что это предполагает, что вы также являетесь разработчиком сервера и можете добавить логику, необходимую серверу для прослушивания трансляций.

0 голосов
/ 28 августа 2015

Используя широковещательную рассылку 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...