我使用以下代码发送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)
我还在等待收到来自谷歌的回复包
答案 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)
我没有对此进行测试,因此它可能会或可能不会起作用,但如果没有最后的确认,它肯定无法正常工作。