
Estou trabalhando em uma pilha TCP/IP, que atualmente é executada no espaço do usuário Linux usando soquetes brutos.
Para testar isso, preciso desabilitar o código TCP do kernel do Linux para uma porta específica, para que o kernel não estrague minha implementação (por exemplo, o kernel respondendo ao handshake).
eu tenho referenciadoesse, que diz que os soquetes brutos ignoram o netfilter, mas durante meus testes, o pacote não é recebido pelo soquete bruto.
Depois de mais pesquisas descobri quemeu soquete AF_INET ainda está na pilha TCP/IP, porém não quero implementar frames Ethernet.
Existe alguma maneira de desabilitar o processamento do kernel em uma porta específica sem usar AF_PACKET?
EDITAR:
Estou criando meu soquete assim: socket(AF_INET, SOCK_RAW, IPPROTO_TCP)
. Em seguida, configurei HDRINCL:setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))
Responder1
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 não responda ao handshake.