Làm thế nào để tôi có được địa chỉ MAC của bộ định tuyến của tôi?


13

Có lệnh Linux nào cho phép tôi lấy địa chỉ MAC của bộ định tuyến không?


1
cái nào? bộ định tuyến của bạn nên có nhiều địa chỉ mac cho cả hai phía giao tiếp (đến / đi).
mchid

Điều này có nên đi trong Super User?

Câu trả lời:


6

Tôi thích một lớp lót:

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

arpinghiển thị MAC được liên kết với địa chỉ IP cổng mặc định từ đầu ra của ip route show match 0/0, được phân tích cú pháp bởi awk.


Tôi đã thử điều này (và các câu trả lời khác). Họ cung cấp thông tin tốt, nhưng địa chỉ MAC hiển thị bị tắt bởi hai chữ số so với những gì tôi đang tìm kiếm. Máy in của tôi liệt kê hai bộ định tuyến có cùng SSID (có thể là khách và thường xuyên) và muốn tôi chọn theo địa chỉ MAC. Câu trả lời này Askubfox.com/a/222553 cho tôi một trong hai cái được liệt kê, với iwconfig | grep "Access Point"lệnh. Tôi nghĩ rằng cái bị tắt bởi hai là phiên bản được lưu trong bộ nhớ cache của kết nối có dây, mà tôi đã rút phích cắm để cố gắng đảm bảo rằng tôi đang nhận được tuyến không dây.
hlongmore

10

Không sử dụng các lệnh đã lỗi thời ifconfig(8), arp(8) hoặc route(8). Sử dụng lệnh mới thay thế chúng và có thể làm nhiều hơn, ip(8).

Sử dụng ip route listđể xem defaultbộ định tuyến máy của bạn có. Đó phải là một dòng bắt đầu bằng default(hoặc 0.0.0.0) và có địa chỉ IP cho bộ định tuyến sau. Nếu bạn sử dụng IPv6, chỉ cần thêm công -6tắc , ip -6 route list.

default via 192.168.11.1 dev eth0  proto static 

Để xem địa chỉ MAC của địa chỉ IP của defaultbộ định tuyến, hãy sử dụng ip neighvà tra cứu dòng có địa chỉ IP và địa chỉ MAC sau lladdr.

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

4

Nếu bạn không biết IP của bộ định tuyến, rất có thể đó là cổng mà bạn có thể nhận được từ routelệnh :

$ 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

Lưu ý các dòng với các cờ UG. Địa chỉ trong Gatewaycột của dòng đó là những gì bạn đang tìm kiếm. Sau đó làm theo đề xuất của 2707974 với arp -n(ping IP nếu nó không hiển thị lúc đầu) và tìm dòng phù hợp:

$ 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

Ở đây, MAC của bộ định tuyến của bạn sẽ là 00:11:22:33:44:55.


2
Lớp lót tương ứng:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko

3

Đây là một lớp lót hoạt động trong dash, bashzsh:

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 trả về một cái gì đó như:

    mặc định thông qua 192.168.0.1 dev eth1 proto static metric 100

  2. chúng tôi nhận IP từ dòng đó là trường thứ ba với cutvà dòng grep chứa IP đó và không gian ngay sau nó từ đầu ra của vùng lân cận mạng. (không gian được yêu cầu để tránh khớp 192.168.0.1với 192.168.0.10), dòng khớp sẽ giống như:

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

  3. Bây giờ chúng ta có trường getfifth và làm cho nó viết hoa:

    CA: FE: BA: BE: BE: AF


2
Một chút giải thích sẽ giúp phần còn lại của chúng tôi hiểu kịch bản của bạn!
George Udosen

1
Đối với dòng cuối cùng có một tính năng Bash mở rộng một biến thành chữ hoa:echo ${info[5]^^}
David Foerster

1
@DavidFoerster Tôi muốn viết một lệnh di động nhưng biến thể ban đầu dựa vào lập chỉ mục mảng cụ thể cho zsh (từ một) vì vậy tôi đã cập nhật câu trả lời với biến thể di động giữa ba shell phổ biến nhất
Grief

2

Không phải là một giải pháp hoàn chỉnh, nhưng bạn kiểm tra 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

Điều này không nhận được địa chỉ MAC của các giao diện trên máy tính chứ không phải bộ định tuyến?
Wilf

2
Nếu bạn ping bộ định tuyến của mình (giả sử ping 192.168.0.1), thì bạn nên có địa chỉ MAC của nó trên bộ đệm arp ...
Rmano

cảm ơn @ 2707974 nhưng tôi không biết địa chỉ mac không có địa chỉ ip và tôi muốn có một lệnh chỉ cung cấp cho tôi địa chỉ ip hoặc địa chỉ mac của bộ định tuyến của tôi vì tôi muốn sử dụng lệnh trong python script để hiển thị tất cả arp bảng không hữu ích cho tôi
dùng4650183

2

Đây là phiên bản cải tiến của câu trả lời của Grief. Có thể danh sách tuyến ip -4 0/0 trả về nhiều hơn một dòng (IP), trong trường hợp đó, một lớp hoàn chỉnh không hoạt động. Vì vậy, phiên bản sửa đổi sau đây chỉ sử dụng dòng đầu tiên mà danh sách tuyến ip -4 0/0 trả về.

ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.