1

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

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

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

谢谢!

4

1 回答 1

0

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

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

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

对于 C,有一个libnl库,对于 Python - pyroute2

于 2015-04-16T09:43:26.867 回答