Как получить шлюз по умолчанию в 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 для отображения информации о маршрутизации.
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. Для других оболочек может потребоваться несколько иной синтаксис.