使用scapy

时间:2016-06-21 11:46:44

标签: python http tcp get scapy

我使用以下代码发送HTTP GET请求:

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)

我还在等待收到来自谷歌的回复包

1 个答案:

答案 0 :(得分:0)

这可能与您没有遵循正确的TCP协议这一事实有关。读取代码看起来你忘记了3次握手中的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)

我没有对此进行测试,因此它可能会或可能不会起作用,但如果没有最后的确认,它肯定无法正常工作。