Можно ли получить все хосты в сети LAN (используя C). Мне нужно получить IP-адреса и имена хостов.
Получить все хосты в сети LAN в C?
Ответы (1)
Как объяснено в этом ответе, нужно пропинговать все хосты в вашей подсети и посмотреть, какие из них отвечают или обращаются к кешу ARP. Первый подход реализуется путем создания необработанного сокета с использованием
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP));
Однако необработанные сокеты в основном дают вам только IP-заголовок, поэтому вам нужно самостоятельно создать эхо-пакет ICMP. После того, как вы его создали, вы просто отправляете их на каждый IP-адрес в подсети, используя sendto()
, и ждете ответа. Для второго подхода я предлагаю прочитать что-то вроде этого.
Что касается определения имен хостов, это зависит от того, имеют ли хосты имена DNS или NETBIOS. Если в вашей локальной сети настроен DNS, вам может сойти с рук вызов getaddrinfo()
по адресам, которые отвечают. К сожалению, я понятия не имею, как узнать NETBIOS-имя любого заданного IP-адреса.