获取和设置接口地址

Posted

技术标签:

【中文标题】获取和设置接口地址【英文标题】:Getting and setting interface addresses 【发布时间】:2014-10-13 08:05:27 【问题描述】:

有没有办法以家庭无关的方式在接口上获取和设置 IP 地址?

我发现了有关 getifaddrs 的信息。有没有类似的东西但用于设置地址,或者我需要使用ioclt?

这是我的情况:我需要扩展 IPv4 应用程序管理接口以支持 IPv6 地址。此应用程序将 ioctl 用于 AF_INET。我的问题是,对我来说,为支持 IPv6 的接口添加/删除/状态的最佳方法是什么 - 添加 IPv6 的另一个 ioctl 层,或者将 IPv6 的 netlink 与 IPv4 的 ioctl 混合?

谢谢!

【问题讨论】:

【参考方案1】:

无论如何我都会切换到netlink。原因:

    netlink 允许在同一接口上管理多个 IP 地址,无需所谓的“别名”等。 ioctl 接口已经过时多年了 使用 netlink 进行异步状态监控非常简单:应该订阅NETLINK_ROUTE 套接字上的所需组,然后只需订阅poll() + recv()

ifaddrmsg 结构与家族无关,必须在消息中指定 AF_INETAF_INET6 作为家族,+ IFA_ADDRESS 和其他 NLA 大小取决于家族。但它可以在应用程序级别轻松管理。

对于 C,有一个 libnl 库,对于 Python — pyroute2。

【讨论】:

以上是关于获取和设置接口地址的主要内容,如果未能解决你的问题,请参考以下文章

ifreqifconf

使用 SIOCSIFADDR ioctl 设置 IP 地址

Postman接口自动化之鉴权设置

小程序获取地址授权的修改 wx.openSetting需点击

linux系统下,如何永久设置网络接口的ip地址

如何在python中为接口分配IP地址?