Как мне просканировать локальную сеть в поисках сервера?

Я пишу небольшую программу, которая будет подключаться к FTP-серверу, работающему на телефоне Android (который подключен через WiFi к той же сети). У меня нет контроля над кодом Android для FTP-сервера.

Проблема в том, что ПК, на котором запущена моя программа, и телефон имеют динамически распределяемые IP-адреса, и оба эти IP-адреса часто меняются.

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

Первоначальные исследования предполагают, что я должен определить IP-адрес ПК и маску подсети, а затем использовать их для расчета диапазона IP-адресов для сканирования.

Так, например, если ПК 192.168.1.70, а маска подсети 255.255.255.0, моя программа должна сканировать от 192.168.1.1 до 192.168.1.254, чтобы найти этот телефон с FTP-сервером.

Учитывая, что я не могу изменить код FTP-сервера для выполнения какой-либо трансляции, является ли это правильным способом проверки существования службы? Если нет, то как мне это сделать?

В качестве бонуса: есть ли простой способ рассчитать, какой диапазон я должен сканировать в VB.net?


person Richard    schedule 16.12.2014    source источник
comment
имя устройства неизвестно клиенту? Также: что делать, если в сети активен другой FTP-сервер?   -  person Alex    schedule 16.12.2014
comment
Я пытался запустить nbtstat -A с IP-адресом телефона, и ничего не возвращается, так что я прав, предполагая, что имя устройства неизвестно? Неважно, есть ли другие FTP-серверы, поскольку программа попытается подключиться (используя предоставленные учетные данные) и продолжит сканирование, если они не работают.   -  person Richard    schedule 16.12.2014


Ответы (1)


Поскольку вы ничего не знаете о сервере (ни имени, ни адреса), поиск его с помощью сканирования диапазона кажется единственным способом.

Что касается диапазона, вы можете найти решение в другом месте на SO, например этот вопрос кажется хорошим.

person Alex    schedule 16.12.2014