如何获取标有特定范围的ipv6地址?

如何获取标有特定范围的ipv6地址?

如果我运行,/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

相关内容