इंटरनेट से कनेक्ट करने के लिए मैं किस इंटरफ़ेस का उपयोग करूं?


47

Ifconfig के अनुसार मेरे पास eth0 है और wlan0 है ping google.com। मैं कैसे पता लगा सकता हूं (एक सामान्य उपयोगकर्ता के साथ, रूट नहीं) क्या इंटरफ़ेस सक्रिय है , जैसा कि, किस इंटरफ़ेस में पिंग (या जो भी हो, पिंग अनिवार्य नहीं है) का उपयोग करें?

नोट: Ubuntu 11.04 या फेडोरा 14 का उपयोग करना


2
नीचे दिए गए समाधान चाहते हैं कि आप अपने आप को इनफ्लाइट करें, जो सही नहीं लगता है। (और हर किसी के रूटिंग टेबल अविश्वसनीय रूप से सीधे दिखते हैं!) जब मैं विंडोज समकक्ष की तलाश कर रहा हूं, तो ऐसा प्रतीत होता है कि "आईपी मार्ग प्राप्त करें <आईपी-पता>" आपको बताएगा कि यदि आप एक से कनेक्ट करने का प्रयास करते हैं तो कौन सा इंटरफ़ेस का उपयोग किया जाएगा। IP पता दिया गया।
mwardm

सर्वर फाल्ट पर संबंधित: विशिष्ट होस्ट के लिए मार्ग के लिए इंटरफ़ेस ढूंढें (जो कि जब मैं यहां घाव कर रहा था तो मैं जो देख रहा था)।
वाइल्डकार्ड

जवाबों:


48

आप routeअपने डिफ़ॉल्ट मार्ग को खोजने के लिए उपयोग कर सकते हैं :

$ 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

Ifaceगंतव्य के साथ लाइन में स्तंभ defaultआपको यह बताती है इंटरफ़ेस प्रयोग किया जाता है।


1
@ जोब के मामले में हमारे पास एक आईपी पता है कि हम यह कैसे पा सकते हैं कि वह किस इंटरफ़ेस का उपयोग करता है।
Bionix1441

1
यह स्वीकृत उत्तर नहीं होना चाहिए। यदि कस्टम रूटिंग नियमों को परिभाषित करने के लिए iproute का उपयोग किया गया है तो इसका उपयोग routeनहीं किया जा सकता है। @ तोरगीर के पास राइट का जवाब है।
जोसेफ गैरोन

1
यह उत्तर सही नहीं है। उदाहरण के लिए (और उत्तर में प्रदर्शित वही मार्ग दिए गए हैं), यदि आप 192.168.1.16 (अपने स्थानीय नेटवर्क पर एक पीसी) को पिंग करते हैं, तो प्रवेश जो शुरू होता 192.168.1.0...है वह मार्ग है जिसका उपयोग किया जाएगा। बेशक इस मामले में यह एक ही इफिस को संदर्भित करता है, लेकिन यह सिर्फ इसलिए है क्योंकि आपके मशीन पर एक इंटरफ़ेस है।
kdehairy

1
@Job यहां तक ​​कि google.com के साथ, यदि आपके पास एक अलग इंटरफ़ेस पर प्रत्येक दो मार्ग हैं, तो लंबे मास्क के साथ मैच को चुना जाएगा (जरूरी नहीं कि डिफ़ॉल्ट)। सभी डिफ़ॉल्ट का मतलब है, अगर कोई अन्य मार्ग नहीं मिला है, तो आइए इस से परामर्श करें :)
kdehairy

1
मुझे एक लाइन "डिफ़ॉल्ट ... eth0" और एक लाइन "डिफ़ॉल्ट ... wlan0" मिलती है। तो कौन सा वास्तविक डिफ़ॉल्ट है?
एस्ट्रोफ्लोयड

25

मेरा संस्करण जो मूल रूप से इस और इस पर आधारित है :

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

और यह, प्रयोगात्मक रूप से , macOS के लिए:

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

1
क्या आपके पास OSX के लिए इसका अनुवाद करने का कोई तरीका है?
जॉन ऑलार्ड

1
@ जॉनऑल्ड: मुझे बताएं कि क्या मेरा अपडेट अब मैकओएस के लिए सही उत्तर देता है।
अब्राहिम बयागोवी

आपको कई पाइपों की आवश्यकता नहीं है, बस उपयोग करेंroute |awk '/^default/{print $NF}'
P ....

मुझे दो लाइनें मिलती हैं: "eth0" और "wlan0", इसलिए मुझे अभी भी नहीं पता है कि कौन सा सक्रिय है ...
एस्ट्रोफ्लोयड

9

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)'

1
कृपया बताएं कि ये आदेश क्या कर रहे हैं। इसके अलावा, आप शायद यहां बहुत सुरक्षित हैं, क्योंकि आप जानते हैं कि आपके मूल्य क्या हैं, लेकिन, आम तौर पर, आपको शेल चर संदर्भों को उद्धृत करना चाहिए (जब तक कि आपके पास कोई अच्छा कारण न हो, और आपको यकीन है कि आप जानते हैं कि आप क्या कर रहे हैं )।
जी-मैन कहते हैं

1
हो गया, कुछ हद तक। केवल इसे पोस्ट किया क्योंकि मुझे ऐसा कुछ भी नहीं मिला जो वास्तव में ऐसा करता हो। कठपुतली के रूप में एक कस्टम तथ्य के रूप में इसका उपयोग कर रहे हैं ...
Torgeir

यदि hostस्क्रिप्ट का इनपुट तर्क है तो आपका उत्तर अधिक सही है। मार्ग के रूप में (और इसलिए इंटरफ़ेस) अलग-अलग ips के लिए अलग हो सकता है।
kdehairy

6

रनिंग ifconfigआपको वह जानकारी देगा जिसकी आपको आवश्यकता है।

सक्रिय इंटरफ़ेस में एक inet addrसंचारित डेटा होगा, जैसे कि:

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

आप ip addrकमांड का उपयोग भी कर सकते हैं और कोई भी निष्क्रिय इंटरफेस होने के रूप में निर्दिष्ट किया जाएगा NO-CARRIER:।


चूंकि ओपी जड़ नहीं बनना चाहता है, शायद आपको निष्पादन योग्य को पूरा रास्ता देना चाहिए?
tshepang

न तो कमांड को उन्नत विशेषाधिकार की आवश्यकता होती है।
jasonwryan

1
उबंटू और आर्क: दोनों सामान्य विशेषाधिकारों के साथ चलते हैं (हालांकि उबंटू पर यह / sbin है)
जसोनव्रीयन

1
@ बहादुर उबंटू के मेरे इंस्टालेशन पर 10.10 नहीं और help.ubuntu.com/community/EnvironmentVariables के अनुसार डिफ़ॉल्ट $ PATH है/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:
jasonwryan

2
यह आवश्यक रूप से कई इंटरफेस के साथ एक सिस्टम पर मदद नहीं करेगा, जैसा कि पोस्टर ने संकेत दिया है। एक बेहतर उत्तर routeकमांड का उपयोग कर रहा है, हालांकि यह जरूरी नहीं कि रूटिंग के कारण मूर्खतापूर्ण हो। डिफ़ॉल्ट मार्ग को इंटरनेट पर लाने के लिए एक होना जरूरी नहीं है, हालांकि यह अक्सर हो सकता है।
user1801810

6

एक लाइन:

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


वहाँ एक झूलती हुई बोली है। के रूप में सब पर काम नहीं करता है
क्रीज

@ क्रीज लेखक ने अपना जवाब अपडेट किया
वादिम

5

आमतौर पर डीएमजेड, निजी नेटवर्क, वीएम होस्ट आदि के विपरीत "शेष" इंटरनेट को रूट करने के लिए उपयोग किए जाने वाले डिफ़ॉल्ट नेटवर्क इंटरफ़ेस प्राप्त करें, जो आमतौर पर स्पष्ट रूप से रूट किए जाते हैं।

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

यह हमेशा डिफ़ॉल्ट मार्ग नहीं होता है जो आपको वह स्थान देता है जहाँ आप चाहते हैं। हालाँकि ओपी सबसे शायद इंटरनेट तक पहुंचने के लिए डिफ़ॉल्ट मार्ग का उपयोग कर रहा है, यह एक सामान्यीकरण है और हमेशा सही नहीं हो सकता है। सावधानी का एक शब्द
मेलबर्सलान

ज़रूर, यह केवल डिफ़ॉल्ट नेटवर्क इंटरफ़ेस है। यदि कई कनेक्शन हैं, तो किसी को वास्तव में "इंटरनेट से कनेक्ट करने" के बारे में नहीं बोलना चाहिए, बल्कि सटीक गंतव्य पर रूटिंग के लिए उपयोग किए जाने वाले नेटवर्क इंटरफ़ेस के बारे में बोलना चाहिए।
यूजीनपी

आपको कई पाइप / greps का उपयोग करने की आवश्यकता नहीं है,ip -4 route ls |awk '/^default/{print $5}'
P ....

2

कमांड ip route lsसक्रिय मार्गों और उनके स्रोतों की एक सूची देगा:

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

कमांड का उपयोग करें:

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

[रूट @ linux1 नेटवर्क-स्क्रिप्ट] # मार्ग | grep डिफ़ॉल्ट | awk '{प्रिंट $ 8}' enp0s3 [रूट @ linux1 नेटवर्क-स्क्रिप्ट] #
लैरी कैट


0

यदि आपकी मशीन में कई इंटरफेस हैं (जो मुझे लगता है), तो कोई भी इंटरफ़ेस नहीं है जिसका उपयोग इंटरनेट से कनेक्ट करने के लिए किया जाएगा।

आपके द्वारा कनेक्ट किए जा रहे गंतव्य के आधार पर, आपका सिस्टम आईपी टेबल (जब आप routeकमांड करते हैं, तो दिखाया जाता है ) से अगले आशा / राउटर को खोजने के लिए परामर्श करेगा , जब वह एक खोज करता है, तो वह इसके साथ जुड़े इंटरफ़ेस का उपयोग करेगा।

उस ने कहा, कृपया @ torgeir के उत्तर को देखें क्योंकि यह बिल्कुल वैसा ही है:

  1. एक डोमेन दिया (google.com के रूप में हार्डकोड किया गया, जो उत्तर में एकमात्र खराब बिंदु है)
  2. यह आईपी का समाधान करता है
  3. मार्ग (और इसलिए इंटरफ़ेस) का उपयोग करने के लिए आईपी तालिका को बचाता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.