Ifconfig का उपयोग केवल सक्रिय इंटरफ़ेस दिखाने के लिए कैसे करें


22

डिफ़ॉल्ट रूप ifconfigसे मुझे सभी उपलब्ध इंटरफेस दिखाएंगे, लेकिन क्या होगा अगर मैं सिर्फ activeलोगों को प्रदर्शित करना चाहता हूं ? जैसे, en0केवल नीचे में।

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 14:10:9f:e0:eb:c9 
    inet6 fe80::1610:9fff:fee0:ebc9%en0 prefixlen 64 scopeid 0x4 
    inet X.X.X.X netmask 0xffffff00 broadcast 101.6.69.255
    nd6 options=1<PERFORMNUD>
    media: autoselect
    **status: active**
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 32:00:14:e7:4f:80 
    media: autoselect <full-duplex>
    **status: inactive**

नोटिस ifconfig en0संतुष्ट नहीं करेगा, en0हमेशा सक्रिय नहीं होता है;)

मैं मैक ओएस एक्स चला रहा हूं।


2
ifconfigलागू होने के बाद से आपके ओएस का उल्लेख करना कुछ महत्वपूर्ण होगा । इसके अलावा, उपयोग ifconfigकी आवश्यकता क्यों है ? आपका अंतिम लक्ष्य क्या है?
जोर्डनम

हाय @ जोर्डनम, मेरा लक्ष्य वर्तमान में सक्रिय इंटरफ़ेस का आईपी पता प्राप्त करना है, अक्सर एक वायरलेस या वायर्ड ईथरनेट इंटरफ़ेस।
क्वेरुईओप

आप सक्रिय इंटरफ़ेस को कैसे परिभाषित करते हैं?
AnonymousLurker

जवाबों:


24

सभी सक्रिय सेवाओं का संपूर्ण विवरण प्राप्त करने के लिए, प्रयास करें:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active'

इस सरल रेगेक्स को केवल सक्रिय इंटरफेस और उनकी सभी जानकारी को फ़िल्टर करना चाहिए। मुझे लगता है कि आपने इसके लिए अपनी ~ / .profile या ~ / .bash_profile फ़ाइल (शायद सक्रिय?) में एक अन्य नाम रखा है?

केवल इंटरफ़ेस नाम (स्क्रिप्ट के लिए उपयोगी) प्राप्त करने के लिए, उपयोग करें:

ifconfig | pcregrep -M -o '^[^\t:]+:([^\n]|\n\t)*status: active' | egrep -o -m 1 '^[^\t:]+'

इसके लिए आपको pcregrep इंस्टॉल करना होगा। यह pcre पैकेज में macports पर है । वैकल्पिक रूप से, यह GNU grep के साथ काम करना चाहिएgrep -Pzo बजाय इसके pcregrep -M -oकि बाकी समान के साथ, लेकिन मैंने इसका परीक्षण नहीं किया है।


2

यदि आप केवल "एंट्री" प्रिंट करना चाहते हैं status: active, अगर उसमें यह शामिल है , तो आप इस awk प्रोग्राम की तरह कुछ का उपयोग ifconfig आउटपुट के फिल्टर के रूप में कर सकते हैं :

#!/usr/bin/awk -f
BEGIN            { print_it = 0 }
/status: active/ { print_it = 1 }
/^($|[^\t])/     { if(print_it) print buffer; buffer = $0; print_it = 0 }
/^\t/            { buffer = buffer "\n" $0 }
END              { if(print_it) print buffer }

जब प्रत्येक "प्रविष्टि" शुरू होती है (एक रेखा खाली है या टैब से शुरू नहीं होती है), तो एक बफर में प्रविष्टि को सहेजना शुरू करें। इस बफर को किसी भी बाद की पंक्तियों में जोड़ें जो एक टैब के साथ शुरू होता है। मैजिक स्ट्रिंग के लिए देखें status: active; यदि इस तरह की एक लाइन देखी गई थी, तो एक नया "प्रवेश" शुरू होने पर (या इनपुट समाप्त होने पर) बफर (पिछली "प्रविष्टि") को प्रिंट करें।

उपरोक्त प्रोग्राम टेक्स्ट को किसी फ़ाइल में सहेजें और इस तरह उपयोग करें:

ifconfig -a | awk -f /path/to/file

या, यदि आप chmod +xफ़ाइल, तो आप इसे थोड़ा सरल कर सकते हैं:

ifconfig -a | /path/to/file

2

यदि आप कुछ बैश स्क्रिप्टिंग के प्रतिकूल नहीं हैं, तो आप यह कर सकते हैं:

for i in $(ifconfig -lu); do if ifconfig $i | grep -q "status: active" ; then echo $i; fi; done

यह सक्रिय नेटवर्क इंटरफेस को सूचीबद्ध करेगा। मैक ओएस एक्स 10.13 पर परीक्षण किया गया।

अच्छी बात यह है कि आपको कुछ भी स्थापित करने की आवश्यकता नहीं है। बस एक टर्मिनल में ऊपर चलाएं।


यह सबसे अच्छा जवाब होना चाहिए, हालांकि ifconfig -luडेबियन पर काम नहीं करेगा। लेकिन ओपी वैसे भी MacOS का उपयोग कर रहा है, इसलिए यह समाधान BSD के साथ सिस्टम पर काम करेगा ifconfig। मैंने नीचे एक और उत्तर पोस्ट किया है जो बिना उपयोग के समान हैifconfig -lu
रकीब फ़िहा

1

आपकी टिप्पणियों और प्रश्नों को पढ़कर, ऐसा लगता है कि आप वास्तव में केवल उन इंटरफेस को प्राप्त करना चाहते हैं जिनके पास एक आईपी पता है जो उन्हें सौंपा गया है।

आप इसके साथ जल्दी ifconfigऔर कर सकते हैं grep

कमांड चलाना:

ifconfig | grep 'Link\|inet'

कुछ इसी तरह का उत्पादन करना चाहिए:

eth0 लिंक एनकैप: ईथरनेट HWaddr 00: 11: 22: 33: 44: 55
eth1 लिंक एनकैप: ईथरनेट HWaddr 00: 11: 22: 33: 44: 66  
          inet addr: 192.168.0.8 Bcast: 192.168.0.255 मास्क: 255.255.255.0
लो लिंक एनकैप: लोकल लूपबैक  
          inet addr: 127.0.0.1 मास्क: 255.0.0.0

यह प्रत्येक पंक्ति को इंटरफ़ेस नाम और IP के साथ दिखाएगा यदि उनके पास एक था।

कुछ और विशिष्ट REGEX मैजिक आपको वही मिल सकते हैं जिनकी आपको आवश्यकता है।


2
धन्यवाद लेकिन activeविचार कहाँ है ?
qweruiop

यदि इंटरफ़ेस के बाद एक लाइन है, तो इसका एक आईपी पता है जिसे इसे सौंपा गया है, और जो मैं आपको इकट्ठा करता हूं उसका मतलब है, यह 'सक्रिय' के रूप में होगा।
नाथन मैककॉय

1

काश प्रश्न थोड़ा स्पष्ट होता। यह मानते हुए कि Active interface onlyआपका मतलब केवल किसी अन्य विवरण के बिना (मेरे मामले UPऔर RUNNINGस्थिति में active) सक्रिय इंटरफेस का नाम दिखाना है । फिर यह प्रयास करें:

ifconfig | \
  grep "UP\|RUNNIG" \
  | awk '{print $1}' \
  | grep ':' \
  | tr -d ':' \
  | grep -v lo

आउटपुट जैसा दिखेगा:

en0
en1
en2
bridge0
p2p0
awdl0
llw0
utun0
utun1
utun2
utun3
en6

यदि आवश्यक हो तो grep -vफ़ील्ड को समायोजित करें और अधिक अवांछित इंटरफेस में जोड़ें loopback-> loआदि।

अब, यदि आप चाहते हैं और आपको यह जांचने की आवश्यकता होगी कि क्या मिला इंटरफेस वर्तमान में सक्रिय है या नहीं। फिर हम बस उन्हें ifconfig <interface>नीचे दिखाए गए तर्क की तरह पास कर सकते हैं:

[[ $(ifconfig en0 | grep -w active) ]] && echo "en0 is active"

इसे और सरल बनाना और इसे एक समारोह में लागू करना:

checkActiveInterfaces()
{
  local intARR=( $(ifconfig | \
      grep "UP\|RUNNIG" \
      | awk '{print $1}' \
      | grep ':' \
      | tr -d ':' \
      | grep -v lo) );
    intARR=( $(printf "%s\n" "${intARR[@]}" | sort -u) );
    for i in "${intARR[@]}"; do
      [[ $(ifconfig $i | grep -w active) ]] && {
       echo "$i"
    }
    done
}

इस फ़ंक्शन को निष्पादित करने से केवल सक्रिय इंटरफ़ेस वापस आएगा। मेरे मामले में:

awdl0
en0
llw0

0

निम्नलिखित केवल उन इंटरफेस को प्रिंट करेगा जो आईपी होने के लिए कॉन्फ़िगर किए गए हैं

ifconfig | grep "inet.*broadcast"

0

केवल सक्रिय इंटरफ़ेस मैक प्राप्त करें:

cat /sys/class/net/$(ip addr | awk '/state UP/ {print $2}' | sed 's/.$//')/address

ध्यान दें कि MacOS ipडिफ़ॉल्ट रूप से नहीं होता है; इसके लिए आपको HomeBrew की जरूरत है, फिर brew install iproute2macएक बार चलाएं । इसका स्रोत कोड github.com/brona/iproute2mac पर है
जीरो वेर्ट प्लुइमर

-1
$ ifconfig | grep "inet addr:" | grep -v 127.0.0.1 | sed -e 's/Bcast//' | cut -d: -f2

यह काम किस प्रकार करता है:

  • ifconfig
  • "Inet addr" वाली लाइनों के लिए Grep
    • इन पंक्तियों में IPs हैं।
  • "127.0.0.1" शामिल न होने वाली लाइनों के लिए Grep
    • हम आमतौर पर लोकलहोस्ट की परवाह नहीं करते।
    • -v उल्टा grep है
  • शेष पंक्तियों से, "Bcast" हटा दें
  • कट 2 क्षेत्र का उपयोग ":" एक परिसीमनक के रूप में
    • उत्तर को प्रिंट करता है।

-1
ifconfig en0 | grep status

यह ईथरनेट कनेक्शन en0 की स्थिति दिखाएगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.