24

У меня есть сервер Linux, и я хочу найти основной адрес IPv6 с помощью одной командной строки.

Моя команда до сих пор:

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

который показывает:

2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4

Но я хочу только одно вхождение, так что вывод гласит:

2001:410:0:39:221:28ff:fe46:eef4

6 ответов6

23
ip -6 addr

покажет ваши адреса IPv6.

3

/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

Вывод /sbin/ip -6 addr | grep inet6 выглядит примерно так:

inet6 ::1/128 scope host 
inet6 2001:123:456:55f::1/64 scope global 
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link 

awk -F '[ \t]+|/' '{print $3}' разделяет каждую строку, устанавливая разделители на один или несколько пробелов или косую черту. Часть, которая нам нужна, это 3 доллара.

grep -v ^::1 | grep -v ^fe80 чтобы исключить любую строку, начинающуюся с ::1 или fe80 .

3
$ /sbin/ifconfig | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
      inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
      inet6 addr: ::1/128 Scope:Host

Если вы хотите случайный выбор одного адреса IPv6

$ /sbin/ifconfig | grep inet6 | head -n 1
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Если вы хотите IPv6-адрес наиболее распространенного имени для первого адаптера Ethernet

$ /sbin/ifconfig eth0 | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Если вы просто хотите адрес

$ /sbin/ifconfig eth0 |  awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64
1

Используйте следующую команду для просмотра вашего IP-адреса в Linux:

ifconfig

Обычно адрес Ipv6 выглядит как 2001:5c0:9168::/48 . Если вы столкнулись с каким-либо конфликтом в вашем IP-адресе, выполните следующие шаги, чтобы снова установить IP-адрес:

  1. Чтобы назначить IPv6 IP-адреса, убедитесь, что у вас установлены инструменты iproute2.
  2. Используя их, давайте начнем назначать ваши IP-адреса.
  3. Убедитесь, что модуль ipv6 установлен или нет.

Затем используйте следующую команду для добавления нового ip:

ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0

После этого добавьте IP-адрес по умолчанию через

ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0

После завершения установки просто переконфигурируйте / перезапустите службы с поддержкой IPv6, такие как Apache, SSH и т.д.

1

С несколькими небольшими изменениями ваша первоначальная попытка сработала бы:

ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'

Большим изменением является добавление флага -o который заставляет печатать записи, по одной на строку, что облегчает запуск sed над ними.

0

Во-первых, вы должны помнить, что с IPv6 любая машина может иметь несколько адресов IPv6, и они могут находиться в разных сетях, и любой из них может использоваться, в зависимости от того, где вы хотите достичь.

Итак, прежде чем вы сможете ответить на вопрос, какой IP-адрес вашего источника, вы должны решить, куда вы отправляете трафик. Затем вы можете просто попросить Linux сообщить вам, какой IPv6-адрес будет источником при отправке трафика в этот пункт назначения.

Если вы отправляете его в "Интернет", просто выберите случайный глобальный IPv6-адрес, например, общедоступный DNS-адрес Google.

ip r get to 2001:4860:4860::8888 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000

Это запрашивает у Linux маршрут к этому месту назначения. Perl анализирует результат в поисках src и затем печатает следующее поле.

Предоставляя другое назначение, вы можете получить другой адрес источника:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1

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