Как получить адрес 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 данных в определенном порядке / формате. Я бы предпочел использовать команды, чтобы получить именно то, что я хочу.

2 ответа

Решение

Если вы хотите быть на 100% независимыми от форматов вывода, вам нужно проанализировать файлы /proc/net. Интересная часть этого файла: /proc/net/if_inet6,

Таким образом, вы можете извлечь IP с помощью:

awk '$6=="eth0"&&$4==00{print $1}' /proc/net/if_inet6

Если 4-е значение 00 тогда область видимости глобальная А если 6-е поле eth0 (или как имя вашего интерфейса) напечатайте первое поле (IP-адрес в шестнадцатеричном виде).

Классический Unix ifconfig устарела в Linux сейчас. ip Команда - это новая жара.

Я не рядом с коробкой Linux, чтобы проверить это прямо сейчас, но ip(8) Страница man, кажется, указывает, что это должно работать:

ip addr show dev eth0 scope global
Другие вопросы по тегам