Python Scapy http嗅探器澄清
我试图理解如何用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):
#!/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”
。