Отключить обработку TCP-пакетов ядром Linux на определенном порту

Отключить обработку TCP-пакетов ядром Linux на определенном порту

Я работаю над стеком TCP/IP, который в настоящее время работает из пользовательского пространства Linux с использованием сырых сокетов.

Чтобы проверить это, мне нужно отключить TCP-код ядра Linux для определенного порта, чтобы ядро ​​не вмешивалось в мою реализацию (например, чтобы ядро ​​не реагировало на рукопожатие).

Я ссылалсяэтот, который говорит, что сырые сокеты обходят netfilter, но во время моего тестирования пакет не был получен сырым сокетом.

После дополнительных исследований я обнаружил, чтомой сокет AF_INET все еще находится в стеке TCP/IP, однако я не хочу реализовывать Ethernet-фреймы.

Можно ли как-то отключить обработку ядра на определенном порту без использования AF_PACKET?

РЕДАКТИРОВАТЬ:

Я создаю свой сокет следующим образом: socket(AF_INET, SOCK_RAW, IPPROTO_TCP)Затем я устанавливаю HDRINCL:setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

решение1

Для этого можно использовать таблицу RAW в IPTables. Используйте правило типа:

iptables -t raw -A PREROUTING -p tcp --dport <your port> -j DROP

Это должно привести к тому, что ядро ​​проигнорирует ваш пакет и не будет отвечать на рукопожатие.

Связанный контент