Desativa o processamento de pacotes TCP pelo Kernel Linux em uma porta específica

2

Estou trabalhando em uma pilha TCP / IP, que atualmente é executada a partir do espaço do usuário do Linux usando sockets raw.

Para testar isso, eu preciso desabilitar o código TCP do Kernel Linux para uma porta específica, para que o kernel não estrague a minha implementação (por exemplo, kernel respondendo ao handshake).

Eu referenciei este , que diz que os sockets raw ignoram o netfilter, mas durante o meu teste, o pacote não é recebido pelo socket bruto.

Depois de mais pesquisas, descobri que meu soquete AF_INET ainda está na pilha TCP / IP , no entanto, não quero implementar quadros Ethernet.

Existe alguma maneira de desativar o processamento do kernel em uma porta específica sem usar AF_PACKET?

EDITAR:

Estou criando meu soquete da seguinte forma: socket(AF_INET, SOCK_RAW, IPPROTO_TCP) . Em seguida, defino o HDRINCL: setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

    
por Benjamin Cheng 02.10.2016 / 21:43

1 resposta

2

Você pode usar a tabela RAW no IPTables para fazer isso. Use uma regra como:

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

Isso deve fazer com que o kernel ignore seu pacote e ele não responderá ao aperto de mão.

    
por 02.10.2016 / 22:32