Cara mendapatkan alamat IP IPv6 di Linux

35

Saya memiliki server Linux dan saya ingin mencari alamat IPv6 utama melalui satu baris perintah.

Perintah saya sejauh ini:

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

yang menunjukkan:

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

Tapi saya hanya ingin satu kejadian , sehingga keluarannya berbunyi:

2001:410:0:39:221:28ff:fe46:eef4
Ankit Goyal
sumber
tulis skrip shell dan letakkan perintah-perintah itu di sana: voila, Anda sekarang telah membuat perintah "tunggal".
akira
4
Ketika berhadapan dengan IPv6 tidak disarankan untuk membatasi ke satu alamat. Mungkin ada beberapa alamat global, beberapa alamat tautan-lokal, beberapa alamat situs-lokal ...
grawity

Jawaban:

31
ip -6 addr

akan menunjukkan alamat IPv6 Anda.

Jim G.
sumber
% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... masih greppable
akira
1
Ini tidak menyelesaikan pertanyaan yang dinyatakan. OP ingin satu baris perintah untuk mengambil satu IPv6 (yang mungkin berarti yang publik pertama). Jadi salah satu ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'atau ip -6 addr show dev eth0 | awk '/inet6/{print $2}'dapat digunakan sebagai basis dan OP dapat memperluas / mengeditnya untuk kasus penggunaan spesifiknya.
rwenz3l
6

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

Output /sbin/ip -6 addr | grep inet6terlihat seperti ini:

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}'memisahkan setiap pembatas pengaturan garis menjadi satu atau lebih spasi putih atau garis miring ke depan. Bagian yang kita butuhkan adalah $ 3.

grep -v ^::1 | grep -v ^fe80untuk mengecualikan setiap baris yang dimulai dengan ::1atau fe80.

Qian Chen
sumber
ada terlalu banyak pemipaan grep ke awk, ini bisa collaspe menjadi awk tunggal `awk -F '[\ t] + | /' '$ 3 ==" :: 1 "{next;} $ 3 ~ / ^ fe80 :: / {next; } / 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

Jika Anda ingin pemilihan acak satu alamat IPv6

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

Jika Anda ingin alamat IPv6 dari nama paling umum untuk adaptor Ethernet pertama

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

Jika Anda hanya menginginkan alamatnya

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

Gunakan perintah berikut untuk melihat alamat IP Anda di Linux:

ifconfig

Biasanya, alamat IPv6 terlihat seperti 2001:5c0:9168::/48. Jika Anda menghadapi konflik dalam IP Anda, ikuti langkah-langkah di bawah ini untuk mengatur lagi alamat IP:

  1. Untuk menetapkan IP IP6, pastikan Anda telah menginstal alat iproute2.
  2. Dengan menggunakannya, mari mulai menetapkan IP Anda.
  3. Pastikan modul ipv6 diinstal atau tidak.

Kemudian, gunakan perintah berikut untuk menambahkan ip baru:

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

Setelah itu, tambahkan ip default via

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

Setelah menyelesaikan instalasi Anda, konfigurasi ulang / restart layanan IPv6 Anda yang diaktifkan, seperti Apache, SSH dll.

pengguna1908924
sumber
ifconfigsudah usang di Linux dan seharusnya tidak lagi digunakan. Distro-distro Linux modern bahkan tidak menginstalnya secara default lagi (kecuali beberapa paket kuno membutuhkannya).
Michael Hampton
1

Dengan beberapa penyesuaian kecil, upaya awal Anda akan berhasil:

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

Perubahan besar ada penambahan -obendera untuk menyebabkan entri yang akan dicetak, satu per baris, yang membuatnya lebih mudah untuk berjalan di atasnya.

Keith Gaughan
sumber
0

Pertama, Anda harus ingat bahwa dengan IPv6 mesin apa pun mungkin memiliki beberapa alamat IPv6, dan mereka mungkin berada di jaringan yang terpisah, dan salah satu dari mereka mungkin digunakan, tergantung di mana Anda ingin mencapai.

Jadi, sebelum Anda dapat menjawab pertanyaan tentang apa alamat IP sumber Anda, Anda harus memutuskan ke mana Anda mengirimkan lalu lintas. Kemudian Anda bisa meminta Linux untuk memberi tahu Anda alamat IPv6 mana yang akan menjadi sumber ketika Anda mengirim lalu lintas ke tujuan itu.

Jika Anda mengirimnya ke "Internet" maka pilih saja alamat IPv6 global secara acak, misalnya alamat DNS Publik Google.

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

Ini meminta Linux untuk rute ke tujuan itu. Perl mem-parsing hasil mencari srcdan kemudian mencetak bidang berikutnya.

Dengan memberikan tujuan yang berbeda, Anda dapat menerima alamat sumber yang berbeda:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1
Michael Hampton
sumber
0
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'
Werner Neumann
sumber