Как мне определить хосты в моей локальной сети?

StackOverflow https://stackoverflow.com/questions/397789

  •  29-08-2019
  •  | 
  •  

Вопрос

Чтобы помочь пользователям, я хотел бы, чтобы мой код обнаруживал базы данных Oracle в локальной сети.Я думал сделать это, сначала обнаружив все хосты, затем проверив каждый хост, чтобы увидеть, прослушивает ли он порт Oracle по умолчанию.

Есть какие-нибудь идеи, как это сделать?Предпочтительно на Java, но подойдет любой язык или алгоритм.

Это было полезно?

Решение

Используете ли вы DHCP?Если это так, то на вашем DHCP-сервере есть список переданных им договоров аренды.Этого должно хватить для списка хостов в локальной сети.Затем попробуйте открыть соединение с портом Oracle на каждом из этих хостов и посмотрите, принимает ли он это соединение.

Это должно быть довольно просто реализовать в виде сценария оболочки из полудюжины строк или около того.Java кажется излишеством для чего-то подобного.Просмотрите файл аренды, получите IP-адрес из каждой аренды и подключитесь по telnet к порту Oracle;если он подключится, отключите и выведите IP-адрес на стандартный вывод.

Другие советы

Если вы хотите оставаться независимым от платформы, и если у вас нет доступа к какой-либо базе данных, в которой перечислены хосты, единственный способ получить список - это попробовать каждый IP-адрес в локальной сети - с тем же успехом можно попытаться подключиться к порту Oracle на каждом из них.

С таким подходом связано много проблем:

  • Будет выполнять поиск только по локальной сети, которая может быть лишь небольшой частью локальной сети (в случае крупных компаний с большим количеством подсетей).
  • Может занять много времени (вы определенно хотите сократить время ожидания попыток подключения, но если кто-то настроил свою локальную сеть как сеть класса А, это все равно займет вечность)
  • Может запускать все виды предупреждений, такие как персональные брандмауэры пользователей настольных компьютеров и системы обнаружения вторжений - потому что вы делаете в точности то же самое, что сделал бы кто-то, пытающийся воспользоваться дырой в безопасности серверов Oracle

Как указывает Браззи, сканирование хостов, скорее всего, вызовет проблемы, особенно если в вашем сканере обнаружена ошибка.

Лучшим подходом может быть заставить владельцев баз данных зарегистрировать их где-нибудь, например, в локальной службе DNS (или у Oracle есть поддержка zeroconf?), или просто на какой-нибудь веб-странице интрасети или wiki.

Вам лучше зарегистрировать имена / адреса SID на каком-нибудь сервере с фиксированным адресом (возможно, с помощью простого веб-сервиса), а затем запросить список оттуда.Другой подход - это грубый (объясненный @brazzy) путем сканирования одной или нескольких подсетей, но на самом деле это не самый лучший вариант.

На случай, если вы ищете инструмент Туалет@Lan могу сделать это за тебя.К сожалению, доступного источника нет...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top