Получение ip адреса по имени хоста

просто для ясности: я только начал Python 2 недели назад, но я разработчик C#, ASP, PHP, JavaScript.

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

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

во-первых, я думал об использовании команды MSDOS "net view", но это было до попытки этого команда на моей работе и видя, что это может занять около

15 секунд (что, я думаю, слишком медленно).

кроме того, команда" net view " может возвращать компьютеры, которые больше не находятся в сети, и вызывать исключение при попытке получить их IP-адреса по имени хоста (что также замедляет процесс каждый раз, когда компьютер не может быть доступен).

мой вопрос: есть ли способ получить все компьютеры IP и имя хоста в локальной сети, не проходя мимо net view на Windows, потому что net view может быть медленная операция?

и есть ли способ получить только компьютеры, на которых работает мое приложение? (так было бы быстрее)

2 ответов

Если вы хотите получить IP-адрес хоста, на котором скрипт работает, то ответ user2096338 — это путь.

чтобы обнаружить все компьютеры в сети в локальной сети, вы можете использовать scapy. https://github.com/bwaldvogel/neighbourhood/blob/master/neighbourhood.py это ссылка, которую я нашел при просмотре как SO вопрос; который обнаруживает все компьютеры в сети (LAN).

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

  1. всякий раз, когда вы устанавливаете свой сервер на хосте, затем регистрируйтесь в центральной базе данных, которая затем может быть запрошена новым экземпляром вашей службы для идентификации всех компьютеров, на которых работают одноранговые серверы
  2. используйте WMI (так как вы для запроса всех процессов, запущенных в одноранговой системе, проверьте, является ли ваш серверный процесс одним из них.
  3. ваш сервер будет держать пробный порт открытым, и новая установка сервера будет пинговать на сервер на этом пробном порту для каждого из хостов в сети. Если он получает ответ, то на этом компьютере выполняется серверный процесс.
Читайте также  Сервис 17 для мфу panasonic

на мой взгляд, метод 1 самый безопасный и портативный, так как он предотвращает открытие ненужного порты (например, Метод 3), которые являются дырами безопасности (в зависимости от контекста, в котором работает ваш скрипт python). Это также не зависит от доступности службы WMI на удаленных хостах (в некоторых системах WMI может быть отключен).

воскресенье, 14 августа 2011 г.

C# Получение IP адреса по имени

На C# есть несколько способов получения адреса по имени хоста. Самым распространённым является обработка возвращенного адреса после пинга
Ping p = new Ping ();

Для обхода данных проблем нужно воспользоваться более правильным подходом —

Для реализации процесса получения IP-адреса по имени хоста необходимо воспользоваться пространством имен «System.Net», которое предоставляет простой программный интерфейс для многих протоколов, используемых в современных сетях. Пространства имен «System.Net» содержат классы, обеспечивающие простой интерфейс программирования для различных сетевых протоколов, определяющие политики кэширования веб-ресурсов, а также порядок создания и отправки сообщений электронной почты, представляющие заголовки MIME, обеспечивающие доступ к данным о трафике и сетевых адресах, а также доступ к функции одноранговых сетей. Дополнительные дочерние пространства имен обеспечивают управляемую реализацию интерфейса Windows Sockets (Winsock) и доступ к сетевым потокам для защиты обмена данными между узлами.

В пространстве имен «System.Net» присутствует класс «DNS» с методом «GetHostAddresses», данный метод запрашивает у DNS-сервера IP-адреса, связанные с именем узла. Если «hostNameOrAddress» является IP-адресом, этот адрес возвращается без запроса DNS-сервера. Если в качестве имени узла передается пустая строка, этот метод возвращает IPv4-адреса локального узла для всех операционных систем, кроме Windows Server 2003; при использовании ОС Windows Server 2003 возвращаются и IPv4- и IPv6-адреса локального компьютера.
В следующем примере кода показано использование метода «GetHostAddresses», для получения IP-адреса по имени хоста.

Читайте также  Распиновка разъема клавиатуры ps 2

Если вы хотите выполнить обратную процедуру, то можете воспользоваться методом «GetHostEntry», из этого же класса. Метод запрашивает у DNS-сервера IP-адреса и псевдонимы, связанные с IP-адресом и возвращает экземпляр «IPHostEntry», содержащий сведения об адресе. Данный экземпляр содержит три параметра:

  • «AddressList» – список IP-адресов, связанных с узлом.
  • «Aliases» – список псевдонимов, связанных с узлом.
  • «HostName» – DNS-имя узла.

Свойство «HostName» содержит главное имя узла сервера. Если DNS-запись сервера определяет дополнительные псевдонимы, они будут доступны в свойстве «Aliases». Если не удается найти имя узла, возвращается исключение «SocketException» со значением «110001» (ошибка сокета Windows WSAHOST_NOT_FOUND). Так же это исключение может быть возвращено, если DNS-сервер не будет отвечать или если имя не является официальным именем или псевдонимом, или же это исключение невозможно найти в запрашиваемой базе данных.
В следующем примере кода показано использование метода «GetHostEntry», для получения имени хоста по IP-адресу.

Ссылка на основную публикацию
Adblock
detector