的意义结构包()Beagleboard IP assignmen的代码中的参数

2024-04-25 13:11:29 发布

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

我正在编写一个程序,在python中使用ioctl为beaglebone black分配IP地址。在

(参考How to assign IP address to interface in python?Getting IP address of the beagleboard using python

因为在Linux内核中实现的IOCTL方法需要将所有参数传递到特定的结构中。因此,我将所有这些参数构造为一个结构,然后传递给IOCTL。在

bin_ip = socket.inet_aton('192.168.0.1')
ifreq = struct.pack('16sH2s4s8s', 'eth0', socket.AF_INET, '\x00'*2, bin_ip, '\x00'*8)

https://docs.python.org/3.0/library/struct.html处发现第一个参数的部分含义为s= char[] and H = unsigned shortsH写的数字16 2 4 8的意思是什么

编辑:对于's'格式字符,计数被解释为字节的长度,例如,16s表示单个16-byte string,后跟1 unsigned short2-byte string4-byte string8-byte string

为什么第四个参数是'\x00\x00',最后一个参数是'\x00\x00\x00\x00\x00\x00\x00\x00'?这是标准格式/预期格式吗?在


Tags: toip参数stringbinaddress格式socket
1条回答
网友
1楼 · 发布于 2024-04-25 13:11:29

这里打包的结构似乎是ifreq,其中设置了字段“ifr_name”和“ifr_addr”eth0'为“ifr_name”设置,其余为“ifr_addr”。在

如果addr是一个sockaddr,在本例中我假设实际上是一个sockaddr_in。基于this page的字段有:

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

在你的代码里插座设定仙奴家族。然后第四个参数2个0是端口,很可能在这里设置了IP地址,因此它不是特定于端口的。然后是ip地址,最后是8个零。在

相关问题 更多 >