【问题标题】:Python Scapy http sniffer clarificationPython Scapy http 嗅探器说明
【发布时间】:2017-07-17 17:02:54
【问题描述】:

我试图了解如何在 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_print 函数到底做了什么没看懂

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

注意这是我得到这个代码的地方:HTTP GET packet sniffer in Scapy

【问题讨论】:

    标签: python http scapy sniffing sniffer


    【解决方案1】:

    sprintf 只是 Scapy 数据包上可用的一种有用方法,它允许您以您指定的格式构造一个字符串,并用您想要的数据包中的数据填充它。有关说明,请参阅here%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(<list>) 给你一个新字符串"a\nb\nc"
    猜你喜欢
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多