1

Если я запускаю /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 ответа2

4

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

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

ip addr show dev eth0 scope global
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-адрес в шестнадцатеричном виде).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .