如何从 /proc 获取接口的 IPV4 地址

raz*_*zeh 35 linux ip proc

是否有一种干净、简单的方法可以从 获取网络接口的 IP 地址/proc,类似于获取网络接口的 MAC 地址的方式?
理想情况下,我只输入 cat/proc/<foo>/{interface_name}并获取 IPv4 地址。

除了cat.

Rui*_*iro 42

在/proc目录下,您还可以在转发信息库表中找到 IPv4 地址,位于/proc/net/fib_trie

这张桌子很容易理解cat,首先是Main:,然后Local:

cat /proc/net/fib_trie
Run Code Online (Sandbox Code Playgroud)

或查看您的网络、IP 地址和网络掩码:

cat /proc/net/fib_trie | grep "|--"   | egrep -v "0.0.0.0| 127."
       |-- 193.136.1.0
       |-- 193.136.1.2
    |-- 193.136.1.255
       |-- 193.136.1.0
       |-- 193.136.1.2
    |-- 193.136.1.255       
Run Code Online (Sandbox Code Playgroud)

  • `/proc/net/fib_trie` 在我的 RHEL 6.6 系统上不可用 (3认同)
  • @villapx fib_trie 在 2.6 内核中不存在。 (2认同)

小智 6

可以将来自 的网络地址/proc/net/fib_trie与来自 的接口相关联/proc/net/route:

  $ awk '/^[^I]/ {print $1 " " $2}' /proc/net/route
  br0 0001020A
  br0 FE01020A
Run Code Online (Sandbox Code Playgroud)

..并使用以下命令转换十六进制网络地址:

$ echo FE01020A | xxd -r -p | hexdump -e '/1 "%u."' | tac -s'.' | sed 's/\.$//'
10.2.1.254
Run Code Online (Sandbox Code Playgroud)


小智 5

$ awk '/32 host/ { print f } {f=$2}' <<< "$(</proc/net/fib_trie)"
Run Code Online (Sandbox Code Playgroud)

  • 许多官方 docker 容器都没有 ip 命令,那么您的回答解决了我的问题。`awk '/32 主机/ { 打印 f } {f=$2}' /proc/net/fib_trie | 排序 | 唯一| grep -v 127.0.0.1` (3认同)
  • 欢迎来到 U&amp;L!为什么是 `&lt;&lt;&lt; "$(&lt;/proc/net/fib_trie)"` 而不是简单的 `&lt;/proc/net/fib_trie`? (2认同)
  • @fra-san:`awk '/32 host/ { print f } {f=$2}' /proc/net/fib_trie` 工作原理相同 (2认同)
  • @Harry它基本上是这样做的:对于每一行,它在 f 中节省 2 美元。但如果该行包含“32 host”,则打印上一行保存的“f”。打印f后,再次节省$2 (2认同)