मैं लिनक्स पर अपना नेटमास्क प्राप्त करना चाहता हूं। इसके साथ आउटपुट होता है, ifconfig
लेकिन मैं स्ट्रिंग निकालना चाहता हूं।
मैं लिनक्स पर अपना नेटमास्क प्राप्त करना चाहता हूं। इसके साथ आउटपुट होता है, ifconfig
लेकिन मैं स्ट्रिंग निकालना चाहता हूं।
जवाबों:
मुझे यह स्पष्ट करना चाहिए कि यहाँ कोड लिनक्स के लिए काम करता है, (टिप्पणी लिखें और अन्य यूनियनों के बारे में पोस्ट करें)। ओपी ने लिनक्स समाधान के लिए कहा, लेकिन सामान्य रूप से "नेटमस्क कैसे प्राप्त करें" के लिए प्रश्न को बदलना अच्छा होगा, और उत्तर को अधिक यूनिक्स फ्लेवर के लिए सबसे अच्छा तरीका है।
#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'
./script eth0
अन्य पारंपरिक नेटवर्किंग कमांड जैसे netstat, arp, rarp और मार्ग के साथ, ifconfig नेट-टूल पैकेज का हिस्सा है । नेट-टूल्स को वास्तव में लंबे समय से सक्रिय रूप से विकसित नहीं किया गया है और इसे नए iprout2 पैकेज के पक्ष में चित्रित करने के प्रयास हैं । संक्षिप्तता के लिए, यदि आप इस मूलभूत परिवर्तन के बारे में अधिक जानकारी चाहते हैं, तो यहां कुछ प्रासंगिक लिंक दिए गए हैं:
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '
?
/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
मुझे आश्चर्य है कि अगर आप वास्तव में केवल मुखौटा चाहते हैं। हो सकता है कि आप वास्तव में चाहते हैं कि नेटवर्क (या आईपी) मास्क के साथ, कॉन्फिग फाइलों में nmap
, या जो भी हो , का उपयोग करें ।
उस स्थिति में, लिनक्स पर, आप ip ...
कमांड के आउटपुट को पार्स भी कर सकते हैं ।
CIDR संकेतन में उनके पते और मुखौटे के साथ सभी इंटरफेस को सूचीबद्ध करने के लिए:
ip -o -f inet addr show | awk '/scope global/ {print $2, $4}'
या इसे डिफ़ॉल्ट इंटरफ़ेस तक सीमित करने के लिए:
default_if=$(ip route list | awk '/^default/ {print $5}')
ip -o -f inet addr show $default_if | awk '{print $4}'
जो मुझे मेरी मशीन पर "192.168.1.61/24" देता है।
ip -o -f inet addr show scope global
और ip route list default
।
यदि आप एक OS का उपयोग कर रहे हैं जो हेक्स में मास्क को आउटपुट करता है, तो आप कुछ ऐसा कर सकते हैं:
#!/usr/bin/bash
# read the mask, and strip leading 0x if it's there
hexmask=$( echo $1 | sed -e 's/^0x//' )
# loop through $hexmask in pairs
#
for (( i=0; i<${#hexmask}; i+=2 )); do
if (( $i > 1 )); then
# use a . to separate octets
# but don't print a leading .
printf "%s" "."
fi
printf "%d" "0x${1:$i:2}"
done
printf "\n"
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4
awk
जिनके साथ वास्तविक जीवन में ऐसा नहीं है ifconfig
। मैं कुछ बदलावों का सुझाव दूंगा: हालांकि ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2
। -o
ताकि grep
बहुत (और अधिक कुशल) के बजाय लाइन का केवल रिटर्न हिस्सा। [^\s]*
नेटमास्क टोकन के अंत का पता लगाने के लिए गैर-व्हाट्सएप वर्णों ( ) का मिलान करें । सुरक्षा के लिए क्षेत्र परिसीमन के आसपास एकल उद्धरण।
/sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'
हेक्स में मास्क का उत्पादन करना है।
यदि आप डिफॉल्ट नेटवर्क डिवाइस के लिए नेटमास्क की मांग कर रहे हैं, तो यह कमांड डिफॉल्ट डिवाइस को लौटा देता है क्योंकि डिफॉल्ट डिवाइस eth0 नहीं हो सकता है
netdevice=$(ip r | grep default | awk '/default/ {print $5}')
और यह कमांड मास्क को पुनः प्राप्त करता है:
netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')
एलिया कागन और पाउलो टोम के लिए धन्यवाद जिसने मुझे दोनों को सरल बनाने और उत्तर को स्पष्ट करने में मदद की। मेरी व्यक्तिगत मशीन पर, डिफ़ॉल्ट ईथरनेट डिवाइस "wlx504654c1a91" था, जो दो चरणों की प्रक्रिया को याद रखने और सही ढंग से टाइप करने के लिए बहुत जटिल था।
grep 'pattern' | awk '{ action }'
आम तौर पर कम किया जा सकता हैawk '/pattern/ { action }'
ifconfig
नेटमैस्क लाइन है:inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255
तो, जबकि उत्तर आसानी से समायोजित किए जा सकते हैं, संभवतः कोई एक आकार-फिट-सभी (केवल बैश / ifconfig का उपयोग करके) नहीं है ।