Pregunta

Soy un programador moderada, acaba de entrar en la programación de la red.

Como un intento de mejorar mi comprensión de las redes en general, estoy tratando de realizar varias acciones básicas HTTP desde el nivel de paquete. Mi pregunta es la siguiente: ¿Cómo puede utilizar una biblioteca como Scapy para construir una solicitud HTTP GET y artículos assosciated a nivel de paquete? Sé que esto puede sonar extraño, pero me parece que no puede encontrar ninguna información que detalla, y mis propios intentos con paros y etérea haber sido ... No es satisfactoria.

Gracias por cualquier ayuda ofrecida!

Trimiert

¿Fue útil?

Solución

Si usted quiere hacer un apretón de manos completa de tres vías, tendrá que hacerlo manualmente.

Comience con su paquete SYN:

>>> syn = IP(dst='www.google.com') / TCP(dport=80, flags='S')
>>> syn
<IP  frag=0 proto=tcp dst=Net('www.google.com') |<TCP  dport=www flags=S |>>

A continuación, recibir el paquete SYN-ACK desde el servidor, trabajos SR1. A continuación, envíe su solicitud GET HTTP:

>>> syn_ack = sr1(syn)
Begin emission:
Finished to send 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets

>>> syn_ack
<IP  version=4L ihl=5L tos=0x0 len=44 id=424 flags= frag=0L ttl=55 proto=tcp chksum=0x2caa src=74.125.226.148 dst=10.20.30.40 options=[] |<TCP  sport=www dport=ftp_data seq=3833491143 ack=1 dataofs=6L reserved=0L flags=SA window=5720 chksum=0xd8b6 urgptr=0 options=[('MSS', 1430)] |<Padding  load='\x00\x00' |>>>

A continuación, establezca la secuencia de TCP y números de ACK y enviar el GET:

getStr = 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n'
request = IP(dst='www.google.com') / TCP(dport=80, sport=syn_ack[TCP].dport,
             seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='A') / getStr
reply = sr1(request)

Otros consejos

¿Ha tenido un vistazo a el tutorial ? Sólo copiar y pegar, esto parece que va a montar una petición HTTP:

>>>  a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n"

FTR, como de Scapy 2.4.3, se llevó a cabo la disección de paquetes HTTP, entre un util llamado "TCP_client" para hacer el 3 apretón de manos de forma automática.

Si bien no es tan enseñanza como la respuesta anterior, no hace daño a echar un vistazo: https://scapy.readthedocs.io/en/latest/layers/http.html#use-scapy-to-send-receive -http-1-x

load_layer("http")
req = HTTP()/HTTPRequest(
    Accept_Encoding=b'gzip, deflate',
    Cache_Control=b'no-cache',
    Connection=b'keep-alive',
    Host=b'www.secdev.org',
    Pragma=b'no-cache'
)
a = TCP_client.tcplink(HTTP, "www.secdev.org", 80)
answser = a.sr1(req)
a.close()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top