Сканирование для ряда свободных портов

1144

Работа над приложением, которое использует камеры.

Контроллер камеры имеет один IP-адрес (я могу определить этот IP) в сети, и каждая камера доступна с использованием этого IP-адреса и порта. Контроллер может иметь до 250 камер.

В настоящее время есть три камеры, и я хочу иметь возможность назначать порты в виде кусков, как в ... 6510, (Прием) 6520, (Док) 6530 (Парковка), чтобы я мог добавить дополнительные камеры и назначить порты, соответствующие Физическое местоположение камеры, как в ... 6510 и 6511, будет физически близко друг к другу, как и 6520, 6521 и 6522.

Как я могу найти диапазон доступных портов? Я искал в Интернете и нашел несколько сайтов, на которых указаны номера портов, но я хотел бы найти свободный диапазон для каждого ПК, на котором установлено программное обеспечение.

Как я могу сканировать неиспользуемые порты?

0
Существует только две возможности: 1) ваши камеры подключаются к какому-либо серверу и объявляют, где они находятся и какие порты они используют - например, google для ZeroConf и динамический DNS или 2) ваша программа «проверяет»: подключает каждый возможный порт и пытается общаться с камерой. Если есть услуга не камеры, связь будет прервана, и программа подключится к порту + 1 Arioch 'The 10 лет назад 0
Это не задача программирования. Это задача системного администрирования. Просто выберите диапазон портов и зарезервируйте их на своем компьютере. Netstat покажет вам, какие порты используются в данный момент; просто выберите те, которые не являются. Rob Kennedy 10 лет назад 2
Ты имеешь ввиду какой порт на ПК? Если это так, проверьте http://superuser.com/questions/451348/how-to-know-which-port-is-busy-or-free-on-windows-7/451351#451351 Dave 10 лет назад 0

1 ответ на вопрос

1
Marcus Adams

Unless you register your port numbers with IANA, other programs may try to bind to the same port (it may already be in use by another application). Even if you registered your port numbers, other programs that don't heed the standards may still try to bind to the same port.

Since you require a large number of ports and a non-specific number of ports, you probably will not have any luck registering the ports with IANA.

Therefore, you should use ports >= 49151. The standard practice is to attempt to bind to a port, and if it's in use, the bind will fail. You catch the exception and try the next port.

There is nothing that lists free ports, but you can get in-use ports. Ports range from 1 to 65535, so you can figure out the list of free ports with the list of in-use ports. I find that quite often, the list of in-use ports will show false positives. Eg. ports may show as in use that aren't actually in use any more, but eventually they clear up over time.

So, if you need blocks of free ports, you can derive that list from the in-use ports.

Your server may wish to host the list of ports that it's using via a web server on the known port 80. Client/server communication relies on having at least one known port that the client can use to connect to the server.

Похожие вопросы