Отправлять и получать ICMP с необработанным сокетом канала связи через локальный интерфейс

Я изучаю программирование сырых сокетов в Linux и нашел эти полезные примеры. Я скомпилировал файл icmp4_ll.c и использовал его для отправки ICMP-пакета на другой компьютер в той же локальной сети. Я могу получить ответ от конечного компьютера. Однако когда я использовал его для отправки ICMP-пакета на локальный компьютер, то есть я установил MAC-адрес и IP-адрес Ethernet источника и назначения на MAC-адрес и IP-адрес eth0, я не могу получить ответ ICMP ни по eth0, ни по lo. интерфейс (В Wireshark я заметил только ICMP-запрос, отправленный через eth0, но ICMP-ответа не было ни на одном интерфейсе.) Я думаю, что ICMP-запрос составлен правильно (в противном случае удаленное назначение не ответит). Но я не знаю, почему ОС просто не отвечает на запрос. Любая помощь или советы приветствуются.

1 ответ

RFC 792 определил особые условия для сообщений ICMP:

  • Сообщения об ошибках ICMP не отправляются в ответ на сообщения об ошибках ICMP, чтобы избежать бесконечного повторения.

  • Для фрагментированных дейтаграмм IP сообщения ICMP отправляются только для ошибок с фрагментированным нулем (первый фрагмент).

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, предназначенную для широковещательного или многоадресного адреса.

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, отправляемую в качестве широковещательной рассылки на канальном уровне.

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, адрес источника которой не представляет уникальный хост (адрес источника не может быть нулевым, адрес обратной связи, широковещательный адрес или адрес многоадресной рассылки).

  • Сообщения об ошибках ICMP никогда не отправляются в ответ на какое-либо сообщение IGMP. Когда получено сообщение ICMP неизвестного типа, оно должно быть отброшено без уведомления.

Маршрутизаторы почти всегда генерируют сообщения ICMP, но когда дело доходит до хоста назначения, количество генерируемых сообщений ICMP зависит от реализации.

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