从网关获取mac地址

问题描述 投票:0回答:2

我希望能够使用 bash 脚本从网关获取 MAC 地址。

我的想法是获取网关IP:

netstat -nr | grep 默认值

但是我明白了:

默认 192.168.1.1 UGSc 77 0 en0

我需要以某种方式删除线路上的所有内容并使其只读取 IP,这样我就可以执行以下命令:

arp -n -i en0 $ip

如果有人可以帮助我或想出更好的方法,那就太好了!

macos terminal ip
2个回答
1
投票

请尝试

netstat -nr | grep default | awk '{print $1}'

如果您编写了大量 bash 脚本,您可能应该熟悉 awk,它可以执行此类操作(顺便说一句,它非常强大)。


1
投票

适用于 Mac OS X 的另一个答案是:

route get default | grep -E '^\s+gateway:' | awk '{print $2}' | xargs arp | awk '{print $4}'

说明:

  1. route get default
    打印有关默认路由的信息,包括默认网关。
$ route get default
   route to: default
destination: default
       mask: default
    gateway: wormhole
  interface: en0
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING,GLOBAL>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0 
bash-3.2$ route get default
   route to: default
destination: default
       mask: default
    gateway: wormhole
  interface: en0
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING,GLOBAL>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0 
  1. 第一个
    grep
    命令选择包含默认网关信息的
    route
    命令行。我不打算在这里提供任何类型的正则表达式入门,但“^”意味着模式必须从行首开始匹配,“\s+”部分意味着字符串之前必须有空格'gateway:',并且可以有任意数量的空格。
$ route get default | grep -E '^\s+gateway:'
    gateway: wormhole
  1. awk
    命令仅打印先前输出的第二列,即默认网关的主机名。
4. $ route get default | grep -E '^\s+gateway:' | awk '{print $2}' 
wormhole
  1. xargs
    用于将该主机名传递给
    arp
    ,后者将响应有关该主机的信息,包括其 MAC 地址。
$ route get default | grep -E '^\s+gateway:' | awk '{print $2}' | xargs arp 
wormhole (192.168.1.1) at 74:ac:b9:54:4e:b9 on en0 ifscope [ethernet]
  1. 最后,再次使用
    awk
    ,这次打印之前输出的第四列,其中包含 MAC 地址。
$ route get default | grep -E '^\s+gateway:' | awk '{print $2}' | xargs arp | awk '{print $4}'
74:ac:b9:54:4e:b9
© www.soinside.com 2019 - 2024. All rights reserved.