Estoy tratando de entender las técnicas de detección remota del sistema operativo utilizando Scapy. Encontré el siguiente artículo artículo de SANS sobre la detección del sistema operativo remoto utilizando Scapy y tengo estado tratando de seguirlo.
La técnica, según entiendo de lo que antecede, es que si después del primer protocolo de enlace TCP 3 inicial exitoso, si un paquete de datos se envía con indicadores NO establecidos en ACK , entonces todos los sistemas operativos , excepto Linux, debe responder con un paquete RST . Linux no cumple con este requisito de RFC y, por lo tanto, responde con un paquete ACK .
Esta es una forma en que podemos decir si la máquina remota es Linux o cualquier otra. También puede haber otras formas de resolver esto, pero me gustaría entender esta técnica y lo que supuestamente está mal con mi script de scapy a continuación.
from scapy.all import *
seq = 12345
sport = 1040
dport = 80
ip_packet = IP(dst='192.168.56.107')
syn_packet = TCP(sport=sport, dport=dport, flags='S', seq=seq)
packet = ip_packet/syn_packet
synack_response = sr1(packet)
next_seq = seq + 1
my_ack = synack_response.seq + 1
ack_packet = TCP(sport=sport, dport=dport, flags='A', seq=next_seq, ack=my_ack)
send(ip_packet/ack_packet)
payload_packet = TCP(sport=sport, dport=dport, flags='', seq=next_seq)
payload = "this is a test"
send(ip_packet/payload_packet/payload)
En el script anterior, la máquina 192.168.56.107 es una máquina Linux que ejecuta Inetsim y que simula perfectamente HTTP entre otros servicios. La forma en que estoy seguro de que funciona bien es porque puedo hacer con éxito lo siguiente:
nc 192.168.56.107 80
y luego envíe algunos datos aleatorios, diga la cadena "abcd". Y luego, cuando lo analizo con wireshark, muestra claramente que después del protocolo de enlace TCP 3, en respuesta al paquete de datos "abcd", se envía un paquete ACK.
Aunque si hago lo mismo con mi secuencia de comandos anterior y lo analizo con Wireshark, el protocolo de enlace TCP 3 ocurre con éxito, pero publica que el servidor no responde con un paquete ACK (aunque debería ser un sistema Linux). , que como se indicó anteriormente no sigue el RFC).
Lo que es más extraño es que el servidor ni siquiera responde con un paquete RST tampoco.
El sistema Linux es un sistema Ubuntu, si eso marca alguna diferencia.
Por favor, ayúdame a entender lo que posiblemente estoy haciendo mal aquí.