Как мне найти мой IP-адрес из командной строки?

159

Я знаю, что вы можете сделать ifconfig | grep inet, но это показывает вам несколько адресов IPv4. Как я могу получить конкретный для SSHing et al?

JShoe
источник
То, что вы ищете, это не ваш IP-адрес Mac, а публичный IP-адрес, назначенный вашим Интернет-провайдером интернет-интерфейсу вашего маршрутизатора.
дан

Ответы:

168

Используйте ipconfig getifaddr en1для беспроводной или ipconfig getifaddr en0для Ethernet.

Обновление :

ipconfig getifaddr en0 по умолчанию для интерфейса Wi-Fi.

daviesgeek
источник
7
Это показывает мой внутренний (для моего маршрутизатора) IP-адрес (например, 192.168.1.xxx), а не внешний IP-адрес. (Как и большинство других ответов ниже.)
ShreevatsaR
2
У меня не сработало :(
Навид Аббас
2
ifconfigпоказывает все интерфейсы и их IP-адреса
Aralar
4
echo Внешний IP:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb
30
Он менялся годами, для интерфейса Wi-Fi по умолчанию используется ipconfig getifaddr en0
Марек Шмальк,
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, чтобы получить правильный ответ, и правильный ответ может отличаться.
Учуугака
Я добавил сценарий, который, надеюсь, должен решить эту проблему.
Брэд Паркс
43

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

Kcidkcus
источник
1
Почему отрицательный голос? Хотя это внешний IP, команда действительна и работает для моих логинов SSH.
Кузен Кокаин
5
Это публичный IP-адрес и то, что я искал. ipconfig getifaddr en0для локального IP.
abriggs
На HighSierra я должен был запустить это как SUDO. Помимо этого перечисляет внешний IP-адрес. Внутренний IP-адрес см. В ответе Брэда Паркса
Винсент,
19

У меня это настроено в точечном файле .aliases для частого поиска ip:

alias ip="dig +short myip.opendns.com @resolver1.opendns.com"
alias localip="ipconfig getifaddr en0"
thibmaek
источник
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, это даст вам адрес локальной сети, а не адрес глобальной сети. Но это может быть полезно для многих целей и не распространяется на сеть.
folex
1

Просто для записи, вы можете сделать bash-скрипт со следующим содержимым, которое даст вам ваш внешний IP-адрес

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
user702846
источник
3
По умолчанию wgetне является частью macOS и должен быть установлен из стороннего источника.
user3439894
Является ли вопрос macOS конкретным? по умолчанию он установлен во многих дистрибутивах Linux.
user702846
Этот сайт посвящен аппаратному и программному обеспечению Apple, поэтому предполагается MacOS и iOS.
grg
Команда macOS по умолчанию для этого была бы при использовании curl:curl -s http://ipecho.net/plain; echo
thibmaek