在python中使用struct.pack创建数据包

2024-04-29 13:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python创建一个包。数据包有4个字段,每个字段32位。我有样本代码:

import socket, sys, os, struct
field1 = 1
field2 = '255.255.255.0'
field3 = 20
field4 = '192.168.0.1'

struct.pack=('!L4sL4s',field1,field2,field3)

但我没有输出。如何格式化此数据包,以便每个变量都有4个字节。


Tags: 代码import字节ossyssocket数据包struct
3条回答
>>> struct.pack('!L4sL4s', field1, socket.inet_aton(field2),
                           field3, socket.inet_aton(field4))
'\x00\x00\x00\x01\xff\xff\xff\x00\x00\x00\x00\x14\xc0\xa8\x00\x01'

调用pack的结果返回给您,您可以将其分配给变量。你的台词应该是这样的:

my_packet = struct.pack('!L4sL4s',field1,field2,field3)

请注意,这一行需要一个无符号的长int,然后是长度为4的字符串,然后是长int,最后是长度为4的字符串。field2field4都比这个长。例如,尝试使用len(field2)查看它的长度!

您正在将元组('!L4sL4s',field1,field2,field3)分配给struct.pack。您需要像这样调用struct.packstruct.pack('!L4sL4s',field1,field2,field3,field4)(no=sign)。

相关问题 更多 >