Я пытаюсь написать сниффер C для Linux и понять действия, происходящие в ядре во время сниффинга.
У меня проблемы с поиском ответа на следующий вопрос: если я инициализирую мой сокет следующим образом:
sock_raw = socket(AF_PACKET , SOCK_RAW , htons(ETH_P_ALL));
Что происходит в ядре? Как я вижу все входящие и исходящие пакеты, но не «перехватываю» их? Потому что я понял, что когда ядро получает пакет, оно отправляет его соответствующей функции обработчика протокола. Поэтому я не могу понять - клонирует ли ядро пакет и отправляет его в дополнение к открытому сокету?