如何在Python中通过套接字发送返回地址
我来这里是想请教一下关于远程缓冲区溢出的小技巧。我现在正在解决一个战争游戏,这是我第一次尝试一些新的编码方式。
目前我想写一个这样的代码:
假设我有一个地址变量,它的范围是0xbfffff00到0xbfffffff。我想通过暴力破解这个返回地址,然后通过一些套接字编程发送出去。问题是,我用来学习的操作系统是小端格式,所以我想把我的返回地址反向发送(按字节)。
举个例子) addr = 0xb1234567 #我想发送的是674523b1。
我搜索了一下,发现像print ('something'[::-1]).encode("hex")这样的函数可以做到,但这似乎只适用于字符串,而不是直接对数字。请问在Python中有没有办法把地址反向发送呢?
谢谢。
1 个回答
1
struct.pack
是一个可以把数字转换成一串字节的工具,这样就可以通过网络发送这些数据了。这串字节的排列方式会根据 格式字符串 来决定,是小端格式还是大端格式:
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'