Como descobrir qual interface estou usando para conectar à internet?

34

Eu tenho eth0 e wlan0 de acordo com ifconfig e posso ping google.com . Como eu posso descobrir (com um usuário normal, não com o root) qual interface é ativa , como em qual interface o ping (ou o que seja, ping não é obrigatório) usa?

NOTA: usando o Ubuntu 11.04 ou o Fedora 14

    
por LanceBaynes 14.06.2011 / 08:25

8 respostas

42

Você pode usar route para encontrar sua rota padrão:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

A coluna Iface na linha com destino default informa qual interface é usada.

    
por 14.06.2011 / 09:04
22

Minha versão é basicamente baseada em esta e isso :

route | grep '^default' | grep -o '[^ ]*$'

E isso, experimentalmente , para macOS:

route -n get default | grep 'interface:' | grep -o '[^ ]*$'
    
por 04.09.2016 / 13:43
5

A execução de ifconfig fornecerá as informações necessárias.

A interface ativa terá um inet addr e mostrará um registro de dados transmitidos, assim:

RX bytes:1930741 (1.8 Mb)  TX bytes:204768 (199.9 Kb)

Você também pode usar o comando ip addr e qualquer interface inativa será designada como: NO-CARRIER .

    
por 14.06.2011 / 08:48
3

Obtenha a interface de rede padrão normalmente usada para rotear para a Internet "restante" em oposição à DMZ, rede privada, host da VM, etc., que geralmente são roteados explicitamente.

$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0
    
por 10.08.2016 / 19:07
3

Em sistemas GNU / Linux:

#!/bin/sh

# host we want to "reach"
host=google.com

# get the ip of that host (works with dns and /etc/hosts. In case we get  
# multiple IP addresses, we just want one of them
host_ip=$(getent ahosts "$host" | awk '{print $1; exit}')

# only list the interface used to reach a specific host/IP. We only want the part
# between dev and src (use grep for that)
ip route get "$host_ip" | grep -Po '(?<=(dev )).*(?= src| proto)'
    
por 30.10.2014 / 19:29
2

O comando ip route ls fornecerá uma lista de rotas ativas e suas fontes:

caleburn: ~/ >ip route ls
192.168.10.0/24 dev eth0  proto kernel  scope link  src 192.168.10.7 
default via 192.168.10.254 dev eth0 
    
por 14.06.2011 / 13:09
2

Um forro:

ip route get 8.8.8.8 | sed -n 's/.*dev \([^\ ]*\) table.*//p'

    
por 03.10.2017 / 20:55
1

Use o comando:

[root@linux1 network-scripts]# route|grep default | awk '{print $8}'
enp0s3
    
por 17.08.2016 / 18:46

Tags