Как получить адрес 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