获取HTTP响应状态代码

时间:2016-05-25 21:11:55

标签: python http http-status-codes scapy

我正在使用python和scapy将HTTP请求发送到特定的URL地址。发送后,我想阅读响应状态代码(200,401,404等)。

我使用了这种方法:

>>> 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)

出于某种原因,我无法在“回复”中看到它。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

通过使用sr1(),您只能接收从服务器响应的第一个数据包,在某些情况下会收到“空”ACK以确认您发送的数据,因此您无法找到HTTP响应和响应代码。我的建议是使用sr()而不是sr1(),如下所示:

reply = sr(request, multi=1, timeout=2)

这将收到包括HTTP响应在内的所有数据包在2秒内到达,但您需要迭代回复数据包以查找包含HTTP响应代码的数据包。

答案 1 :(得分:0)

您的操作系统可能会自动发送RST数据包以响应收到的SYN + ACK。通过使用wireshark之​​类的嗅探工具,您可以看到。

可以通过添加iptables规则来解决问题,以抑制传出RST

sudo iptables -A OUTPUT -p tcp --dport 80 --tcp-flags RST RST -j DROP

稍后将其删除

sudo iptables -A OUTPUT -p tcp --dport 80 --tcp-flags RST RST -j DROP