İnternete bağlanmak için hangi arayüzü kullandığımı nasıl öğrenebilirim?


47

İfconfig 'e göre eth0 ve wlan0' a sahibim ping google.com. Hangi arayüzün etkin olduğunu (normal bir kullanıcıyla, root ile değil) hangi arayüzün aktif olduğunu , ping'in hangi arayüzde (veya ne şekilde olursa olsun, ping zorunlu değildir) nasıl kullandığını nasıl öğrenebilirim?

NOT: Ubuntu 11.04 veya Fedora 14'ü kullanma


2
Aşağıdaki çözümler, çıkarımı kendin yapmanı istiyor, ki bu doğru görünmüyor. (Ve herkes yönlendirme tabloları inanılmaz basit bak!) Windows eşdeğer arıyorum da, görünen "ip route olsun <ip-adresi>" hangi arabirim söyleyecektir ediyorum size a bağlanmaya çalışırsanız olsaydı kullanılacak verilen ip adresi.
mwardm

Sunucu Arızası İle İlgili: Belirli bir anasisteme giden yol için arabirim bulun (buraya geldiğimde aradığım şeydi).
Wildcard

Yanıtlar:


48

routeVarsayılan rotanızı bulmak için kullanabilirsiniz :

$ 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

IfaceHedef doğrultusunda kolon defaultkullanılan arayüz söyler.


1
@Job bir IP adresimiz olması durumunda hangi arayüzü kullandığını nasıl bulabiliriz?
Bionix1441,

1
Bu kabul edilen cevap olmamalıdır. İproute özel yönlendirme kurallarını tanımlamak routeiçin kullanılmışsa kullanılamaz. @Torgeir tam bir cevabı var.
Joseph Garrone

1
Bu cevap doğru değil. Örneğin (ve cevabında görüntülenen yolların aynısı verildiğinde), eğer 192.168.1.16 (yerel ağınızdaki bir bilgisayar) ping yaparsanız, başlayan giriş kullanılacak olan 192.168.1.0...yoldur. Elbette bu durumda aynı Iface anlamına gelir, ancak bunun nedeni makinenizde bir arabirim bulunmasıdır.
kdehairy

1
@Job google.com'da bile, her biri farklı bir arabirimde iki rotanız varsa, daha uzun maskeyle eşleşenler seçilecektir (varsayılan olarak değil). Varsayılan olan tüm anlamına gelir, başka bir rota bulunamazsa, buna bir bakalım :)
kdehairy

1
"Default ... eth0" ve "default ... wlan0" satırlarını alıyorum. Peki gerçek olan hangisi?
AstroFloyd

25

Temelde buna ve buna dayanan versiyonum :

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

Ve bu, deneysel olarak , macOS için:

route -n get default | grep 'interface:' | grep -o '[^ ]*$'

1
OSX için bunu çevirmenin bir yolu var mı?
John Allard

1
@JohnAllard: Güncellememin şimdi orada macOS için doğru cevap verdiğini haberim olsun.
Ebrahim Byagowi 10:17

Birden boruları, sadece kullanımını gerekmezroute |awk '/^default/{print $NF}'
P ....

İki satır alıyorum: "eth0" ve "wlan0", yani hangisinin aktif olduğunu hala bilmiyorum ...
AstroFloyd

9

GNU / Linux sistemlerinde:

#!/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)'

1
Lütfen bu komutların ne yaptığını açıklayın. Ayrıca, muhtemelen burada oldukça güvendesiniz, çünkü değerlerin ne olduğunu biliyorsunuzdur, ancak genel olarak, kabuk değişkenleri referanslarını vermelisiniz (yapmamak için iyi bir nedeniniz yoksa ve ne yaptığınızı bildiğinizden emin olmalısınız. ).
G-Man

1
Bir dereceye kadar tamamlandı. Sadece bunu yayınladım çünkü tam olarak bunu yapan hiçbir şey bulamadım. Bunu bir kukla tezahüründe özel bir gerçek olarak kullanıyorum ...
Torgeir

hostKomut için bir girdi argümanı ise cevabınız daha doğrudur . Güzergah (ve dolayısıyla arayüz) farklı ips'ler için farklı olabilir.
kdehairy

6

Koşmak ifconfigsize ihtiyacınız olan bilgiyi verecektir.

Aktif arayüzde aşağıdaki gibi bir inet addriletilen veri kaydı bulunacak ve gösterilecektir:

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

ip addrKomutu da kullanabilirsiniz, aktif olmayan herhangi bir arayüz aşağıdakilere sahip olacaktır NO-CARRIER.


OP root olmak istemediğinden, çalıştırılabilir dosyaya tam yol vermelisin?
tshepang

Her iki komut da yükseltilmiş ayrıcalıklar gerektirmez.
jasonwryan

1
Ubuntu ve Arch: ikisi de normal ayrıcalıklarla çalışıyor (Ubuntu'da / sbin olmasına rağmen)
jasonwryan

1
@Shadur on my Ubuntu 10.10 arasında yükleyip göre değil help.ubuntu.com/community/EnvironmentVariables varsayılan $ PATH olduğunu/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
jasonwryan

2
Posterin sahip olduğu gibi, bu mutlaka çoklu arayüze sahip bir sistemde yardımcı olmaz. Daha iyi bir cevap, routekomutun kullanılmasıdır, ancak bu, yönlendirmeden dolayı mutlaka kusursuz olmaz. Varsayılan yol, genellikle olsa da, Internet’e ulaşmak için gerekli olmak zorunda değildir.
user1801810

6

Bir astar:

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


Orada sarkan bir teklif var.
Olduğu

@Krease Yazar yanıtını güncelledi
Vadim Kotov

5

Genellikle açıkça yönlendirilen DMZ, özel ağ, VM ana bilgisayarı vb.

$ ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)'
eth0

seni istediğin yere götüren her zaman varsayılan yol değildir. OP muhtemelen internete ulaşmak için varsayılan rotayı kullanıyor olsa da, bu bir genellemedir ve her zaman doğru olmayabilir. Dikkatli bir kelime
MelBurslan

Elbette, sadece varsayılan ağ arayüzüdür. Birden fazla bağlantı varsa, kişi gerçekten "internete bağlanmak" hakkında değil, tam hedefe yönlendirmek için kullanılan ağ arayüzü hakkında konuşmalıdır.
EugeneP

Birden fazla boru / greps kullanmanıza gerek yoktur,ip -4 route ls |awk '/^default/{print $5}'
P ....

2

Komut ip route ls, aktif rotaların ve kaynaklarının bir listesini verecektir:

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 

1

Komutunu kullanın:

[root@linux1 network-scripts]# route|grep default | awk '{print $8}'
enp0s3

[root @ linux1 ağ-komut dosyaları] # route | grep default | awk '{print $ 8}' enp0s3 [root @ linux1 ağ komut dosyaları] #
Larry Catt


0

Makinenizde (varsayarsak) birden fazla arayüz varsa, internete bağlanmak için kullanılacak bir arayüz yoktur.

Bağlandığınız hedefe bağlı olarak, sisteminiz bir routesonraki umudu / yönlendiriciyi bulmak için ip tablosuna ( komut verildiğinde gösterilen ), bir tane bulduğunda, onunla ilişkili arayüzü kullanacaktır.

Bununla birlikte, lütfen @ torgeir'in cevabına şu şekilde cevap verdi:

  1. Bir etki alanı verildiğinde (google.com olarak kodlanmış, yanıttaki tek kötü nokta)
  2. Bu ip çözer
  3. Kullanılacak yolun ip tablosuna (ve dolayısıyla arayüze) danışır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.