Linux
回讀 Linux gre噸__噸一種ptap本地/遠端地址
在 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
rtnetlink (3)
- 操作 rtnetlink 消息的宏您可以
strace
在ip
命令上執行以查看正在使用的系統呼叫和結構的種類。周圍找到的一些文件:
在此基礎上建構了更高級別的庫,例如libnl。