2016-07-14 4 views
1

Недавно я начал использовать библиотеку scapy для Python 2.x Я нашел там минимальную документацию по функции sniff(). Я начал обходиться с ним и обнаружил, что могу использовать TCP-пакеты на очень низком уровне. До сих пор я только нашел информационные данные. Например:Как я могу извлечь HTML-код с помощью Scapy?

Вот что я положил в scapy терминале:

A = sniff(filter="tcp and host 216.58.193.78", count=2) 

Это запрос на google.com просить странице:

<Ether dst=e8:de:27:55:17:f3 src=00:24:1d:20:a6:1b type=0x800 |<IP version=4L ihl=5L tos=0x0 len=60 id=46627 flags=DF frag=0L ttl=64 proto=tcp chksum=0x2a65 src=192.168.0.2 dst=216.58.193.78 options=[] |<TCP sport=54036 dport=www seq=2948286264 ack=0 dataofs=10L reserved=0L flags=S window=29200 chksum=0x5a62 urgptr=0 options=[('MSS', 1460), ('SAckOK', ''), ('Timestamp', (389403, 0)), ('NOP', None), ('WScale', 7)] |>>> 

Вот ответ:

<Ether dst=00:24:1d:20:a6:1b src=e8:de:27:55:17:f3 type=0x800 |<IP version=4L ihl=5L tos=0x0 len=60 id=42380 flags= frag=0L ttl=55 proto=tcp chksum=0x83fc src=216.58.193.78 dst=192.168.0.2 options=[] |<TCP sport=www dport=54036 seq=3087468609 ack=2948286265 dataofs=10L reserved=0L flags=SA window=42540 chksum=0xecaf urgptr=0 options=[('MSS', 1430), ('SAckOK', ''), ('Timestamp', (2823173876, 389403)), ('NOP', None), ('WScale', 7)] |>>> 

С помощью этой функции есть способ, которым я могу извлечь код HTML из ответа?

Кроме того, как выглядят эти пакеты?

И наконец, почему оба этих пакета почти идентичны?

+0

count = 2 убивает его, мне еще предстоит увидеть фрагмент HTML, который был передан только в двух пакетах TCP. – grochmal

+0

Я понял это вскоре после публикации. Я изменил его без ограничений и нашел много шестнадцатеричного кода. Могу ли я предположить, что это чистый html? Если нет, то что это? –

+0

@EliasBothell вы пытались использовать [scapy-http] (https://github.com/invernizzi/scapy-http)? Его можно использовать для анализа http в scapy. – Noob123

ответ

1

Сегменты в вашем примере «почти идентичны», поскольку они являются сегментами TCP SYN и SYN-ACK, которые являются частью TCP handshake, HTTP-запрос и ответ появляются после этого во время соединения (обычно, когда в состоянии ESTABLISHED, за исключением случаев, когда TCP Fast Open используется опция), так что вы должны смотреть на сегменты после рукопожатия, чтобы получить данные, которые вы заинтересованы.

  SYN 
C ---------------> S 
     SYN-ACK 
C <--------------- S 
     ACK 
C ---------------> S 
    HTTP request 
C ---------------> S 
     ACK 
C <--------------- S 
    HTTP response 
C <--------------- S <= Here is the server's answer 
     ACK 
C ---------------> S 
... 

вы можете использовать Raw слой Scapy для извлечения данных выше TCP в вашем случае (например pkt[Raw])

0

Вы пробовали и sing scapy-http? Это отличное скопированное расширение, которое помогает в этом точном выпуске

Смежные вопросы