IPv6 IP adresini Linux'ta nasıl edinebilirim?


35

Bir Linux sunucum var ve ana IPv6 adresini tek bir komut satırı üzerinden bulmak istiyorum.

Şimdiye kadar emrim:

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

hangi gösterir:

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

Ancak çıktının okunması için sadece bir tane olmasını istiyorum :

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

Bir kabuk betiği yazın ve bu komutları oraya yazın: voila, şimdi "tek" bir komut oluşturdunuz.
akira

4
IPv6 ile uğraşırken tek bir adrese sınırlamanız kesinlikle önerilmez. Birden fazla genel adres, birden fazla yerel bağlantı adresi, birden fazla site yerel adresi olabilir ...
Grawity

Yanıtlar:


31
ip -6 addr

IPv6 adreslerinizi gösterecektir.


% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... yine de greppable
akira

1
Bu, belirtilen soruyu çözmez. OP bir IPv6 almak için tek bir komut satırı istiyor (bu muhtemelen birincil olanı ifade ediyor). Bu yüzden ya temel olarak kullanılabilir ya ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'da ip -6 addr show dev eth0 | awk '/inet6/{print $2}'OP kendi özel kullanım durumu için onları genişletebilir / düzenleyebilir.
rwenz3l

6

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

/sbin/ip -6 addr | grep inet6Görünüşün çıktısı şuna benzer:

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}'Her bir satır ayar sınırlayıcısının bir veya daha fazla beyaz boşluk veya bir eğik çizgi olmasını böler. İhtiyacımız olan kısım 3 dolar.

grep -v ^::1 | grep -v ^fe80::1veya ile başlayan herhangi bir satırı dışlamak için fe80.


grep'in awk içine çok fazla boru eklenmesi var, bu tek bir awk `awk-f '[' t '+' / '' $ '' = '' = sonraki;} $ 3 ~ / ^ fe80 ::/ { Sonraki ; } / inet6 / {print $ 3} '`
Archemar

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

Bir IPv6 adresinin rastgele seçimini istiyorsanız

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

İlk Ethernet bağdaştırıcısı için en yaygın adın IPv6 adresini istiyorsanız

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

Sadece adresi istiyorsan

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

2

IP adresinizi Linux'ta görüntülemek için aşağıdaki komutu kullanın:

ifconfig

Normalde, Ipv6 adresi gibi görünüyor 2001:5c0:9168::/48. IP’nizde herhangi bir çelişki yaşıyorsanız, IP adresini tekrar ayarlamak için aşağıdaki adımları izleyin:

  1. IPv6 IP'leri atamak için, iproute2 araçlarının kurulu olduğundan emin olun.
  2. Bunları kullanarak, IP'lerinizi atamaya başlayalım.
  3. İpv6 modülünün kurulu olduğundan emin olun.

Ardından, yeni ip eklemek için aşağıdaki komutu kullanın:

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

Daha sonra üzerinden varsayılan ip ekleyin

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

Kurulumu tamamladıktan sonra, Apv, SSH vb. Gibi IPv6 özellikli servislerinizi yeniden yapılandırın / yeniden başlatın.


ifconfigLinux'ta eski ve artık kullanılmamalıdır. Modern Linux dağıtımları artık varsayılan olarak bile yüklemez (bazı eski paketler gerektirmediği sürece).
Michael Hampton

1

Birkaç küçük titremeyle, orijinal girişiminiz işe yarayacaktı:

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

Buradaki büyük değişiklik -o, girişlerin satır başına bir tane olmak üzere basılmasını sağlamak için bayrağın eklenmesidir;


0

Öncelikle, IPv6 ile herhangi bir makinenin birkaç IPv6 adresine sahip olduğunu ve ayrı ağlarda olabileceğini ve ulaşmak istediğiniz yere bağlı olarak bunlardan herhangi birinin kullanılabileceğini hatırlamanız gerekir.

Bu nedenle, kaynak IP adresinizin ne olduğu sorusunu cevaplayabilmeniz için önce trafiği nereye gönderdiğinize karar vermeniz gerekir. O zaman Linux'tan size bu hedefe trafik gönderirken hangi IPv6 adresinin kaynak olacağını söylemesini isteyebilirsiniz.

İnternet’e gönderiyorsanız, rastgele bir global IPv6 adresi seçin, örneğin Google’ın Genel DNS adresi.

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

Bu Linux'a o hedefe giden rotayı sorar. Perl, aradığınız sonucu ayrıştırır ve bir srcsonraki alanı yazdırır.

Farklı bir varış noktası sağlayarak, farklı bir kaynak adresi alabilirsiniz:

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

0
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.