使用 Python 脚本提取数据包内容

Extracting a packet content using a Python script

我正在尝试制作一个代码,该代码将向网站发送 HTTP get 请求,并使用 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,输出应该是Google的HTML页面保存在我电脑的HTML文件中。 .. 我明白了:

ÿÿÿÿÿÿ<¨*â-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()

在您给定的代码中,不清楚 http 是什么,因此,无法确切知道 http.write()http.close() 会做什么。

但无论如何,如果您的目标是使用 ONLY scapy 从网络检索 HTML,则必须从 TCP 3 次握手开始,然后通过 HTTP GET 请求: