2016-06-21 89 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。