Я изучаю программирование сокетов rawatalink на Linux, и я нашел их полезными examples. Я скомпилировал icmp4_ll.c и использовал его для отправки ICMP-пакета на компьютер-пыльник в той же локальной сети. Я могу получить ответ с конечного компьютера. Тем не менее, когда я использовал его для отправки ICMP-пакета на локальный компьютер, то есть я установил MAC-адрес и IP-адрес Ethernet и IP-адреса Ethernet в адрес MAC и IP-адреса eth0, я не могу получить ответ ICMP на eth0 или lo interface (В Wireshark я заметил только ICMP-запрос, отправленный по eth0, но не ответил ICMP на любой интерфейс.) Я думаю, что сообщение запроса ICMP составлено правильно (иначе удаленное назначение не ответит). Но я не знаю, почему ОС просто не отвечает на запрос. Любая помощь или намеки приветствуются.отправить и принять ICMP с datalink raw socket через локальный интерфейс
ответ
RFC 792 определены специальные условия для сообщений ICMP:
Сообщения об ошибках Нет ICMP посылаются в ответ на сообщения об ошибках ICMP, чтобы избежать бесконечного повторения.
Для фрагментированных IP-дейтаграмм сообщения ICMP отправляются только для ошибок на фрагментированном нуле (первый фрагмент).
Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, предназначенную для широковещательного или многоадресного адреса.
Сообщения об ошибках ICMP никогда не отправляются в ответ на дейтаграмму, отправленную как широковещательный канал связи.
сообщения об ошибках ICMP никогда не посылаются в ответ на дейтаграмму, чей адрес источника не представляет собой уникальный хост (адрес источника не может быть ноль, циклический адрес, широковещательный адрес или групповой адрес).
Сообщения об ошибках ICMP никогда не отправляются в ответ на сообщение IGMP любого типа. Когда принимается сообщение ICMP неизвестного типа, оно должно быть отброшено без предупреждения .
маршрутизаторы почти всегда генерируют сообщения ICMP, но когда дело доходит до узла назначения, количество сообщений ICMP генерируется, зависит от реализации.
Если вы не получили ответа, запрос эха либо неверен, либо что-то блокирует ответ в другом месте. – nos
Я думал об этой возможности, но когда одна и та же программа используется для отправки ICMP-запроса на удаленный компьютер, я могу видеть форму ответа на удаленном компьютере. Ответ отсутствует, только когда программа используется для отправки запроса в локальный интерфейс. – user2975098