Deshabilite el procesamiento de paquetes TCP mediante el kernel de Linux en un puerto específico

Deshabilite el procesamiento de paquetes TCP mediante el kernel de Linux en un puerto específico

Estoy trabajando en una pila TCP/IP, que actualmente se ejecuta desde el espacio de usuario de Linux utilizando sockets sin formato.

Para probar esto, necesito deshabilitar el código TCP del kernel de Linux para un puerto específico, de modo que el kernel no arruine mi implementación (por ejemplo, el kernel responde al protocolo de enlace).

he hecho referenciaeste, que dice que los sockets sin formato omiten netfilter, pero durante mis pruebas, el socket sin formato no recibe el paquete.

Después de más investigaciones descubrí quemi socket AF_INET todavía está en la pila TCP/IP, sin embargo, no quiero implementar tramas Ethernet.

¿Existe alguna forma de deshabilitar el procesamiento del kernel en un puerto específico sin usar AF_PACKET?

EDITAR:

Estoy creando mi socket así: socket(AF_INET, SOCK_RAW, IPPROTO_TCP). Luego configuro HDRINCL:setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on))

Respuesta1

Puede utilizar la tabla RAW en IPTables para hacer esto. Utilice una regla como:

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

Esto debería hacer que el kernel ignore su paquete y no responda al protocolo de enlace.

información relacionada