Estou tentando usar apenas o endereço IP (inet) como parâmetro em um script que escrevi.
Existe uma maneira fácil em um terminal Unix de obter apenas o endereço IP, em vez de procurar ifconfig
?
shell
unix
ip-address
Pedreiro
fonte
fonte
ip -o address
é muito mais fácil de trabalhar do que a saída deip address
.Respostas:
Você pode escrever um script que retorna apenas o IP como:
Para MAC:
Ou para sistema linux
fonte
hostname -i
no meu ele retorna:::1 127.0.1.1 192.168.1.100
hostname
não é portátil.Isso fornecerá todas as interfaces IPv4, incluindo o loopback 127.0.0.1:
Isso mostrará apenas
eth0
:E desta forma você pode obter endereços IPv6:
Apenas
eth0
IPv6:fonte
grep -oP
falha no busybox v1.24.1: opção inválida - P-P
mudar para expressões regulares Perl ou do contrário não podemos usar o(?<=inet\s)
token lookbehind . Você pode obter um resultado semelhante executandogrep -oe 'inet [0-9\.]\+'
ou,grep -oe 'inet6 [0-9a-f:]\+'
mas dessa forma não consigo me livrar da primeira palavra. Nosman grep
relatórios do SuSE , esse-P
sinalizador é experimental.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
Geralmente, nunca é garantido que um sistema terá apenas um endereço IP, por exemplo, você pode ter conexões ethernet e wlan e, se tiver uma conexão VPN ativa, terá ainda outro endereço IP.
Linux
No Linux,
hostname -I
irá listar o (s) endereço (s) IP atual (is). Contar com ele sempre retornando apenas um endereço IP provavelmente não funcionará como esperado em alguns cenários (ou seja, um link VPN está ativo), então uma maneira mais confiável seria converter o resultado em uma matriz e, em seguida, fazer um loop sobre os elementos:OSX
No OSX, se você conhece a interface , pode usar:
que retornará apenas o endereço IP.
Ou você pode fazer um loop em nomes de interface possíveis, começando com um sufixo, ou seja
en
:Além disso, obter o endereço IP torna-se não determinístico no caso de serem estabelecidas conexões de cabo e wifi, quando uma máquina tem mais de uma interface Ethernet ou quando túneis VPN estão presentes.
Obtendo o IP externo
Se você precisar do IP externo, poderá consultar um serviço em modo texto, por exemplo
curl https://ipecho.net/plain
, retornaria um IP externo em texto simples .E uma maneira ainda mais rápida de obter o IP externo é consultar um servidor DNS conhecido:
fonte
Este comando fornecerá o endereço IP exato que você deseja no Ubuntu.
fonte
Nas últimas versões do Ubuntu ( 14.04 - 16.04 ), este comando fez o truque para mim.
fonte
print $1
pode ou não dar o resultado correto.Se você tiver um ambiente limitado, pode usar este comando:
fonte
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. Para v4 e v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
:ip -4 addr show | grep 192
Para obter apenas o endereço IP no Mac OS X, você pode digitar o seguinte comando:
fonte
O comando
ifconfig
está desativado e você deve usarip
comando no Linux.Além disso
ip a
fornecerá escopo na mesma linha do IP, para que seja mais fácil de usar.Este comando mostrará seu IP global (externo):
Todo IPv4 (também 127.0.0.1):
Todo IPv6 (também :: 1):
fonte
Podemos simplesmente usar apenas 2 comandos (ifconfig + awk) para obter apenas o IP (v4) que desejamos:
No Linux, presumindo que obterá o endereço IP da
eth0
interface, execute o seguinte comando:No OSX, supondo que obterá o endereço IP da
en0
interface, execute o seguinte comando:Para saber nosso IP público / externo, adicione esta função em
~/.bashrc
Então corra,
whatismyip
fonte
Para imprimir apenas o endereço IP de
eth0
, sem outro texto:Para determinar sua interface primária (porque pode não ser "eth0"), use:
As duas linhas acima podem ser combinadas em um único comando como este:
fonte
Eu queria algo simples que funcionasse como um apelido do Bash. Descobri que
hostname -I
funciona melhor para mim (hostname v3.15).hostname -i
retorna o IP de loopback, por algum motivo, mashostname -I
me dá o IP correto para wlan0, e sem ter que canalizar a saída através de grep ou awk. Uma desvantagem é quehostname -I
produzirá todos os IPs, se você tiver mais de um.fonte
Isso funcionaria em um Mac:
Isso resolveu
ping 192.168.1.2
na minha máquina.Dica profissional :
$(...)
significa executar o que quer que esteja entre parênteses em um subshell e retornar isso como o valor.fonte
Em
man hostname
há ainda mais fácil caminho que excluindo automaticamente loopback IP e mostrando apenas o espaço lista de todos atribuídos a endereços IP de host separados:fonte
Você também pode usar o seguinte comando:
NOTA: Isso só funcionará se você tiver conectividade com a Internet.
fonte
Poucas respostas parecem estar usando a mais recente
ip
de comandos (substituto paraifconfig
) então aqui é aquele que usaip addr
,grep
eawk
simplesmente imprimir o endereço IPv4 associados àwlan0
interface:Embora não seja a solução mais compacta ou sofisticada, é (sem dúvida) fácil de entender (veja a explicação abaixo) e modificar para outros fins, como obter os últimos 3 octetos do endereço MAC como este:
Explicação:
ip addr show wlan0
informações de saída associadas à interface de rede nomeadawlan0
, que deve ser semelhante a esta:Próxima
grep inet
filtra as linhas que não contêm "inet" (IPv4 e IPv6 configuração) egrep -v inet6
filtra as linhas restantes que fazer conter "inet6", o que deve resultar em uma única linha como esta:Por fim, o primeiro
awk
extrai o campo "172.18.18.1/24" e o segundo remove a abreviação da máscara de rede, deixando apenas o endereço IPv4.Além disso, acho que vale a pena mencionar que, se você estiver fazendo scripts, muitas vezes existem muitas ferramentas mais ricas e / ou mais robustas para obter essas informações, que você pode querer usar. Por exemplo, se estiver usando Node.js existe
ipaddr-linux
, se estiver usando Ruby, existelinux-ip-parser
, etc.Veja também /unix/119269/how-to-get-ip-address-using-shell-script
fonte
Use o seguinte comando:
fonte
Aqui está minha versão, na qual você pode passar uma lista de interfaces, ordenadas por prioridade:
Portanto, se eu estiver conectado com VPN, Wifi e ethernet, meu endereço VPN (na interface tap0) será retornado. O script funciona em Linux e osx, e pode receber argumentos se você quiser sobrescrever IFLIST
Observe que se você quiser usar IPV6, terá que substituir 'inet' por 'inet6'.
fonte
Sempre acabo precisando disso nos momentos mais inesperados e, sem falhar, acabo procurando tópicos como esse no SO. Então, escrevi um script simples para obter endereços IPv4 via netstat, chamado
echoip
- você pode encontrá-lo aqui . O bash para endereços de rede é semelhante a este, mas também obtém seu endereço público de ipecho.net:O
echoip
script produz uma saída como esta:fonte
use este script de uma linha:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
mac e linux (testado no Ubuntu) ambos funcionam.fonte
ifconfig en0
ouifconfig eth1
etc se souber a interface que deseja :)Prefiro não usar
awk
e tal em scripts ..ip
tem a opção de saída em JSON.Se você deixar de fora
$interface
, obterá todos os endereços IP:fonte
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
mostra todos os seus ips
fonte
No Redhat de 64 bits, esse problema resolveu para mim.
fonte
fonte
Ao procurar seu endereço IP externo em um host com NAT, algumas respostas sugerem o uso de métodos baseados em HTTP, como
ifconfig.me
por exemplo:Ao longo dos anos, tenho visto muitos desses sites irem e virem, acho esse método baseado em DNS mais robusto:
Eu tenho este apelido útil em meu
~/.bashrc
:fonte
Essas duas maneiras funcionaram para mim:
Para obter o endereço IP de sua interface eth0. Substitua eth0 no exemplo abaixo pelo nome de sua interface.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Usando hostname: Isso lhe dará o inet, ou seja, IPAddress do seu etho. usando -I fornecerá o valor inet de todas as interfaces onde esse valor estiver presente.
hostname -i
fonte
Isso retorna apenas o endereço IP do seu sistema.
fonte
Eu usaria
Hostname -L
para obter apenas o IP para usar como variável em um script.fonte
hostname -i
ouhostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. O capitalH
está errado 2. Não-L