Bagaimana cara mendapatkan alamat MAC router saya?


13

Apakah ada perintah Linux yang memungkinkan saya untuk mendapatkan alamat MAC dari router saya?


1
yang mana? router Anda harus memiliki beberapa alamat mac untuk kedua sisi komunikasi (masuk / keluar).
mchid

Haruskah ini masuk Super User?

Jawaban:


6

Saya suka satu kalimat:

arping -f -I $(ip route show match 0/0 | awk '{print $5, $3}')

arpingmenunjukkan MAC yang terkait dengan alamat IP gateway default dari output ip route show match 0/0, diuraikan oleh awk.


Saya mencoba ini (dan jawaban lainnya). Mereka memberikan info yang bagus, tetapi alamat MAC yang ditampilkan mati oleh dua digit dari apa yang saya cari. Printer saya mencantumkan dua router dengan SSID yang sama (mungkin guest dan regular), dan ingin saya memilih berdasarkan alamat MAC. Jawaban ini askubuntu.com/a/222553 memberi saya salah satu dari dua yang terdaftar, dengan iwconfig | grep "Access Point"perintah. Saya pikir yang dimatikan oleh dua adalah versi cache dari koneksi kabel, yang saya cabut untuk mencoba memastikan saya mendapatkan rute nirkabel.
hlongmore

10

Jangan gunakan perintah usang ifconfig(8), arp(8) atau route(8). Gunakan perintah baru yang menggantikannya dan dapat melakukan lebih banyak, ip(8).

Gunakan ip route listuntuk melihat defaultrouter mana yang dimiliki mesin Anda. Itu harus menjadi garis yang dimulai dengan default(atau 0.0.0.0) dan memiliki alamat IP setelah router. Jika Anda menggunakan IPv6, tambahkan saja -6sakelar ip -6 route list,.

default via 192.168.11.1 dev eth0  proto static 

Untuk melihat alamat MAC dari alamat defaultIP router, gunakan ip neighdan cari baris setelah alamat IP dan alamat MAC lladdr.

192.168.11.1 dev eth0 lladdr 1c:af:f7:XX:XX:XX REACHABLE

4

Jika Anda tidak tahu IP router Anda, kemungkinan besar gateway Anda yang bisa Anda dapatkan dari routeperintah :

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Perhatikan garis dengan bendera UG. Alamat di Gatewaykolom baris itu adalah yang Anda cari. Kemudian ikuti saran 2707974 dengan arp -n(ping IP jika tidak muncul pada awalnya), dan temukan baris yang sesuai:

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.0.1              ether   00:11:22:33:44:55   C                     eth0
192.168.0.2              ether   66:77:88:99:aa:bb   C                     eth0

Di sini, MAC router Anda akan 00:11:22:33:44:55.


2
Satu kalimat yang sesuai:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko

3

Berikut ini adalah satu-liner yang berfungsi dash, bashdan zsh:

ip neigh|grep "$(ip -4 route list 0/0|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
  1. ip -4 route list 0/0 mengembalikan sesuatu seperti:

    default via 192.168.0.1 dev eth1 proto static metric 100

  2. kami mendapatkan IP dari baris itu sebagai bidang ketiga dengan cutdan garis grep yang berisi IP itu dan ruang segera setelah itu dari output lingkungan jaringan. (ruang diperlukan untuk menghindari kecocokan 192.168.0.1dengan 192.168.0.10), baris yang cocok akan menjadi seperti:

    192.168.0.1 dev eth1 lladdr ca: fe: ba: be: be: af REACHABLE

  3. Sekarang kita mendapatkan bidang kelima dan membuatnya menjadi huruf besar:

    CA: FE: BA: BE: BE: AF: AF


2
Penjelasan lebih banyak akan membantu kita semua memahami skrip Anda!
George Udosen

1
Untuk baris terakhir ada fitur Bash yang memperluas variabel ke huruf besar:echo ${info[5]^^}
David Foerster

1
@DavidFoerster Saya ingin menulis perintah portabel tetapi varian asli bergantung pada pengindeksan array khusus untuk zsh (dari satu) jadi saya telah memperbarui jawabannya dengan varian portabel antara tiga kerang paling populer
Duka

2

Bukan solusi yang lengkap, tetapi Anda memeriksa arp -n.

ddd@mmm ~ $ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
xxx.xxx.xxx.xxx          ether   00:e0:1e:b4:12:42   C                     eth0
yyy.yyy.yyy.yyy          ether   00:14:78:52:28:d2   C                     wlan0

Bukankah ini mendapatkan alamat MAC dari antarmuka di komputer, bukan router?
Wilf

2
Jika Anda melakukan ping router Anda (katakanlah ping 192.168.0.1) maka Anda harus memiliki alamat MAC pada cache arp ...
Rmano

terima kasih @ 2707974 tapi saya tidak tahu tidak ada alamat mac tidak ada alamat ip dan saya ingin memiliki perintah yang hanya memberi saya alamat ip atau alamat mac router saya karena saya ingin menggunakan perintah dalam skrip python untuk itu tampilkan semua arp meja tidak berguna bagi saya.
user4650183

2

Ini adalah versi perbaikan dari jawaban Duka. Dimungkinkan untuk ip -4 daftar rute 0/0 untuk mengembalikan lebih dari satu baris (IP), dalam hal ini liner lengkap tidak berfungsi. Jadi versi modifikasi berikut hanya menggunakan baris pertama yang mengembalikan daftar rute ip -4 0/0.

ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.