Як отримати шлюз за замовчуванням у Mac OSX


119

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

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

Будь-яка пропозиція чи натяк у правильному напрямку будуть вдячні.


3
Перейти на SuperUser?
JMD

3
FYI ви можете Option + натиснути на значок WiFi на панелі стану. Це показує додаткову інформацію, включаючи шлюз.
Петро Újezdský

Відповіді:


189

Ви можете спробувати:

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 Network (*) використовує висновок netstat для показу інформації про маршрутизацію. Скріншот мережевої утиліти, що відображає інформацію таблиці маршрутизації

Я сподіваюся, що це допомагає :)

(*) Можна запустити мережеву утиліту за допомогою open /Applications/Utilities/Network\ Utility.app


Дякую. Ви просто врятували мене кілька годин у новому будинку, коли модем Time Warner вирішив, що хоче IP, який мій маршрутизатор мав, і ifconfig брехав про шлюз.
Кріс Доггетт

38

Для отримання списку пов’язаних 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 $2}'

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

192.168.195.1

У цьому випадку netstat відображає весь результат, grep вибирає лише рядок із 'за замовчуванням' у ньому, а awk додатково відповідає шаблону для відображення другого стовпця в тексті.

Можна також використовувати команду route -n get default, щоб отримати необхідний результат. Повна команда є

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

Ці команди добре працюють як в Linux, так і в Unix системах та MAC OS.


8

Утиліта grep не потрібна. Awk може все це:

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

Зауважте, що якщо у вас працює щось на кшталт Parallels (або VPN, або обох), ви можете побачити дві або більше записів маршрутизації за замовчуванням - це буде правдою, якщо ви також будете використовувати пропозицію 'grep' вище.

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

і

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

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

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

У випадку використання декількох маршрутів за замовчуванням використовуйте:

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

Ці приклади тестуються в Mavericks Terminal.app і стосуються лише OSX. Наприклад, інші * nix версії часто використовують "eth" для Ethernet / бездротових з'єднань, а не "en". Це також тестується лише з ksh. Іншим оболонкам може знадобитися дещо інший синтаксис.


3

Я б хотів щось використовувати в цьому напрямку ...

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

Як ми можемо досягти цього в програмуванні об'єктивного с. Чи є для цього
рамки

0

Використання системних налаштувань:

Крок 1. Клацніть піктограму Apple (у верхньому лівому куті екрана) та виберіть Налаштування системи.

Крок 2. Клацніть Мережа.

Крок 3. Виберіть мережеве з'єднання та натисніть кнопку Додатково.

Крок 4: Виберіть вкладку TCP / IP і знайдіть IP-адресу вашого шлюзу, вказану поруч з маршрутизатором.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.