Як знайти свою IP-адресу в командному рядку?


159

Я знаю, що ви можете це зробити ifconfig | grep inet, але це показує кілька адрес IPv4. Як отримати конкретну для SSHing та ін?


Те, що ви шукаєте, - це не ваша IP-адреса Mac, а загальнодоступна IP-адреса, яку ваш Інтернет-провайдер приписує інтерфейсу вашого маршрутизатора.
дан

Відповіді:


168

Використовуйте ipconfig getifaddr en1для бездротового зв'язку або ipconfig getifaddr en0для Ethernet.

Оновлення :

ipconfig getifaddr en0 за замовчуванням для Wi-Fi інтерфейсу.


7
Це показує мою внутрішню (для мого маршрутизатора) IP-адресу (наприклад, 192.168.1.xxx), а не зовнішню IP-адресу. (Як і більшість інших відповідей нижче.)
ShreevatsaR

2
Не працювало для мене :(
Naveed Abbas

2
ifconfigпоказує всі інтерфейси та їхні IP-адреси
aralar

4
echo External IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb

30
Він змінювався роками, для інтерфейсу Wi-Fi за замовчуванням 'ipconfig getifaddr en0'
Marek Szmalc

98

Наступні роботи для мене працюють 10,8 та 10,10 Йосеміті.

ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}' 

Якщо ви виявили, що наведене вище дає вам більше однієї відповіді, збережіть наступне у сценарії та запустіть його замість цього

ip_address.sh

#!/usr/bin/env bash

dumpIpForInterface()
{
  IT=$(ifconfig "$1") 
  if [[ "$IT" != *"status: active"* ]]; then
    return
  fi
  if [[ "$IT" != *" broadcast "* ]]; then
    return
  fi
  echo "$IT" | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'
}

main()
{
  # snagged from here: https://superuser.com/a/627581/38941
  DEFAULT_ROUTE=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
  if [ -n "$DEFAULT_ROUTE" ]; then
    dumpIpForInterface "$DEFAULT_ROUTE"
  else
    for i in $(ifconfig -s | awk '{print $1}' | awk '{if(NR>1)print}')
    do 
      if [[ $i != *"vboxnet"* ]]; then
        dumpIpForInterface "$i"
      fi
    done
  fi
}

main

3
На мою думку, це має бути прийнятою відповіддю, оскільки вона не вимагає специфікацій провідного та бездротового зв'язку.
Ерік Номіч

@ErikNomitch, окрім того, що це дає мені 2 відповіді
Зах Лісобей

Ага, я відкликаюсь тоді. @ZachLysobey
Ерік Номіч

це найкращий загальний підхід, але потрібно іноді зробити трохи більше привітань перед awk, щоб отримати правильну відповідь, і правильна відповідь може відрізнятися.
uchuugaka

Я додав сценарій, який, сподіваюся, повинен вирішити це питання .. фій!
Бред Паркс

43

Просто введіть curl ifconfig.meтермінал.


1
Чому потік? Хоча це зовнішній IP, команда є дійсною і працює для моїх ssh логінів.
CousinCocaine

5
Це публічна IP-адреса і те, що я шукав. ipconfig getifaddr en0призначений для локальної IP.
abriggs

На HighSierra мені довелося запустити це як SUDO. Крім цього, перелічено зовнішню IP-адресу. Інформацію про внутрішню IP-адресу дивіться у відповіді від Brad Parks
Vincent

19

У мене це налаштування в dotfile .aliases для частого пошуку ip:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"

17

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

Введіть ifconfigабо ifconfig -a. Ця команда показує вам список інтерфейсів разом з їх IP та MAC адресами (останній лише за наявності). Ви також можете ввести ifconfig en0або ifconfig en1для конфігурації певного інтерфейсу (як хтось сказав у своїх відповідях, en0, як правило, є дротовим Ethernet, тоді як en1 - інтерфейсом WiFi).

Як альтернатива, netstat -iсписок усіх інтерфейсів та покаже IP-адреси, які ви призначили кожному з них.

Як правило, коли у вас є демон SSH, який працює на коробці, він прослуховуватиме всі доступні інтерфейси, тобто. ви можете використовувати будь-яку IP-адресу, налаштовану на вашій машині, для підключення до цієї машини через SSH (це, очевидно, підпорядковане правилам брандмауера). Якщо ви працюєте за тим, що ОС називає первинним інтерфейсом та первинною IP-адресою, ви можете використовувати таку scutilкоманду:

MacBook:~ scutil
> show State:/Network/Global/IPv4
<dictionary> {
  PrimaryInterface : en0
  PrimaryService : C0550F84-5C07-484F-8D62-C8B90DC977D8
  Router : 10.103.4.1
}
> show State:/Network/Interface/en0/IPv4
<dictionary> {
  Addresses : <array> {
    0 : 10.103.4.234
  }
  BroadcastAddresses : <array> {
    0 : 10.103.4.255
  }
  SubnetMasks : <array> {
    0 : 255.255.255.0
  }
}

Зауважте, що вищезазначене, хоч і є командним рядком, також є інтерактивним (тому ви запускаєте scutilі потім вводите в нього власні команди). Перша showкоманда повідомляє вам назву основного інтерфейсу для ОС (тобто це буде той, який знаходиться вгорі списку у вашому вікні Налаштування системи / Налаштування мережі), а також IP-адресу вашого маршрутизатора за замовчуванням. Друга showкоманда бере State:/Network/Interface/<ifname>/IPv4аргумент (в даному випадку en0) і дає вам IP-адреси, призначені їй. Ви шукаєте адресу в масиві адреси, інші два записи - це трансляція адрес та мережевих масок.

Сподіваюся, що це допомагає, але якщо щось не зрозуміло, дайте мені знати.


1
Дякую за цю відповідь. Я написав швидкий сценарій, щоб отримати IP ваш основний інтерфейс:echo "show State:/Network/Interface/$(echo 'show State:/Network/Global/IPv4' | scutil | grep 'PrimaryInterface ' | sed 's/ PrimaryInterface : //')/IPv4" | scutil | pcregrep -Mo1 " Addresses : <array> {\n 0 : ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})"
DC_

4

Щоб отримати IP-адресу вашого комп’ютера, звернену до Інтернету, ось робочий прийом:

if=`netstat -nr | awk '{ if ($1 ~/default/) { print $6} }'`
ifconfig ${if} | awk '{ if ($1 ~/inet/) { print $2} }'

Він повинен працювати навіть у тому випадку, коли у вас є активне безліч інтерфейсів, навіть якщо у вас є інтерфейси, ви не знаєте, який саме є шлюзом за замовчуванням.


Це отримує IP-адресу внутрішньої мережі (наприклад 192.168.0.*), не зовнішню, що потрапляє до Інтернету.
SimplGy

Дякую за відгук Не могли б ви сказати, на якій версії ОС ви знаходитесь? Не могли б ви надати мені вихід netstat -nr | grep default?
дан

При цьому отримується IP інтерфейсу, який обслуговує в / вихідний трафік. Якщо ви стоїте за NAT, це дасть вашу LAN-адресу, а не WAN-адресу. Але це може бути корисно для багатьох цілей, і це не стосується мережі.
folex

1

Тільки для запису ви можете зробити скрипт bash з наступним вмістом, який дає вам вашу зовнішню IP-адресу

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo

3
За замовчуванням wgetне є частиною macOS, і його потрібно встановлювати з джерела, що не належить Apple.
користувач3439894

Чи специфічне питання macOS? він за замовчуванням встановлений у багатьох дистрибутивах Linux.
користувач702846

На цьому веб-сайті йдеться про апаратне та програмне забезпечення Apple, тому припущення про macOS та iOS.
грг

Команда macOS за замовчуванням для цього буде за допомогою curl:curl -s http://ipecho.net/plain; echo
thibmaek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.