Como encontro meu endereço IP na linha de comando?

159

Eu sei que você pode fazer ifconfig | grep inet, mas isso mostra vários endereços IPv4. Como obtenho o específico para SSHing et al?

JShoe
fonte
O que você está procurando não é o seu endereço IP do Mac, mas o endereço IP público que o seu ISP atribuiu à interface da Internet do seu roteador.
dan

Respostas:

168

Use ipconfig getifaddr en1para conexão sem fio ou ipconfig getifaddr en0para Ethernet.

Atualização :

ipconfig getifaddr en0 é o padrão para a interface wifi.

daviesgeek
fonte
7
Isso mostra o meu endereço IP interno (para o meu roteador) (por exemplo, 192.168.1.xxx), não o endereço IP externo. (Como fazem a maioria das outras respostas abaixo.)
ShreevatsaR
2
Não funcionou para mim :(
Naveed Abbas 13/16
2
ifconfigmostra todas as interfaces e seus IPs
Aralar
4
eco IP externo:curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
grigb
30
Ele mudou durante anos, 'ipconfig getifaddr en0' é padrão para interface de wi-fi
Marek Szmalc
98

O seguinte funciona para mim no 10.8 e no 10.10 Yosemite.

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

Se você achar que o acima fornece mais de uma resposta, salve o seguinte em um script e execute-o

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
Brad Parks
fonte
3
Deve ser a resposta aceita na minha opinião, pois não requer nenhuma especificação com fio ou sem fio.
Erik Nomitch
@ErikNomitch exceto que ele me dá 2 com esta resposta
Zach Lysobey
Ah, eu me retiro então. @ZachLysobey
Erik Nomitch
essa é a melhor abordagem geral, mas às vezes é preciso fazer um pouco mais de grepping antes do awk para obter a resposta certa e a resposta certa pode variar.
uchuugaka 02/09
Eu adicionei um script que espero resolver esse problema .. fyi!
Brad Parks
43

Basta digitar curl ifconfig.meo terminal.

Kcidkcus
fonte
1
Por que o voto negativo? Embora seja um IP externo, o comando é válido e funciona para meus logins ssh.
CousinCocaine
5
Este é o endereço IP público e o que eu estava procurando. ipconfig getifaddr en0é para IP local.
abriggs
No HighSierra, tive que executar isso como SUDO. Além disso, lista o endereço IP externo. Para o endereço IP interno ver a resposta de Parques Brad
Vincent
19

Eu tenho isso configurado em um .aliases dotfile para pesquisa frequente de ip:

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

Você pode fazer o seguinte:

Digite ifconfigou ifconfig -a. Este comando mostra a lista de interfaces, juntamente com seus endereços IP e MAC (o último apenas se aplicável). Você também pode digitar ifconfig en0ou apenas ifconfig en1para a configuração de uma interface específica (como alguém disse em suas respostas, en0 normalmente é a Ethernet com fio enquanto en1 é a interface WiFi).

Como alternativa, netstat -ilistará todas as interfaces e mostrará os endereços IP que você atribuiu a cada uma delas.

Normalmente, quando você tem um daemon SSH em execução em uma caixa, ele escuta todas as interfaces disponíveis, por exemplo. você pode usar qualquer endereço IP configurado em sua máquina para conectar-se a ela via SSH (isso, obviamente, está sujeito às regras do firewall). Se você procura o que o sistema operacional chama de interface primária e endereço IP primário, pode usar o scutilcomando da seguinte maneira:

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
  }
}

Observe que o acima, embora seja um comando de linha de comando, também é interativo (para que você execute scutile insira seus próprios comandos nele). O primeiro showcomando informa o nome da interface principal do sistema operacional (ou seja, essa é a que está no topo da lista na janela Preferências do sistema / Preferências de rede), bem como o endereço IP do seu roteador padrão. O segundo showcomando aceita o State:/Network/Interface/<ifname>/IPv4argumento (neste caso en0) e fornece os endereços IP atribuídos a ele. Você está procurando o endereço na matriz Addresses, as outras duas entradas são endereços de broadcast e máscaras de rede.

Espero que ajude, mas se alguma coisa não estiver clara, me avise.

Mike
fonte
1
Obrigado por esta resposta. Eu escrevi um script rápido para obter o IP da sua interface principal: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_ 14/01/15
4

Para obter o endereço IP do seu computador voltado para a Internet, aqui está uma receita de trabalho:

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

Deverá funcionar mesmo quando você tiver várias interfaces ativas, mesmo quando você tiver interfaces, você não sabe qual é realmente o gateway padrão.

dan
fonte
Isto torna-se o endereço IP da rede interna (por exemplo: 192.168.0.*), não a externa exposta à internet.
SimplGy
Obrigado por esse feedback. Você poderia me dizer em qual versão do sistema operacional você é? Você poderia me fornecer a saída de netstat -nr | grep default?
dan
Isso obtém o IP da interface que atende ao tráfego de entrada / saída. Se você está atrás do NAT, isso fornecerá o seu endereço LAN, não o endereço WAN. Mas pode ser útil para muitos propósitos e não alcança a rede.
folex
1

Apenas para o registro, você pode criar um script bash com o seguinte conteúdo, que fornece seu endereço IP externo

#!/bin/bash    
wget -qO - http://ipecho.net/plain; echo
user702846
fonte
3
Por padrão, wgetnão faz parte do macOS e precisa ser instalado de uma fonte que não seja da Apple.
user3439894 7/01
A questão macOS é específica? Por padrão, é instalado em muitas distribuições Linux.
user702846 7/01
Este site é sobre hardware e software da Apple, portanto, presume-se macOS e iOS.
grg
O comando padrão do macOS para isso seria usar curl:curl -s http://ipecho.net/plain; echo
thibmaek