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.
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))
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.
Tags networking linux tcp socket