2016-06-21 55 views
0

我已經使用下面的代碼,以便發送一個HTTP GET請求的HTTP數據包沒有響應:使用Scapy的

syn = IP(dst='www.google.com')/TCP(dport=80, flags='S') 
syn_ack = sr1(syn) 
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) 

和我仍然在等待從谷歌

接收的響應分組
+0

我覺得這篇文章可能會對你有所幫助。 [鏈接](http://stackoverflow.com/questions/37683026/how-to-create-http-get-request-scapy) – Noob123

回答

0

它可能與你沒有遵循正確的TCP協議有關。讀你的代碼看起來你忘記了三次握手中的ACK(SYN-SYN_ACK-ACK)。所以你發送它的數據,但它會忽略它,因爲你還沒有完成設置連接。嘗試做下面的事情。

syn = IP(dst='www.google.com')/TCP(dport=80, flags='S') 
syn_ack = sr1(syn) 
ack = TCP(sport=syn.sport, dport=80, flags='A', seq=syn_ack.ack, ack=syn_ack.seq + 1) 
ack_resp = sr1(ip/ack) 

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

我沒有測試過,所以它可能會或可能不會工作,但它絕對不會工作沒有最後的ACK。