如果我运行,/sbin/ifconfig eth0
我会得到以下输出:
Link encap:Ethernet HWaddr <address hidden for privacy>
inet addr:<address hidden for privacy> Bcast:<address hidden for privacy> Mask:255.255.255.0
inet6 addr: <address hidden for privacy> Scope:Link
inet6 addr: <address hidden for privacy> Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5891 errors:0 dropped:0 overruns:0 frame:0
TX packets:4933 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23922030 (22.8 MiB) TX bytes:455152 (444.4 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
如何获取范围为全球的 ipv6 地址?
到目前为止,如果我这样做:
/sbin/ifconfig eth0 | awk '/inet6 / { print $3 }'
我获得了两个地址(来自范围“链接”和“全局”),但我只想要“全局”的范围
此外,这似乎是一种非常混乱的获取方式,因为我依赖 ifconfig 以特定顺序/格式输出数据。我宁愿使用命令来获得我想要的东西。
答案1
如果希望 100% 不受输出格式影响,则必须解析 /proc/net 文件。有趣的是该文件:/proc/net/if_inet6
。
因此你可以使用以下命令提取 IP:
awk '$6=="eth0"&&$4==00{print $1}' /proc/net/if_inet6
如果第 4 个值是,00
那么范围是全局的,并且如果第 6 个字段是eth0
(或者你的接口名称是)则打印第一个字段(十六进制的 IP 地址)。
答案2
ifconfig
现在 Linux 已经不再使用经典的 Unix了,ip
命令才是新的热点。
我现在不在 Linux 机器旁,无法对此进行测试,但是ip(8)
手册页似乎表明这应该可行:
ip addr show dev eth0 scope global