Kami tahu bahwa kami dapat menggunakan alamat MAC untuk membuat pengenal antarmuka, misalnya untuk alamat IPv6 tautan lokal yang harus unik di Jaringan.
Gambar menunjukkan cara untuk melakukan ini:
Pertanyaan saya adalah:
- Bagaimana saya bisa membuat alamat IPv6 dari MAC menggunakan
awk
ataused
? - ATAU adakah perintah yang memberi saya alamat IPv6 link-lokal untuk MAC tertentu (seperti itu
createIPv6 myMAC
)?
sed
awk
ipv6
mac-address
Nidal
sumber
sumber
Jawaban:
Jika Anda ingin membuat alamat IPv6 keseluruhan dari MAC (dan awalan yang diberikan), Anda bisa menggunakan
ipv6calc
alat yang sangat baik oleh Peter Bieringer.Perintah berikut membuat alamat IPv6 tautan lokal (
fe80::
awalan) dari alamat MAC:Anda dapat meninggalkan sebagian besar opsi dan membiarkan perintah menebak apa yang harus dilakukan:
Untuk distro Debian,
ipv6calc
ada di repositori utama.sumber
Dari entri Wikipedia IPv6, deskripsi yang lebih tekstual:
Jadi mengganti yang ketiga
:
dengan:FF:FE:
harus melakukan trik:Tidak tahu apakah sintaks itu khusus untuk GNU sed.
Pekerjaan dalam proses:
Ubah itu menjadi bit:
seharusnya menghasilkan bit yang
00000000 00001100 00101001 11111111 11111110 00001100 01000111 11010101
hanya menyisakan bit nomor 7.sumber
sumber
Anda dapat membuat fungsi bash (dan menempatkannya di Anda
~/.bashrc
) yang digunakanIFS
untuk membagi alamat MAC menjadi 6 kelompok yang dipisahkan dengan titik dua dan merakitnya. Anda juga perlu membalik bit ke-7 yang paling signifikan, yaitu bit 1 dari byte pertama:Contoh penggunaan:
sumber
Saya harus memberikan pujian kepada @ rubo77 di atas untuk jawaban murni-shell (kecuali Anda menghitung printf) di atas, yang saya cari.
Ini menambahkan sedikit sed ke:
(a) hilangkan setiap nol terkemuka di setiap potongan 16-bit; dan
(B) hilangkan lebih lanjut semua-nol potongan pada awal IID
... sesuai konvensi umum untuk singkatnya alamat.
Perhatikan bahwa jika Anda ingin menggunakan kembali ini untuk awalan lain (sewenang-wenang), yang mungkin Anda miliki sejak EUI-64 dapat digunakan dalam lingkup apa pun (meskipun disarankan untuk tidak menggunakannya untuk alamat global karena alasan privasi), Anda akan memerlukan sedikit skrip sed yang lebih berbelit-belit. Itu karena
fe80::
awalannya sudah berisi tiga nol-potongan (elided ke double-colon) yang berdekatan dengan awal IID. Jadi, bahkan jika potongan pertama IID adalah semua-nol (yaitu, jika MAC mulai dengan02:00
), itu akan hilang juga. Format EUI-64 hanya menyisakan satu potongan lebih lanjut yang bisa menjadi nol - yang terakhir - yang ditambahkan skrip di atas sebagai nol tunggal. Awalan lain mungkin mengharuskan satu untuk meninggalkan nol tunggal antara dua titik dua.sumber
printf
saja dan melakukan hal-hal tambahan sebagai gantinya.