首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取Linux gre[tap]本地/远程地址

读取Linux gre[tap]本地/远程地址
EN

Server Fault用户
提问于 2020-11-26 02:54:11
回答 1查看 1.2K关注 0票数 3

在Linux上的iproute2中,gre/gretap接口是用ip link add设置的,对于D0,GRE需要remote,还可以选择指定端点的local属性。但是,我找不到任何方法来读取这些属性。ip link show没有显示它们,而且在C函数getifaddrs返回的数据结构中似乎没有表示它们(例如,如果我想实现自己的工具来获取它们)。我正在处理的环境中有大量这样的接口,我需要能够找到与特定远程地址相关联的接口。有没有办法不把映射存储在带外的某个地方?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2020-11-27 00:41:12

要从接口获取所有信息,可以使用ip's -details选项:

-d-details成品率输出更详细的信息。

代码语言:javascript
运行
复制
# ip link add name gretaptest type gretap remote 192.0.2.1 local 192.0.2.2
# ip -details link show dev gretaptest
49: gretaptest@NONE:  mtu 1462 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 5e:1d:10:f9:05:f9 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 0 
    gretap remote 192.0.2.1 local 192.0.2.2 ttl inherit erspan_ver 0 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 

如果您想在脚本中使用这一点,那么您确实应该在-json工具中使用jq。非常基本的示例(没有任何检查):

代码语言:javascript
运行
复制
# ip -json -details link show dev gretaptest | jq '.[].linkinfo.info_data | .remote, .local'
"192.0.2.1"
"192.0.2.2"

如果您想使用可用的系统调用和函数在工具中直接实现这一点,那么首先应该查看一下:

  • rtnetlink (7) - Linux IPv4路由套接字(不仅仅是IPv4),它很可能是RTM_GETLINK
  • rtnetlink (3) -宏来操作rtnetlink消息

您可以在strace命令上运行ip,只需查看所使用的系统调用和结构类型。

在以下方面发现了一些文件:

联网:通用_netlink_何图

在此基础上还构建了更高的库,如利卜勒

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1043957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档