Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scapy http嗅探器澄清_Python_Http_Scapy_Sniffing_Sniffer - Fatal编程技术网

Python Scapy http嗅探器澄清

Python Scapy http嗅探器澄清,python,http,scapy,sniffing,sniffer,Python,Http,Scapy,Sniffing,Sniffer,我试图理解如何用python scapy制作http嗅探器 这是一个我正在努力理解的代码 #!/usr/bin/python from scapy.all import * def http_header(packet): http_packet=str(packet) if http_packet.find('GET'): return GET_print(packet) def GET_print(packet1):

我试图理解如何用python scapy制作http嗅探器 这是一个我正在努力理解的代码

#!/usr/bin/python
from scapy.all import *

def http_header(packet):
        http_packet=str(packet)
        if http_packet.find('GET'):
                return GET_print(packet)

def GET_print(packet1):
    ret = "***************************************GET PACKET****************************************************\n"
    ret += "\n".join(packet1.sprintf("{Raw:%Raw.load%}\n").split(r"\r\n"))
    ret += "*****************************************************************************************************\n"
    return ret

sniff(iface='eth0', prn=http_header, filter="tcp port 80")
但我不明白GET\u print函数到底做什么,实际上我知道
join()
split(r“\r\n”)
应该以简单的方式做什么,但我不知道
sprintf({Raw:%Raw.load%}\n”)
在这里做什么,当它把所有的东西都绑在一起时,我不明白

我只想简单地说明一下这一行
“\n”.join(packet1.sprintf(“{Raw:%Raw.load%}\n”).split(r”\r\n”)
必须做什么


注意我从这里得到了这段代码:

sprintf
是Scapy数据包上可用的一种有用的方法,它允许您以指定的格式构造字符串,并用所需数据包中的数据填充字符串。请参阅以获取解释
%Raw.load%
指定您希望数据包中包含原始有效负载——这里对应于HTTP请求字符串(“GET/HTTP/1.1…”)。

很好,现在更清楚了,但是如何
join()
split(r”\r\n)
用于收集以获得可读的输出?。HTTP响应具有不同的部分,按惯例用
\r\n
分隔。对
sprintf
生成的字符串调用
split('\r\n')
将创建一个字符串列表,每个部分有一个元素,然后调用
'\n'。join
通过将此列表中的元素与它们之间的
'\n'
(换行字符)连接来创建一个字符串。例如,如果您有一个字符串
s=“a\r\nb\r\nc”
s.split(r“\r\n”)
将为您提供一个列表
[“a”、“b”、“c”]
'\n'。join()
将为您提供一个新字符串
“a\nb\nc”