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?
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?
Respostas:
Use ipconfig getifaddr en1
para conexão sem fio ou ipconfig getifaddr en0
para Ethernet.
Atualização :
ipconfig getifaddr en0
é o padrão para a interface wifi.
ifconfig
mostra todas as interfaces e seus IPs
curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'
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
#!/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
Basta digitar curl ifconfig.me
o terminal.
ipconfig getifaddr en0
é para IP local.
Você pode fazer o seguinte:
Digite ifconfig
ou 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 en0
ou apenas ifconfig en1
para 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 -i
listará 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 scutil
comando 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 scutil
e insira seus próprios comandos nele). O primeiro show
comando 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 show
comando aceita o State:/Network/Interface/<ifname>/IPv4
argumento (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.
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})"
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.
192.168.0.*)
, não a externa exposta à internet.
netstat -nr | grep default
?
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
wget
não faz parte do macOS e precisa ser instalado de uma fonte que não seja da Apple.
curl -s http://ipecho.net/plain; echo