如何向后发送返回地址(通过套接字) - python

时间:2014-07-27 20:45:22

标签: python sockets remote-access buffer-overflow endianness

我在这里要求提供远程缓冲区溢出提示。我目前正在解决战争游戏,这是我第一次尝试这些新类型的编码。

目前我正在尝试制作这样的代码:

假装我有一个地址变量,其范围为0xbfffff00和0xbfffffff。我想暴力破解这个返回地址,我将通过一些套接字编程来解决socket.send。问题是,我用来学习的os是little-endian格式,所以我想向后发送我的返回地址(按字节)。

示例)addr = 0xb1234567  #我想发送674523b1。

我已经搜索过这样的功能,我发现打印('某些' [:: - 1])。encode(" hex")可以完成工作,但这似乎适用于字符串,而不是数字本身。有没有办法在python中向后发送地址?

感谢。

1 个答案:

答案 0 :(得分:1)

struct.pack会将数值转换为适合通过网络发送的字节序列。根据{{​​3}}:

,字节序列将是little-endian或big-endian
In [7]: addr=0x30313233

In [8]: struct.pack("@I", addr) # native
Out[8]: '3210'

In [9]: struct.pack("<I", addr) # little-endian
Out[9]: '3210'

In [10]: struct.pack(">I", addr) # big-endian
Out[10]: '0123'

但请注意,在网络编程的正常过程中,您永远不会使用上述格式。相反,您将始终发送“网络字节顺序”:

In [11]: struct.pack("!I", addr) # network byte order
Out[11]: '0123'