बैश से नेटमास्क कैसे प्राप्त करें?


8

मैं लिनक्स पर अपना नेटमास्क प्राप्त करना चाहता हूं। इसके साथ आउटपुट होता है, ifconfigलेकिन मैं स्ट्रिंग निकालना चाहता हूं।


5
यह प्रश्न कठिन है, वास्तव में, यदि आप अपने ओएस को निर्दिष्ट नहीं करते हैं, उदाहरण के लिए FreeBSD की ifconfigनेटमैस्क लाइन है: inet 192.168.144.120 netmask 0xffffff00 broadcast 192.168.144.255तो, जबकि उत्तर आसानी से समायोजित किए जा सकते हैं, संभवतः कोई एक आकार-फिट-सभी (केवल बैश / ifconfig का उपयोग करके) नहीं है ।
sr_

जवाबों:


8

मुझे यह स्पष्ट करना चाहिए कि यहाँ कोड लिनक्स के लिए काम करता है, (टिप्पणी लिखें और अन्य यूनियनों के बारे में पोस्ट करें)। ओपी ने लिनक्स समाधान के लिए कहा, लेकिन सामान्य रूप से "नेटमस्क कैसे प्राप्त करें" के लिए प्रश्न को बदलना अच्छा होगा, और उत्तर को अधिक यूनिक्स फ्लेवर के लिए सबसे अच्छा तरीका है।

#!/bin/sh
ifconfig "$1" | sed -rn '2s/ .*:(.*)$/\1/p'

./script eth0

लिनक्स में ifconfig के बारे में

अन्य पारंपरिक नेटवर्किंग कमांड जैसे netstat, arp, rarp और मार्ग के साथ, ifconfig नेट-टूल पैकेज का हिस्सा है । नेट-टूल्स को वास्तव में लंबे समय से सक्रिय रूप से विकसित नहीं किया गया है और इसे नए iprout2 पैकेज के पक्ष में चित्रित करने के प्रयास हैं । संक्षिप्तता के लिए, यदि आप इस मूलभूत परिवर्तन के बारे में अधिक जानकारी चाहते हैं, तो यहां कुछ प्रासंगिक लिंक दिए गए हैं:

उदाहरण उदाहरण: डेबियन लिनक्स

उदाहरण उदाहरण: आर्क लिनक्स

नेट-टूल्स ifconfig के लिए मैन पेज (BUGS अनुभाग देखें)

विश्लेषण और एक उपयोगकर्ता के नजरिए से चौखटे की तुलना


यदि प्रश्न में इंटरफ़ेस में कोई नेटमैस्क नहीं है, तो यह समाधान '1' देता है। रेगेक्स को बहुत ही महत्वपूर्ण शब्द 'मास्क' पर एक उचित एंकर की आवश्यकता सहित इसे विश्वसनीय / सुरक्षित बनाने के लिए कुछ गंभीर सुधार की आवश्यकता है।
ओलिवर डेंगी

7
/sbin/ifconfig eth0 | awk '/Mask:/{ print $4;} '

?


आप याद आ रहे हैं | cut -c6- "मास्क:" को हटाने के लिए
michelemarcon

3
जाग क्षेत्र विभाजक को निर्दिष्ट करना "मास्क:" को हटाने के लिए भी काम करता है:/sbin/ifconfig eth0 | awk -F: '/Mask:/{print $4}'
शेन

डेबियन स्ट्रेच / नेट-टूल्स 2.10-अल्फा में मुझे इसे बदलना था:/sbin/ifconfig eth0 | awk '/netmask/{print $4}'
शेन

7

मुझे आश्चर्य है कि अगर आप वास्तव में केवल मुखौटा चाहते हैं। हो सकता है कि आप वास्तव में चाहते हैं कि नेटवर्क (या आईपी) मास्क के साथ, कॉन्फिग फाइलों में 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" देता है।


2
... 'स्कोप ग्लोबल' या 'डिफॉल्ट' पर मेल करना वास्तव में आवश्यक नहीं है जैसा कि आप कर सकते हैं ip -o -f inet addr show scope globalऔर ip route list default
bryn

3

यदि आप एक 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"

2
/sbin/ifconfig eth0 | grep Mask | cut -d":" -f4

इस प्रकार यह सबसे अच्छा उत्तर है, जहाँ तक बाकी निश्चित संख्या में स्तंभों का उपयोग करते हैं, awkजिनके साथ वास्तविक जीवन में ऐसा नहीं है ifconfig। मैं कुछ बदलावों का सुझाव दूंगा: हालांकि ifconfig eth0 | grep -o 'Mask:[^\s]*' | cut -d':' -f2-oताकि grepबहुत (और अधिक कुशल) के बजाय लाइन का केवल रिटर्न हिस्सा। [^\s]*नेटमास्क टोकन के अंत का पता लगाने के लिए गैर-व्हाट्सएप वर्णों ( ) का मिलान करें । सुरक्षा के लिए क्षेत्र परिसीमन के आसपास एकल उद्धरण।
ओलिवर डेंगी

macOS पर मुझे /sbin/ifconfig | grep ask | sed -e 's/.*netmask //g' | sed -e 's/ .*//g'हेक्स में मास्क का उत्पादन करना है।
टोमैची

1

यदि आप डिफॉल्ट नेटवर्क डिवाइस के लिए नेटमास्क की मांग कर रहे हैं, तो यह कमांड डिफॉल्ट डिवाइस को लौटा देता है क्योंकि डिफॉल्ट डिवाइस eth0 नहीं हो सकता है

netdevice=$(ip r | grep default | awk '/default/ {print $5}')

और यह कमांड मास्क को पुनः प्राप्त करता है:

netmask=$(ifconfig "$netdevice" | awk '/netmask/{ print $4;}')

एलिया कागन और पाउलो टोम के लिए धन्यवाद जिसने मुझे दोनों को सरल बनाने और उत्तर को स्पष्ट करने में मदद की। मेरी व्यक्तिगत मशीन पर, डिफ़ॉल्ट ईथरनेट डिवाइस "wlx504654c1a91" था, जो दो चरणों की प्रक्रिया को याद रखने और सही ढंग से टाइप करने के लिए बहुत जटिल था।


1
grep 'pattern' | awk '{ action }'आम तौर पर कम किया जा सकता हैawk '/pattern/ { action }'
रोआमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.