【发布时间】:2011-05-27 16:01:50
【问题描述】:
所以我有创建 Linux TAP 接口的 Python 代码,但它总是提供一个随机的、自动生成的 MAC 地址。为了简化测试,我想在接口初始化后手动为其分配一个 MAC 地址。我知道我可以使用SIOCSIFHWADDR ioctl 和struct ifreq 做到这一点,但我对实现有一些疑问。
这是 C 结构体:
struct ifreq
{
# define IFHWADDRLEN 6
# define IFNAMSIZ IF_NAMESIZE
union
{
char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */
} ifr_ifrn;
union
{
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short int ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
__caddr_t ifru_data;
} ifr_ifru;
};
现在我想我只需要填写hwaddr字段,但这是一个联合我不知道如何在Python中创建结构。
用struct ifreq 调用SIOCSIFHWADDR ioctl 以在Python 中更改接口的MAC 地址的最佳方法是什么?
谢谢!
【问题讨论】:
-
你想用 Python 还是 C 来做?
-
在 Python 中,我的主要问题是构建传递给 ioctl 的结构。