Scapy 原始数据处理

问题描述 投票:0回答:1

我在处理原始数据时遇到困难。我正在尝试改变 resp_cookie 在我的 ISAKMP 标头中,当我对数据包进行嗅探时,它都是

Raw Load='\x00\x43\x01........... '
下的原始数据格式,大约有 3 行这样的。当我进行 Wireshark 捕获时,我看到了我想要更改的信息,但我似乎无法找到一种方法来转换和更改原始数据以查找和替换我正在查找的信息。另外,当我执行
hexdump()
时,我可以看到所需的信息,但我无法将其存储在变量中。当我输入
i = hexdump(pkt)
时,它会吐出十六进制转储,但不会将十六进制转储存储在
i
中。

networking python-2.7 packet-sniffers scapy
1个回答
0
投票

所以这篇文章有点旧,但我已经遇到过十几次了,试图找到我遇到的类似问题的答案。我怀疑 OP 是否还需要答案,但如果其他人想做类似的事情......给你!

我在谷歌的某个地方发现了以下代码片段,它适合我的情况。

Scapy的Hexdump()、show()等方法只是将数据包输出到终端/控制台;它们实际上并不返回字符串或任何其他类型的对象。因此,您需要一种方法来拦截其打算写入的数据并将其放入要操作的变量中。

注意:这是 PYTHON 3.X 和 SCAPY 3K

import io
import scapy

#generic scapy sniff
sniff(iface=interface,prn=parsePacket, filter=filter)

使用上述嗅探方法,您将需要执行以下操作。

def parsePacket(packet):

    outputPacket = '' 

    #setup
    qsave = sys.stdout
    q = io.StringIO() 

    #CAPTURES OUTPUT
    sys.stdout = q  

    #Text you're capturing
    packet.show()

    #restore original stdout
    sys.stdout = qsave

    #release output
    sout = q.getvalue()

    #Add to string (format if need be)
    outputPacket += sout + '\n'

    #Close IOStream
    q.close() 

    #return your packet
    return outputPacket

您返回的字符串(outputPacket)现在可以按照您想要的方式进行操作。

用您认为合适的任何函数替换 .show() 。

附注如果从 Pythonic 的角度来看这有点粗糙,请原谅我……无论如何都不是 Python 开发者。

© www.soinside.com 2019 - 2024. All rights reserved.