【发布时间】:2016-10-28 14:37:35
【问题描述】:
我正在尝试编写一个代码,该代码将向站点发送 HTTP 获取请求,并将使用 scapy 将内容保存在 HTML 文件中。
如果是我的代码:
r = Ether() / IP(dst=cache_ip) / TCP() / "GET /index.html HTTP/1.0 \n\n"
b = str(r)
http.write(b)
print "html page is ready, check your html files folder to check"
http.close()
并且 cache_ip 是 Google 的 IP,而不是输出应该是保存在我计算机上的 HTML 文件中的 Google 的 HTML 页面... Instad 我明白了:
ÿÿÿÿÿÿ<¨*â-LEC@ Þ QÚûPP PÛGET /index.html HTTP/1.0
现在我知道对于请求之类的工作有更好的模数,但我的任务是仅在 scapy 中完成。如果有人能指出问题并为使用 scapy 编写的工作提供更好的代码,那就太好了
编辑 - 我曾尝试使用 tcp 握手,但现在我试图将内容写入我的 html 文件,但由于某种原因我无法做到 -
http = open(os.path.dirname(
os.path.abspath(inspect.getfile(inspect.currentframe()))) + "/html_saved_pages/" + url + ".html", "w")
update_history(url)
syn = IP(dst=cache_ip) / TCP(dport=80, flags='S')
syn_ack = sr1(syn)
syn_ack
getStr = 'GET / HTTP/1.1\r\nHost:'+cache_ip+'\r\n\r\n'
request = IP(dst=cache_ip) / TCP(dport=80, sport=syn_ack[TCP].dport,
seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='A') / getStr
reply = sr(request)
http.write(reply)
print "html page is ready, check your html files folder to check"
http.close()
【问题讨论】:
-
压缩了?检查内容类型标头。
-
嗯,我不知道如何提取内容,也没有找到任何解决方案来解释我为什么来到这里
-
@Thebaron:考虑一下 Scapy 中 sr() 的返回类型是什么。我可以告诉你它不是什么——它不是你可以简单地输出到文件的字符串格式的 HTML。此外,您还必须确保 Google 生成的 HTML 不会分布在多个数据包中。使用wireshark确认。如果您发现 HTML 页面分布在多个数据包中,也许会问一个关于如何将它们组合在一起的新问题?
标签: python ubuntu httprequest http-get scapy