IP-адрес, полученный gethostbyname(), отличается от браузера, подключенного к

Я написал тестовую программу для захвата пакетов для данного доменного имени. Я использовал gethostbyname() для получения IP-адреса и pcap для захвата пакетов, предназначенных для этого IP-адреса. Счетчик pcap_loop() был установлен в -1, поэтому он должен продолжать захват.

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

После тестирования, хотя это верно для многих веб-сайтов, оно не применимо для сайтов с большим трафиком, таких как Google или Ebay. Это означает, что если я пингую ip-адрес, полученный из gethostbyname(), пинг-пакеты будут перехвачены программой, но если я зайду на google.com в firefox, пакеты не будут перехвачены. Это показывает, что может быть другой IP-адрес для того же доменного имени, как google.com.

Если это так, почему DNS-сервер возвращает разные ips для google.com, в то время как другие идентичны? И в чем разница, если она есть, между запросами из gethostbyname() и запросами из веб-браузера?

Заранее спасибо.

1 ответ

Решение

В случае, если данное доменное имя преобразуется в более чем один IP-адрес, вам необходимо убедиться, что ваш фильтр захвата настроен для захвата для всех из них, потому что вы никогда не знаете, какой из них выберет веб-браузер. Если вы отфильтруете только (скажем) первый возвращенный, есть только 1 шанс из n, что вы выберете тот же, что и в веб-браузере (где n - количество адресов).

Кстати, вы должны рассмотреть возможность использования getaddrinfo() вместо gethosybyname(), gethostbyname() устарела и устарела. Самое главное, он не может вернуть адреса IPv6.

gethostbyname() возвращает список разрешенных IP-адресов в виде массива... но только IPv4.

getddrinfo() возвращает список разрешенных IP-адресов в виде связанного списка.

Другие вопросы по тегам