【问题标题】:Appending data to a scapy packet将数据附加到 scapy 数据包
【发布时间】:2016-02-16 19:00:22
【问题描述】:

我知道我可以将 Raw 数据附加到这样的 scapy 数据包中

>>> p=Ether()/Raw("somedata")
>>> hexdump(p)
WARNING: Mac address to reach destination not found. Using broadcast.
0000   FF FF FF FF FF FF 00 00  00 00 00 00 90 00 73 6F   ..............so
0010   6D 65 64 61 74 61                                  medata
>>> 

这里的数据是以 ASCII 格式附加的。

但是我怎样才能在这样的数据包中只附加数字呢?

# Not real
>>> p = Ether()/RawNumbers(0x1234567891)
>>> hexdump(p)
WARNING: Mac address to reach destination not found. Using broadcast.
0000   FF FF FF FF FF FF 00 00  00 00 00 00 90 00 12 34   ................
0010   56 78 91                                           ...
>>> 

也许我可以编写一个 Packet 子类来执行此操作,但我不确定如何实现它。有什么想法吗?

【问题讨论】:

    标签: python packet scapy


    【解决方案1】:

    不需要RawNumbers 层,因为您可以使用 python 内置功能来实现这一点。请注意,如果您的层只是一个字符串,scapy 默认会假定一个原始层。

    >>> hexdump(Ether()/"\x12\x34\x56\x78\x91")
    WARNING: Mac address to reach destination not found. Using broadcast.
    0000   FF FF FF FF FF FF 00 00  00 00 00 00 90 00 12 34   ...............4
    0010   56 78 91                                           Vx.
    

    或者(更方便)

    >>> hexdump(Ether()/"1234567891".decode("hex"))
    WARNING: Mac address to reach destination not found. Using broadcast.
    0000   FF FF FF FF FF FF 00 00  00 00 00 00 90 00 12 34   ...............4
    0010   56 78 91                                           Vx.
    

    【讨论】:

    • 啊,是的,我没想到。谢谢。
    • 还有一个问题:如果我想对一个数字或树数字(如 255)进行编码怎么办?这似乎不起作用,我得到TypeError: Odd-length-string。喜欢Ether()/"255".decode("hex")。我希望这会产生一个FF 字节?
    • 通常你必须使用struct.pack,就像struct.pack("B",255)\xff。这会将整数 255 打包成一个 Byte。查看 struct 的帮助。
    猜你喜欢
    • 2011-11-26
    • 2022-01-21
    • 2011-02-15
    • 2019-07-26
    • 2021-10-08
    • 1970-01-01
    • 2022-07-08
    • 2013-12-09
    • 2018-10-13
    相关资源
    最近更新 更多