ルーターのMACアドレスを取得するにはどうすればよいですか?


13

ルーターのMACアドレスを取得できるLinuxコマンドはありますか?


1
どれ?ルーターには、通信の両側(受信/送信)に複数のMACアドレスが必要です。
mchid 2015

これはスーパーユーザーで実行する必要がありますか?

回答:


6

私はワンライナーが好きです:

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

arping出力からデフォルトゲートウェイIPアドレスに関連付けられた番組MAC ip route show match 0/0によって解析され、awk


私はこれを試しました(そして他の答えも)。それらは良い情報を提供しますが、表示されたMACアドレスは、私が探していたものから2桁ずれていました。私のプリンターは、SSIDが同じ(おそらくゲストとレギュラー)の2つのルーターをリストしており、MACアドレスで選択することを望んでいます。この回答askubuntu.com/a/222553は、リストされた2つの中の1つをiwconfig | grep "Access Point"コマンドで提供します。2つずれていたのは、有線接続のキャッシュバージョンだったと思います。これを抜いて、ワイヤレスルートを取得していることを確認しました。
hlongmore

10

廃止されたコマンドifconfig(8)、arp(8)、またはroute(8)は使用しないでください。それらを置き換える新しいコマンドを使用してくださいip(8)。

使用ip route listdefaultているマシンのルーターを確認します。それはdefault(または0.0.0.0)で始まり、その後にルーターへのIPアドレスを持つ行である必要があります。IPv6を使用する場合は、-6スイッチを追加するだけip -6 route listです。

default via 192.168.11.1 dev eth0  proto static 

defaultルータのIPアドレスのMACアドレスを確認するには、を使用ip neighして、IPアドレスとMACアドレスの行を検索しますlladdr

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

4

ルーターのIPがわからない場合は、routeコマンドから取得できるゲートウェイである可能性が高いです。

$ 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

フラグのある行に注意してくださいUGGatewayその行の列のアドレスが探しているものです。そして、続く2707974の提案をしてarp -n(それが最初に表示されない場合はIPにpingを実行)、および一致する行を探します。

$ 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

ここでは、ルーターのMACはになります00:11:22:33:44:55


2
対応するワンライナー:arp -n | grep `route -n | awk '/UG/{print $2}'` | awk '{print $3}'
Falko

3

ここで働くワンライナーであるdashbashとは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 次のようなものを返します:

    デフォルト:192.168.0.1 dev eth1 proto静的メトリック100

  2. その行から3番目のフィールドとしてIPを取得しcut、ネットワーク近隣の出力からそのIPとその直後のスペースを含むgrep行を取得します。(スペースはのマッチングを回避するために必要とされる192.168.0.1とし192.168.0.10)、一致した行は次のようになります:

    192.168.0.1 dev eth1 lladdr ca:fe:ba:be:be:af到達可能

  3. 次に、5番目のフィールドを取得して大文字にします。

    CA:FE:BA:BE:BE:AF


2
もう少し説明すると、残りの人があなたのスクリプトを理解するのに役立ちます!
George Udosen 2017年

1
最後の行のために大文字に変数を展開しBashの機能があります:echo ${info[5]^^}
デビッド・フェルスター

1
@DavidFoerster私は、ポータブルコマンドを書きたかったが、私は3つの最も人気のシェルとの間にポータブルバリアントで答えを更新しましたので、元の変異体は、(1から)のzshに配列のインデックスの特定に依存していました
悲しみ

2

完全なソリューションではありませんが、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

これは、ルーターではなく、コンピューターのインターフェイスのMACアドレスを取得しませんか?
Wilf、2015

2
ルーターにpingする場合(たとえばping 192.168.0.1)、そのMACアドレスをarpキャッシュに
置く必要があり

@ 2707974に感謝しますが、MACアドレスもアドレスIPも知らないので、ルーターのIPアドレスまたはMACアドレスのみを取得するコマンドを作成したいのです。テーブルは私には役に立ちません。
user4650183 2015

2

これは悲しみの答えの改良版です。ip -4 route list 0/0が複数の回線(IP)を返す可能性があります。その場合、完全な1つのライナーが機能しません。したがって、次の変更されたバージョンは、ip -4 route list 0/0が返す最初の行のみを使用します。

ip neigh|grep "$(ip -4 route list 0/0|head -1|cut -d' ' -f3) "|cut -d' ' -f5|tr '[a-f]' '[A-F]'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.