Как получить шлюз по умолчанию в Mac OSX

мне нужно получить шлюз по умолчанию на компьютере Mac. Я знаю, что в Linux route-n даст вывод, из которого я могу легко получить эту информацию. Однако это не работает в Mac OSX (Snow Leopard).

Я тоже пробовал netstat -nr | grep 'default', но я надеялся на более чистый выход, подобный тому, который производится route -n в Linux / Unix. netstat -nr перечислены все интерфейсы и шлюз по умолчанию для них.

любой вид предложения или подсказки в правильном направлении будет оцененный.

4 ответов


вы можете попробовать с:

route -n get default

это не то же самое, что GNU/Linux в route -n (или даже ip route show), но полезно для проверки информации о маршруте по умолчанию. Кроме того, вы можете проверить маршрут, который пакеты будут принимать на определенный хост. Е. Г.

route -n get www.yahoo.com

выход будет похож на:

   route to: 98.137.149.56
destination: default
       mask: 128.0.0.0
    gateway: 5.5.0.1
  interface: tun0
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0

ИМХО netstat -nr это то, что вам нужно. Даже сетевая утилита MacOSX (*) использует вывод netstat для отображения информации о маршрутизации. Network utility screenshot displaying routing table information

I надеюсь, это поможет:)

(*) вы можете запустить сетевую утилиту с помощью open /Applications/Utilities/Network\ Utility.app


для получения списка IP-адресов, вы можете использовать команды netstat команда

netstat -rn 

это дает длинный список ip-адресов, и нелегко найти требуемое поле. Результат выборки выглядит следующим образом:

Routing tables
Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            192.168.195.1      UGSc           17        0     en2
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              1   254107     lo0
169.254            link#7             UCS             0        0     en2
192.168.195        link#7             UCS             3        0     en2
192.168.195.1      0:27:22:67:35:ee   UHLWIi         22      397     en2   1193
192.168.195.5      127.0.0.1          UHS             0        0     lo0

More result is truncated.......

ip-адрес шлюза находится в первой строке; один со значением по умолчанию в его первом столбце.

чтобы отобразить только выбранные строки результата, мы можем использовать grep вместе с команды netstat

netstat -rn | grep 'default'

эта команда фильтрует и отображает строки результата, имеющие значение по умолчанию. В этом случае вы можете увидеть результат следующим образом:

default            192.168.195.1      UGSc           14        0     en2

если вы заинтересованы в поиске только ip-адрес шлюза и ничего больше вы можете дополнительно фильтровать результат с помощью awk. Команда awk соответствует шаблону во входном результате и отображает выходные данные. Это может быть полезно, когда вы используете свой результат непосредственно в какой-либо программе или пакетное задание.

netstat -rn | grep 'default' | awk '{print }'

команда awk сообщает сопоставьте и распечатайте второй столбец в результате в тексте. Конечный результат, таким образом, выглядит так:

192.168.195.1

в этом случае netstat отображает весь результат, grep выбирает только строку с "default" в ней, а awk дополнительно соответствует шаблону для отображения второго столбца в тексте.

вы также можете использовать команду route-n get по умолчанию для получения требуемого результата. Полная команда is

route -n get default | grep 'gateway' | awk '{print }'

эти команды хорошо работают в linux, а также в системах unix и MAC OS.


утилита grep не требуется. Awk может сделать все это:

    netstat -rn | awk '/default/ {print }'
      192.168.128.1

обратите внимание, что если у вас есть что - то вроде Parallels (или VPN, или оба), вы можете увидеть две или более записей маршрутизации по умолчанию-это будет верно, если вы также используете предложение "grep" выше.

    netstat -rn | awk '/default/ {print }'
      192.168.128.1
      link#12

и

    netstat -rn | awk '/default/ {print }'                             
      utun1
      192.168.128.1
      link#12

чтобы установить переменную (_default) для дальнейшего использования (предполагая только одну запись для "default").....

    _default=$( netstat -rn inet | awk '/default/ {print }' ) # I prefer $( ... ) over back-ticks

в случае нескольких маршрутов по умолчанию использовать:

    netstat -rn | awk '/default/ {if ( index(, "en") > 0 ){print } }'
      192.168.128.1

эти примеры протестированы в терминале Mavericks.app и специфичны только для OSX. Например, другие версии *nix часто используют " eth "для ethernet/беспроводных соединений, а не "en". Это также тестируется только с ksh. Для других оболочек может потребоваться несколько иной синтаксис.


Я бы использовал что-то в этом роде...

 netstat -rn | grep "default" | awk '{print }'