对使用scapy的http包没有响应

2024-04-20 12:08:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下代码来发送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)

我还在等待谷歌的回复


Tags: ipcomhttpgetrequestwwwgoogletcp
1条回答
网友
1楼 · 发布于 2024-04-20 12:08:39

这可能与您没有遵循正确的TCP协议有关。读你的代码,你好像忘记了三次握手的确认(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)

我没有测试过这个,所以它可能工作,也可能不工作,但它肯定不会没有最后一个确认。在

相关问题 更多 >