#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 не является глобально уникальным; с этим адресом миллионы машин.