Как проверить, указывают ли два имени хоста или адреса ввода-вывода на одну и ту же машину в c

#c #c #sockets #ip-address #hostname

#c #c #сокеты #ip-адрес #имя хоста

Вопрос:

У меня есть несколько машин, и для них определены имена хостов. Я хочу написать программу на c , которая проверяет, указывают ли оба имени хоста на разные машины, и выполнить некоторые шаги. Если оба они указывают на один и тот же компьютер, программа должна быть завершена. strcmp нельзя использовать для сравнения, поскольку у машины может быть несколько имен хостов.

Комментарии:

1. Разрешите имена хостов, а затем сравните IP-адреса?

2. Виртуальные машины значительно усложняют это.

Ответ №1:

Прежде всего, вам нужно понять, что означает «машина».
Хост может иметь несколько IP-адресов (например, две сетевые карты / сетевые адаптеры).

Если вы готовы тестировать только для «одного и того же IP», тогда вы можете использовать
gethostbyname() вызов для преобразования разных имен в фактический IP.

Даже это не является огнестойким, поскольку для выполнения перевода оно использует ЛОКАЛЬНЫЕ ресурсы (DNS)
, и если оно настроено неправильно, может привести к разным результатам.

Один из способов узнать наверняка — настроить агент на удаленной машине (или использовать что-то вроде telnet или ping), который на самом деле пытается получить доступ к имени / адресу и посмотреть, отправляются ли они в одно и то же место назначения.

Комментарии:

1. Меня не беспокоят сетевые IP-адреса. Имеет ли каждая машина свой собственный уникальный IP-адрес?

2. @rsev4292340: Обычно да, по крайней мере, локально. Однако 192.168.1.1 не является глобально уникальным; с этим адресом миллионы машин.