Como obter o endereço ipv6 marcado com um escopo específico?

1

Se eu executar /sbin/ifconfig eth0 , recebo a seguinte saída:

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) 

Como obtenho o endereço ipv6 onde o escopo é global?

Até agora, se eu fizer:

/sbin/ifconfig eth0 | awk '/inet6 / { print $3 }'

Eu obtenho os dois endereços (dos escopos "link" AND "global"), mas quero apenas o escopo para "Global"

Além disso, isso parece uma maneira muito confusa de obtê-lo, já que estou confiando no ifconfig que envia os dados em uma determinada ordem / formato. Eu prefiro usar comandos para obter exatamente o que eu quero.

    
por Kaizer Sozay 18.03.2015 / 04:20

2 respostas

2

Se você quiser ser 100% independente dos formatos de saída, terá que analisar os arquivos / proc / net. A parte interessante é esse arquivo: /proc/net/if_inet6 .

Então você pode extrair o ip com:

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

Se o quarto valor for 00 , o escopo será global E se o sexto campo for eth0 (ou como o nome da sua interface é), imprima o primeiro campo (o endereço IP em hexadecimal).

    
por 18.03.2015 / 08:38
4

O clássico Unix ifconfig está obsoleto no Linux agora. O comando ip é o novo hotness.

Não estou perto de uma caixa do Linux para testar isso agora, mas a página ip(8) man parece indicar que isso deve funcionar:

ip addr show dev eth0 scope global
    
por 18.03.2015 / 04:31