Ubuntu ip, ping, ss
Três ferramentas respondem quase todas as perguntas sobre a rede: ip mostra as placas, os endereços e as rotas; ping testa se um destino responde; ss lista as conexões e as portas abertas. Nesta aula você vai ler a saída de cada uma, linha por linha.
- Ler a saída completa do
ip ae a versão resumidaip -br a. - Ver rotas, gateway e vizinhos da rede com
ip reip neigh. - Usar o
pingcom limite de tentativas e entender a estatística no final. - Descobrir quais portas estão abertas e qual programa está usando cada uma com
ss.
Se ainda não leu Conceitos de Rede, comece por lá: esta aula usa IP, máscara, gateway e porta o tempo todo. Os exemplos são da máquina fictícia notebook, ligada no Wi-Fi.
O comando ip
O ip é a ferramenta oficial de rede do Linux. Ele tem subcomandos, e cada um cuida de uma parte:
| Subcomando | Abreviação | Mostra |
|---|---|---|
ip address | ip a | Endereços IP de cada placa |
ip route | ip r | Rotas (por onde cada destino sai) |
ip link | ip l | As placas em si: ligadas, desligadas, endereço físico (MAC) |
ip neighbour | ip n | Vizinhos: outros aparelhos que o computador já viu na rede |
Qualquer abreviação que não seja ambígua funciona: ip a, ip addr e ip address são o mesmo comando.
Ver os endereços: ip -br a
Comece pela versão resumida. Ela mostra uma linha por placa:
- ip
- A ferramenta de rede.
- -br
- Opção brief, "resumido": uma linha por placa.
- a
- Subcomando
address: endereços.
$ ip -br a lo UNKNOWN 127.0.0.1/8 ::1/128 enp3s0 DOWN wlp2s0 UP 192.168.0.15/24 fe80::5a1c:3b2d:8e4f:9a10/64
Cada linha tem três colunas: o nome da placa, o estado e os endereços. Os nomes seguem um padrão:
| Nome | O que é |
|---|---|
lo | Loopback: a placa virtual que o computador usa para falar consigo mesmo. Sempre existe. |
enp3s0, eno1 | Placa de cabo (Ethernet). O "en" vem de Ethernet. |
wlp2s0, wlx… | Placa Wi-Fi. O "wl" vem de wireless, "sem fio". Adaptadores USB costumam ter nomes como wlx seguido do endereço físico. |
docker0, virbr0, wg0 | Placas virtuais criadas pelo Docker, por máquinas virtuais ou por VPN. |
Na coluna de estado, UP quer dizer ligada e com conexão, e DOWN quer dizer desligada ou sem cabo. O lo aparece como UNKNOWN, o que é normal.
Com cores: -c
Acrescente -c (de color) para colorir: estados em verde ou vermelho, endereços em destaque. Fica mais fácil de ler na tela:
$ ip -br -c a
A saída completa: ip a
Sem o -br, o ip a mostra todos os detalhes. Assusta no começo, mas cada linha tem um significado:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 « placa 1: loopback
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo « IPv4 do localhost
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000 « NO-CARRIER: sem cabo
link/ether 02:ab:cd:15:00:01 brd ff:ff:ff:ff:ff:ff « endereço físico (MAC)
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 « Wi-Fi ligado
link/ether 02:ab:cd:15:00:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.15/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp2s0 « o seu IPv4
valid_lft 3178sec preferred_lft 3178sec « o empréstimo do IP vence em ~53 min
inet6 fe80::5a1c:3b2d:8e4f:9a10/64 scope link noprefixroute « IPv6 local
valid_lft forever preferred_lft forever
| Pedaço | Significado |
|---|---|
3: wlp2s0: | Número e nome da placa. |
<…UP,LOWER_UP> | Sinais de estado. UP: a placa foi ligada pelo sistema. LOWER_UP: há conexão física (cabo ou Wi-Fi associado). NO-CARRIER: ligada, mas sem cabo ou sinal. |
mtu 1500 | Tamanho máximo de cada pacote, em bytes. 1500 é o padrão. |
state UP | Estado geral: UP funcionando, DOWN parada. |
link/ether 02:ab:… | Endereço MAC: a "placa do carro" da interface, gravada pelo fabricante. |
inet 192.168.0.15/24 | O endereço IPv4 e a máscara. |
brd 192.168.0.255 | Endereço de broadcast: mensagem para todos do bairro. |
dynamic | O IP veio do DHCP, entregue pelo roteador. Um IP fixo não tem essa palavra. |
valid_lft 3178sec | Por quanto tempo o IP emprestado ainda vale. O sistema renova sozinho antes de vencer. |
inet6 … | Endereço IPv6. scope link (começa com fe80:) só vale na rede local. |
Só uma placa
Para ver só uma placa, coloque show e o nome no final:
$ ip a show wlp2s0 $ ip -br a show wlp2s0 wlp2s0 UP 192.168.0.15/24 fe80::5a1c:3b2d:8e4f:9a10/64
Formas diferentes de ver o seu IP
| Forma | Comando | Quando usar |
|---|---|---|
| Só os números | hostname -I | Para copiar o IP rápido, ou usar num script |
| Resumo por placa | ip -br a | No dia a dia: mostra estado e IP de cada placa |
| Detalhes completos | ip a | Para investigar: MAC, validade do DHCP, flags |
| Pelo NetworkManager | nmcli device show wlp2s0 | Quando quer IP, gateway e DNS juntos |
| Pela interface gráfica | Configurações → Wi-Fi → engrenagem | Quando não quer abrir o terminal |
$ hostname -I 192.168.0.15 2804:14c:5b80:8a1f::1a2b
Rotas e gateway: ip r
A tabela de rotas diz por onde cada destino sai. A linha que importa no dia a dia é a default: o caminho para a internet.
$ ip r default via 192.168.0.1 dev wlp2s0 proto dhcp src 192.168.0.15 metric 600 « saída para a internet: o roteador 192.168.0.0/24 dev wlp2s0 proto kernel scope link src 192.168.0.15 metric 600 « a rede local: entrega direto
Leia a primeira linha assim: "para qualquer destino (default), mande pelo 192.168.0.1, usando a placa wlp2s0". A explicação de cada pedaço está em Conceitos de Rede.
Por onde sai um destino específico?
ip r get responde qual rota seria usada para chegar a um endereço:
$ ip r get 8.8.8.8
8.8.8.8 via 192.168.0.1 dev wlp2s0 src 192.168.0.15 uid 1000
cache
Placas e vizinhos: ip link e ip neigh
ip -br link mostra as placas com o endereço físico (MAC), sem os IPs:
$ ip -br link lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> enp3s0 DOWN 02:ab:cd:15:00:01 <NO-CARRIER,BROADCAST,MULTICAST,UP> wlp2s0 UP 02:ab:cd:15:00:02 <BROADCAST,MULTICAST,UP,LOWER_UP>
ip neigh mostra os aparelhos da rede local com os quais o computador já conversou, com o MAC de cada um:
$ ip neigh 192.168.0.1 dev wlp2s0 lladdr 02:ab:cd:00:00:10 REACHABLE « o roteador, respondendo agora 192.168.0.31 dev wlp2s0 lladdr 02:ab:cd:00:00:31 STALE « um aparelho visto há algum tempo
Ligar e desligar uma placa
Dá para desligar e ligar uma placa com ip link set. Isso exige sudo:
$ sudo ip link set wlp2s0 down $ sudo ip link set wlp2s0 up
Se você está conectado por SSH através de uma placa e a desliga, perde a conexão na hora e não consegue religá-la remotamente. No desktop, prefira desligar e ligar o Wi-Fi pelo menu do sistema ou com nmcli (veja Configurar a Rede). Mudanças feitas com ip se perdem ao reiniciar.
ping: o destino responde?
O ping envia um pacote pequeno e espera a resposta, como bater na porta e esperar alguém dizer "oi". Ele mede se o destino responde e quanto tempo leva.
- ping
- O programa.
- -c 3
- count, "contagem": envia 3 pacotes e para. Sem isso, o ping roda até você apertar Ctrl+C.
- 192.168.0.1
- O destino: um IP ou um nome.
$ ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=3.12 ms « resposta 1, em 3 milissegundos 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=2.87 ms 64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=4.05 ms --- 192.168.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms « enviados, recebidos, perda rtt min/avg/max/mdev = 2.870/3.346/4.050/0.507 ms « tempo mínimo/médio/máximo
| Pedaço | Significado |
|---|---|
icmp_seq=1 | Número do pacote. Se pular números, pacotes se perderam no caminho. |
ttl=64 | "Tempo de vida": quantos roteadores o pacote ainda podia atravessar. |
time=3.12 ms | Tempo de ida e volta. Na rede de casa: poucos ms. Até a internet: 10 a 100 ms. |
0% packet loss | Nenhum pacote perdido. Perda constante indica Wi-Fi fraco ou rede congestionada. |
O que o ping devolve
O código de saída diz o resultado, o que é útil em scripts:
$ ping -c 1 192.168.0.1 > /dev/null; echo $? 0 « respondeu $ ping -c 1 -W 1 192.168.0.250 > /dev/null; echo $? 1 « ninguém respondeu $ ping -c 1 servidro.local; echo $? ping: servidro.local: Nome ou serviço desconhecido 2 « nem achou o nome
Opções úteis do ping
| Opção | Faz | Exemplo |
|---|---|---|
-c N | Envia N pacotes e para | ping -c 5 ubuntu.com |
-i S | Intervalo entre pacotes, em segundos | ping -i 0.5 192.168.0.1 |
-W S | Quanto tempo esperar cada resposta | ping -c 1 -W 1 192.168.0.9 |
-4 / -6 | Força IPv4 ou IPv6 | ping -4 ubuntu.com |
-q | Mostra só o resumo final | ping -q -c 10 8.8.8.8 |
Muitos servidores e firewalls ignoram o ping de propósito. Para testar um site, use curl -I; para testar uma porta, use nc -zv (as duas formas estão abaixo).
ss: conexões e portas abertas
O ss (de socket statistics, "estatísticas de sockets") lista as conexões de rede. Um socket é a "tomada" que um programa usa para falar pela rede. A pergunta mais comum é "quais portas estão abertas esperando conexão?":
- ss
- O programa.
- -t
- Conexões TCP.
- -u
- Conexões UDP.
- -l
- Só as que estão listening, "escutando": portas abertas esperando alguém.
- -n
- Mostra números (
22), em vez de nomes (ssh). - -p
- Mostra o process, o programa dono de cada porta.
$ sudo ss -tulpn
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.54:53 0.0.0.0:* users:(("systemd-resolve",pid=612,fd=16)) « DNS local
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=612,fd=14))
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* users:(("avahi-daemon",pid=790,fd=12))
tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=612,fd=15))
tcp LISTEN 0 4096 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=845,fd=7)) « impressão, só local
tcp LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1102,fd=3)) « SSH aberto para a rede
tcp LISTEN 0 4096 [::]:22 [::]:* users:(("sshd",pid=1102,fd=4))
| Coluna | Significado |
|---|---|
Netid | Tipo: tcp ou udp. |
State | LISTEN: porta TCP esperando conexão. UNCONN: socket UDP aberto (UDP não "conecta"). |
Local Address:Port | Em qual endereço e porta o programa escuta. Veja a tabela abaixo. |
Peer Address:Port | Quem está do outro lado. * = qualquer um. |
Process | Programa, PID e descritor. Só aparece para todos os programas com sudo. |
O endereço local diz quem pode se conectar:
| Endereço local | Quem alcança |
|---|---|
127.0.0.1:631 | Só o próprio computador. Seguro. |
0.0.0.0:22 | Qualquer máquina da rede (todas as placas IPv4). |
[::]:22 | Qualquer máquina, pelo IPv6. |
192.168.0.15:8080 | Só quem chega por essa placa específica. |
Conexões ativas agora
Sem o -l, e filtrando pelo estado established, você vê as conexões abertas neste momento:
$ ss -tn state established Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 192.168.0.15:49822 185.125.190.20:443 « o navegador falando com ubuntu.com 0 0 192.168.0.15:41736 140.82.112.25:443
Quem está usando a porta 8080?
Filtros do ss seguem a forma 'sport = :PORTA' (source port, porta de origem):
$ sudo ss -tlpn 'sport = :8080'
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 5 0.0.0.0:8080 0.0.0.0:* users:(("python3",pid=4410,fd=3))
ss | grep
sudo ss -tulpn | grep 8080 dá o mesmo resultado e é mais fácil de lembrar. O grep filtra as linhas que contêm o texto (veja grep).
Testar uma porta de outra máquina: nc -zv
O ss mostra as portas da sua máquina. Para saber se a porta de outra máquina está acessível, use o nc (netcat). -z só testa, sem enviar dados, e -v mostra o resultado:
$ nc -zv 192.168.0.50 22 Connection to 192.168.0.50 22 port [tcp/ssh] succeeded! « porta aberta $ nc -zv 192.168.0.50 3306 nc: connect to 192.168.0.50 port 3306 (tcp) failed: Connection refused « ninguém escutando ali
Tutoriais antigos usam netstat -tulpn e ifconfig. Eles são do pacote net-tools, que é antigo e não vem instalado. Use ss e ip: as opções do ss são quase as mesmas do netstat.
Quando não funciona
$ ip -br a lo UNKNOWN 127.0.0.1/8 ::1/128 enp3s0 DOWN wlp2s0 DOWN
O que aconteceu: o Wi-Fi está desligado ou não conectou a nenhuma rede. Se a placa de cabo aparece como NO-CARRIER no ip a, o cabo está solto ou com defeito.
Como resolver: ligue o Wi-Fi e escolha a rede pelo menu do canto superior direito, ou com nmcli device wifi connect (veja Wi-Fi). Se o Wi-Fi não liga ou nem aparece, veja Wi-Fi que Não Funciona.
$ ss -tlpn State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 0.0.0.0:22 0.0.0.0:* « Process vazio LISTEN 0 4096 127.0.0.1:631 0.0.0.0:*
O que aconteceu: por segurança, um usuário comum só vê o nome dos próprios programas. Os serviços do sistema pertencem ao root.
Como resolver: rode com sudo ss -tlpn.
$ ping -c 3 192.168.0.50 PING 192.168.0.50 (192.168.0.50) 56(84) bytes of data. From 192.168.0.15 icmp_seq=1 Destination Host Unreachable « ninguém com esse IP na rede From 192.168.0.15 icmp_seq=2 Destination Host Unreachable From 192.168.0.15 icmp_seq=3 Destination Host Unreachable --- 192.168.0.50 ping statistics --- 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2036ms
O que aconteceu: "Destination Host Unreachable" significa que nenhum aparelho da rede local respondeu por esse IP: ele está desligado, mudou de IP ou o número está errado. Se não aparece nenhuma mensagem e só o resumo com 100%, o aparelho pode existir mas bloquear o ping.
Como confirmar: veja se o aparelho aparece em ip neigh e confira o IP dele no próprio aparelho.
O que aconteceu: o ifconfig é antigo e não vem mais instalado no Ubuntu.
Como resolver: use ip a. Se precisar dele por causa de um tutorial antigo, instale com sudo apt install net-tools.
Referência de opções
ip
| Comando | Descrição |
|---|---|
ip a / ip -br a | Endereços, completo ou resumido |
ip -br -c a | Resumido e colorido |
ip a show PLACA | Só uma placa |
ip -4 a / ip -6 a | Só IPv4 / só IPv6 |
ip r | Tabela de rotas |
ip r get IP | Qual rota seria usada para um destino |
ip -br link | Placas e MAC |
ip neigh | Vizinhos da rede local |
sudo ip link set PLACA up|down | Liga ou desliga uma placa (temporário) |
ss
| Opção | Descrição |
|---|---|
-t / -u | TCP / UDP |
-l | Só portas escutando |
-n | Números em vez de nomes |
-p | Mostra o programa (use com sudo) |
-a | Todas: escutando e conectadas |
-s | Resumo com totais |
state established | Só conexões ativas |
'sport = :80' | Filtra pela porta local |
Exercícios
1. IP resumido
Complete para ver uma linha por placa, com o IP de cada uma:
2. Portas abertas
Complete para listar as portas TCP e UDP que estão escutando, com números e o nome do programa:
3. Cinco pings
Complete para enviar exatamente 5 pings ao 8.8.8.8:
4. Na saída do ss, uma porta aparece como 127.0.0.1:631. Quem consegue se conectar a ela?
5. No ip a, a placa de cabo mostra NO-CARRIER. O que isso indica?
Resumo
ip -br amostra placas e IPs;ip amostra todos os detalhes;ip rmostra o gateway.UP,LOWER_UP= ligada e conectada;NO-CARRIER= sem cabo ou sinal.ping -c Ntesta se um destino responde; código 0 = respondeu, 1 = sem resposta, 2 = erro (como nome inexistente).sudo ss -tulpnlista as portas abertas e o programa dono de cada uma;127.0.0.1= só local,0.0.0.0= toda a rede.- Para testar a porta de outra máquina:
nc -zv IP PORTA.