python pack发送一段数据的问题

soapmaoooo 发布于 2014/01/26 09:38
阅读 361
收藏 0
想将一段特殊的包含重复16遍MAC地址的数据包广播发送,以下是我的目标数据内容
假设MAC地址为:00 8C 4D 5C 6F 3A,MAC真实地址就是字面地址,翻译成二进制,那么数据包内容应该为:
00000000 10001100 01001101 01011100 01101111 00111010,然后这个数据重复16次。
我将这段数据存储在一个mac_list列表中。
为了发送这个数据,我的方法如下
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.sendto(mac_list, ('255, 255, 255, 0', 0))

因为python只有字符串和整数类型,如果直接mac_list,我猜是无效的(因为暂时没机器给我做测试)
所以我将里面的每个元素转换成了10进制的整数。然后用struct.pack的方法打包。就导致下面几个问题,始终无法排除
1.存储这段数据的是一个列表,但pack好像无法打包列表类型,这个我也不确定是不是我语法错了,还是说有另外的方法,我的方法如下,mac_list为存储这段数据的列表
s = struct.pack('>96i',*mac_list)
错误1,无法打包列表
手动debug填入数据,比如struct.pack('>2i',255,255)
错误2,列表里面已经将每位转换为整数,但整数在python中占2位,而且上面这个结果看不懂。结果为
000000ff000000ff。
而我的目标数据要么是FFFF,要么是111111111111111
不知道上面步骤是我想错了呢,还是哪里方法不对。虽说这里面肯定有错,但我不知道错在哪。。请教各位大神了
加载中
0
J
JianNL2
我感觉i在python中是4 字节吧
0
vinge_ven
vinge_ven
类似的数据结构我处理过,既然是MAC地址,我觉着把每个MAC处理成6字节的LIST,再做成一个大的LIST就好了。二进制的数据应该非常好pack的。
返回顶部
顶部