2016-07-14 44 views
1

我最近開始使用Python 2.x的scapy庫,我發現那裏的sniff()函數的最小文檔。我開始玩弄它,發現我可以在很低的水平上檢查TCP數據包。到目前爲止,我只找到了信息數據。例如:如何使用Scapy提取HTML代碼?

以下是我放在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殺死它,我還沒有看到一段只在兩個TCP數據包中傳輸的HTML。 – grochmal

+0

我在發佈後不久就意識到這一點。我將其改爲無限制,並找到很多十六進制代碼。我可以認爲這是純HTML嗎?如果不是,那是什麼? –

+0

@EliasBothell你試過用[scapy-http](https://github.com/invernizzi/scapy-http)嗎?它可以用來解析scapy中的http。 – Noob123

回答

1

由於它們是TCP handshake中的TCP SYN和SYN-ACK段,因此在連接期間發出HTTP請求和響應(通常在ESTABLISHED狀態時除外)時,示例中的段「幾乎相同」 TCP快速打開選項時使用),所以你需要看段握手之後,讓你感興趣的數據。

  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 
... 

您可以使用Scapy的的Raw層在你的情況,提取上述TCP數據(例如pkt[Raw]

0

你有沒有試過你唱歌scapy-http?這是一個偉大的scapy擴展,可以幫助解決這個問題