Linux

回讀 Linux gre噸__噸一種ptap本地/遠端地址

  • November 28, 2020

在 Linux 上使用 iproute2,gre/gretap 介面設置ip link add為 GRE 需要remote和可選local的屬性指定端點。但是,我找不到任何方法來讀回這些屬性。ip link show沒有顯示它們,並且它們似乎沒有在 C 函式返回的資料結構中的任何地方表示getifaddrs(例如,如果我想實現自己的工具來獲取它們)。我正在使用有大量此類介面的環境,並且我需要能夠找到與特定遠端地址關聯的介面。有沒有辦法做到這一點而不將映射儲存在帶外的某個地方?

要從界面獲取所有資訊,您可以使用ip’s-details選項:

-d,-details

    輸出更詳細的資訊。

# 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: <BROADCAST,MULTICAST> 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工具。非常基本的例子(沒有任何檢查):

# 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

您可以straceip命令上執行以查看正在使用的系統呼叫和結構的種類。

周圍找到的一些文件:

網路:generic_netlink_howto

在此基礎上建構了更高級別的庫,例如libnl

引用自:https://serverfault.com/questions/1043957