在 Linux 上使用 iproute2,gre/gretap 接口设置ip link add
为 GRE 需要remote
和可选local
的属性指定端点。但是,我找不到任何方法来读回这些属性。ip link show
没有显示它们,并且它们似乎没有在 C 函数返回的数据结构中的任何地方表示getifaddrs
(例如,如果我想实现自己的工具来获取它们)。我正在使用有大量此类接口的环境,并且我需要能够找到与特定远程地址关联的接口。有没有办法做到这一点而不将映射存储在带外的某个地方?
要从界面获取所有信息,您可以使用
ip
's-details
选项:如果你想在脚本中使用它,你真的应该使用
-json
这个jq
工具。非常基本的例子(没有任何检查):如果您想使用可用的系统调用和函数直接在您的工具中实现这一点,您应该先看看那里:
rtnetlink (7)
- Linux IPv4 路由套接字(不仅仅是 IPv4)对于接口,它可能是 RTM_GETLINK
rtnetlink (3)
- 操作 rtnetlink 消息的宏您可以
strace
在ip
命令上运行以查看正在使用的系统调用和结构的种类。周围找到的一些文档:
网络:generic_netlink_howto
在此基础上构建了更高级别的库,例如libnl。