Como encontro meu endereço IP interno?


208

Eu tenho o servidor Ubuntu 12.04 instalado, então não tenho GUI. Quando eu executo o comando ifconfig, não consigo encontrar meu endereço IP interno. Diz inet addr: 127.0.0.1.

Aqui está a saída de ifconfig -a:

eth0   link encap:Ethernet  HWaddr 00:06:4f:4a:66:f0
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1   link encap:Ethernet  HWaddr 00:16:ec:05:c8:9c 
    BROADCAST MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo     Link encap:Local Loopback
    inet addr 127.0.0.1  Mask:255.0.0.0
    inet6 addr:  ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:65536  Metric:1
    RX packets:1800 errors:0 dropped:0 overruns:0 frame:0
    Tx packets:1800 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:143896 (143.b KB)  TX bytes:143896 (143.8 KB)

aqui está o conteúdo de etc / network / interfaces:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Se alguém puder editar isso para mim, o conteúdo de etc / network / interfaces deve estar em linhas separadas.

A saída do host askubuntu.com foi:

;; connection timed out; no servers could be reached.

Eu configurei o owncloud e o webmin há alguns meses e os usei por um mês sem problemas. Acho que a energia foi desligada um dia há 2 meses e nunca liguei o servidor até ontem. Não fiz nada que afetasse a configuração da Internet. Portanto, não sei por que não funciona mais. No que diz respeito à minha topologia de rede, tenho uma placa de rede pci-e para o PC. A linha Ethernet passa da placa de rede para um switch e depois para um modem / roteador a partir daí.


1
@AvatarParto Esses são para interfaces de frente para o acesso público, esta questão é sobre redes internas ...
de Bruno Pereira

Por curiosidade, o que /etc/network/interfacestem nele?
precisa saber é o seguinte

Sei como usar o comando change directory, mas não sei como listar os arquivos uma vez lá, como faria isso?
Cam Jones

lslistará os arquivos em um diretório. ls -ldará uma lista detalhada. Para listar o conteúdo de um diretório específico ls -l /etc/network,. Para mudar para um diretório e listar o conteúdo cd /etc/network ;ls -l. Para ler o conteúdo de etc/network/interfaces(este é um arquivo) sudo pico /etc/network/interfaces. ( picoÉ um editor de texto leve - boa para leitura e edição básica, e menos intimidante do que vi.)
douggro

Respostas:


205

Esses comandos informarão todas as informações da rede

ip add

ou

ifconfig -a

Se, como você diz, fornece apenas 127.0.0.1, existem duas opções:

  1. Sua placa de rede não está conectada ou não é reconhecida pelo sistema

  2. O servidor DHCP da sua rede não está funcionando ou não está conectado


quando eu entro, ele me diz que existem algumas atualizações ou atualizações, então eu presumo que ele precise conversar com o site oficial do ubuntu para saber que ele possui atualizações, então eu acho que minha internet está funcionando.
Cam Jones

@Skateguy tentar abrir askubuntu.com e imprima todos ifconfig -a
kamil

Não tenho GUI, mas estou prestes a digitá-lo.
Cam Jones

1
Como posso responder às perguntas que suas duas opções colocam?
Cam Jones

1
Eu sugeriria a ipopção primeiro , depois a ( obsoleta ) ifconfigdepois.
Campa 23/01

213
hostname -I

Isso fornecerá apenas o endereço IP sem nenhuma informação extra.


16
Perfeito. Tantas respostas excessivamente complicadas (mas não ruins). Essa é simplesmente muito simples.
user1003916

3
Resposta perfeita .. :)
john400

2
De acordo com a página do manual: `-I, --all-ip-address Exibe todos os endereços de rede do host. Esta opção enumera todos os endereços configurados em todas as interfaces de rede. A interface de loopback e os endereços locais de link IPv6 são omitidos. Portanto, isso fornecerá o endereço IP na rede à qual você está conectado, mas também o IP da sua máquina se você a estiver usando como servidor Ethernet ou lxd. No meu caso, ele fornece dois endereços porque eu tenho o lxd: 192.168.0.78 e 10.0.3.1
Sergiy Kolodyazhnyy

6
Sim. No meu caso é mais mal 10.0.2.15 172.18.0.1 172.17.0.1 172.20.0.1 172.21.0.1 172.22.0.1 172.19.0.1porque eu estou correndo alguns contentores Docker;)
Alex


185

Isto é o que eu recomendo atualmente:

ip route get 8.8.8.8 | awk '{print $NF; exit}'

A vantagem desse comando é que você não precisa saber qual interface está usando (eth0? Eth1? Ou talvez wlan0?), Não precisa filtrar endereços de host local, endereços de Docker, túneis de VPN etc. e você sempre obterá o endereço IP atualmente usado para conexões com a Internet naquele momento (importante quando, por exemplo, você estiver conectado com Ethernet e Wi-Fi ou via VPN etc.).

Isso testará não apenas se você tem um IP correto configurado em alguma interface (como na análise da saída de ifconfig), mas também se a tabela de roteamento está configurada para usá-lo corretamente.

Encontrei essa ideia nesta resposta de Collin Anderson .

Eu o uso no script internalip na minha coleção de scripts no GitHub , na qual você pode instalar:

wget https://rawgit.com/rsp/scripts/master/internalip
chmod a+x internalip

e use como:

internalip

ou:

internalip TARGET

e você obterá o seu endereço IP que seria usado para conectar -se ao endereço IP do TARGET . O destino padrão 8.8.8.8é o resolvedor de DNS público do Google e um bom padrão para a Internet.

Mas se você executá-lo com um IP diferente:

internalip 127.2.3.4

Então você receberá:

127.0.0.1

porque esse é o seu endereço IP que seria usado para se conectar com 127.2.3.4 na interface de loopback. É útil quando o seu destino está em uma LAN, VPN ou outra rede especial; nesse caso, outro IP pode ser usado para conexões que não o padrão para acessar a Internet.

IP externo

Para verificar seu endereço IP externo (aquele que os servidores da Internet veem quando você se conecta a eles - que pode ser diferente do endereço IP interno descrito aqui), consulte esta resposta .


1
Esta é uma resposta incrível, obrigado! me salvou muita dor de cabeça! : D
user65165

Este é um truque útil, mas o OP estava perguntando sobre um IP interno; portanto, talvez não seja seguro supor que ele seja roteável para 8.8.8.8.
mc0e

@ mc0e Bom argumento. É por isso que meu script usa um argumento opcional para outro IP - 8.8.8.8é apenas o padrão. Na minha resposta eu usei 127.2.3.4como exemplo. Você pode usar algum IP na sua intranet ou em uma VPN também. O ponto é que você normalmente não tem um endereço IP interno, mas poucos endereços diferentes são usados ​​para destinos diferentes. Dessa forma, você pode encontrar o que é realmente usado para conexões com um determinado destino.
RSP

1
Só para você saber, isso fornece o IP externo no Mac.
OZZIE

19

Eu acho que vale a pena mencionar que a execução de ifconfig junto com a opção -a exibirá todas as interfaces com ou sem interface.

executando ifconfig sozinho, exibirá apenas interfaces com IPs atribuídos.

Aqui está um bom truque que você pode usar para exibir apenas IPs usando Perl.

# ifconfig | perl -nle'/dr:(\S+)/ && print $1'
192.168.1.100
127.0.0.1

Sua placa de rede é reconhecida pelo sistema, por isso está aparecendo eth0 e eth1

Aqui está uma maneira rápida de atribuir IP à sua interface, use IP / sub-rede válido de acordo.

 ifconfig eth0 192.168.1.200/24 up 

então precisamos adicionar uma rota padrão

route add default gw 192.168.1.1

melhor,


1
Eu tentaria esse método, mas você precisará quebrá-lo um pouco mais para que eu entenda, como em como encontrar ou conhecer um IP, sub-rede e uma rota padrão válidos.
Cam Jones

essa é uma atribuição de IP estático para sua interface de rede, ou seja, se você estiver atrás de um roteador com sub-rede 192.168.1.0/24, poderá executar ping em um ip ex. 192.168.1.200 e se você não receber resposta, vá em frente e use ifconfig interface_name IP_ADDRESS / MASK up Seu gw padrão precisa ser adicionado após a atribuição do IP.
user1007727

8

Este comando mostrará todos os endereços IP de um único dispositivo:

dev=eth0
ip addr show $dev | awk '/inet/ {print $2}' | cut -d/ -f1

Ele imprimirá uma ou duas linhas de saída. O primeiro é o endereço inet / IPv4 e o outro é inet6 / IPv6 se o seu sistema estiver configurado para suportar isso.


6

Caso o ifconfigcomando não exiba o endereço IP, existe uma maneira muito simples e fácil de descobrir o endereço IP da máquina Ubuntu através da GUI. Siga os passos abaixo:

Clique no ícone de rede na área de notificação e clique em Informações da conexão . Opções do ícone de rede

Isso abre uma janela com algumas informações, incluindo o endereço IP. Informações de endereço IP


1

Já existem muitas boas respostas para você escolher, mas pensei em apontar aspectos que geralmente são, mas não necessariamente usados ​​com o fantoche, para coletar vários fatos sobre o sistema. A principal vantagem do facter é que dá saída limpa agradável que poupa-lhe toda a manipulação com grep, sed, awk, cut, perl, etc. Ele não vai dizer-lhe que a relação que você está interessado, mas se você sabe disso, então o A seguir, é fornecido o IP sem outro problema para limpar:

facter ipaddress_eth0 

1

comando ip

Aqui está uma variação no ip addrcaminho.

iptem a -oopção que permite colocar todas as informações em uma única linha - isso é útil para analisar com ferramentas como awkou perl. Em combinação com a -4opção, veremos apenas endereços IPv4. Assim, a saída seria algo como isto (note - substitua wlan7 pela interface que você deseja verificar):

$ ip -4 -o addr show wlan7
3: wlan7    inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic wlan7\       valid_lft 85654sec preferred_lft 85654sec

Como você pode ver, o endereço IP é a quarta coluna / palavra na saída. O restante é um simples exercício de análise através da ferramenta de sua escolha. Aqui, estou usando python:

ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 

A mesma coisa, apenas com a <<<substituição de string e comando aqui$()

python -c "import sys;print sys.stdin.readlines()[0].split()[3]"  <<< $(ip -4 -o addr show wlan7)

Pessoalmente, eu tenho isso salvo como uma boa função na minha ~/.bashrcdigitação para menos.

wlan_ip() {
    ip -4 -o addr show wlan7 | python -c "import sys;print sys.stdin.readlines()[0].split()[3]" 
} 

A versão de Perl e Ruby é um pouco menor:

$ ip -4 -o addr show  wlan7 | perl -lane 'print $F[3]'                         
192.168.0.78/24

$ ip  -4 -o addr show wlan7 | ruby -n -e 'print $_.split()[3]'                 
192.168.0.78/24

Wireshark

Se você está familiarizado com o uso de ferramentas de análise de rede, provavelmente sabe que para obter seu endereço IP, tudo o que você precisa fazer é limpar o cache do navegador, iniciar a captura do Wireshark na interface específica e procurar GETpacotes HTTP sendo transmitidos. A coluna de destino mostrará seu endereço IP

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.