【问题标题】:cloning a tcp/ip packet with python使用 python 克隆 tcp/ip 数据包
【发布时间】:2017-09-30 09:01:26
【问题描述】:

我用wireshark 捕获了一些包,我想用我自己的软件重新发送它们,用python 编写。我正在使用套接字编程,但我是 python 新手,所以也许这是一个愚蠢的问题。

我的软件正在按应有的方式进行 3 次握手,并发送一个包含我的信息的数据包。但问题是,它发送的信息不正确。

这就是我的工作:

MESSAGE = 0x13EC
s.send(MESSAGE)

我希望数据包包含十六进制值 13EC,但它现在将其作为字符串发送,例如“0x13EC”。如果我这样说的话……

MESSAGE = '13EC'

...它只是发送零。

谁能告诉我我做错了什么?

提前致谢,

巴特尔

顺便说一句,我使用的是 python 3.6.2。

【问题讨论】:

    标签: python sockets ethernet tcp-ip


    【解决方案1】:

    在编写MESSAGE = 0x13EC 时,您实际上是在创建一个值为 5100 的整数。但套接字无法发送整数(据我所知)。

    您要做的是以\x13\xEC 的形式发送字节数据。
    为此,您只需执行以下操作:

    MESSAGE = b'\x13\xEC'
    s.send(MESSAGE)
    

    应该这样做。
    或者你可以使用struct来打包数据。

    from struct import pack
    VALUE = 0x13EC # 5100
    MESSAGE = pack('H', VALUE) # 5100 -> b'\x13\xEC'
    s.send(MESSAGE) # b'\x13\xEC'
    

    【讨论】:

    • 非常感谢,至少完成了大部分工作!但是我现在只有一个问题,如果我在其中放入大量数据,则这些位会发生移位或以任何其他方式与预期不同。您可以放入多少数据有限制吗?
    • @gamma_spec by it 你的意思是pack()?如果是这样,是的,例如,您需要组合多个pack('H', 5100) + pack('Q', 5)
    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2016-04-19
    • 2011-01-12
    • 2011-11-01
    相关资源
    最近更新 更多