@leidek

Как осуществить сканирование портов локальной сети в JAVA?

Возможно ли просканировать порт локальной сети (роутера) любым способом (TCP SYN вероятно простейший) нативными средствами JAVA?

Задача состоит в необходимости сетевого соединения нескольких программ, не зная заранее IP компьютеров. Алгоритм примерно такой - посылаю широковещательное сообщение (по порту UDP по умолчанию например 1234). Остальные слушают этот порт, и, при получении сообщения, коннектятся к полученному IP. Проблема в том, что порт может быть закрыт или недоступен.

Как можно проверить, не зная других IP, что порт открыт? Адрес роутера примем известным. Вероятно, несу ересь, поскольку пока плаваю в теме, или в упор не вижу более простых способов.
  • Вопрос задан
  • 4236 просмотров
Пригласить эксперта
Ответы на вопрос 1
1. Открываете какой-либо заранее заданный UDP-порт на прослушивание. (Если проблема в том, что Вы боитесь, что порт будет уже занят каким-то другим сервисом, то заведите пул портов 5-10 в разных частях диапазона).

2. Отправляете широковещательный UDP-пакет на этот порт(ы) с определенной сигнатурой. Если такая сигнатура получена - начинаете обмен. Если какой-то другой сервис занял этот порт, то он просто проигнорирует неизвестную ему сигнатуру.

Широковещательные TCP-запросы невозможны - только UDP.

Если задача установить именно TCP-соединение, то перед широковещательной рассылкой открываете какой-либо свободный TCP-порт на прослушивание, а в UDP-пакете после сигнатуры, указываете, какой номер TCP-порта открыт.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 23:39
3000 руб./за проект
30 апр. 2024, в 23:32
1500 руб./за проект
30 апр. 2024, в 22:44
500 руб./в час