मैं अपना खुद का आईपी पता कैसे प्राप्त कर सकता हूं और इसे शेल स्क्रिप्ट में एक चर में सहेज सकता हूं?
मैं अपना खुद का आईपी पता कैसे प्राप्त कर सकता हूं और इसे शेल स्क्रिप्ट में एक चर में सहेज सकता हूं?
जवाबों:
यह इतना आसान नहीं है यदि आप वीलन और अन्य वैकल्पिक इंटरफेस को ध्यान में रखना चाहते हैं। यदि आप जानते हैं कि आप किस इंटरफ़ेस के लिए पता चाहते हैं (उदाहरण के लिए, eth0, पहला ईथरनेट कार्ड), तो आप इसका उपयोग कर सकते हैं:
ip="$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
दूसरे शब्दों में, मुझे नेटवर्क कॉन्फ़िगरेशन जानकारी प्राप्त करें, इसके लिए देखें, eth0
उस रेखा और अगले एक ( -A 1
) को प्राप्त करें, केवल अंतिम पंक्ति प्राप्त करें, उस रेखा का दूसरा भाग प्राप्त करें जब विभाजन करते हैं :
, तो विभाजित करते समय उस का पहला भाग प्राप्त करें अंतरिक्ष के साथ।
grep
"eth0:" के साथ किसी भी इंटरफ़ेस को अनदेखा करने के लिए आपके कोड में एक अतिरिक्त जोड़ा ; अब यह काम करता है जैसा कि मैं उम्मीद करता हूं (केवल "eth0" आईपी पते और किसी भी उप-इंटरफेस नहीं देना (eth0: 0, eth0: 1, आदि):ip="$(ifconfig | grep -v 'eth0:' | grep -A 1 'eth0' | tail -1 | cut -d ':' -f 2 | cut -d ' ' -f 1)"
ifconfig eth0
ip address
इसके बजाय उपयोग करना चाहिए
मेरा मानना है कि "आधुनिक उपकरण" आपके आईपीवी 4 पते को प्राप्त करने का तरीका 'इफकोनिग' के बजाय 'आईपी' को पार्स करना है, इसलिए यह कुछ इस तरह होगा:
ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
ip6=$(/sbin/ip -o -6 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
या कुछ इस तरह का।
ip
मेरे द्वारा उपयोग किए गए सभी Red Hat और Fedora डिस्ट्रोस पर उपलब्ध है। ip
iproute2 पैकेज ( linuxfoundation.org/collaborate/workgroups/networking/iproute2 ) का हिस्सा है । ifconfig
और route
माना जाता है कि वे बहुत से लोगों द्वारा उपयोग किए जा रहे हैं, विशेषकर लिपियों में। ip
मेरी राय में बहुत अधिक प्रशंसनीय है।
ip
मैंने देखा सभी डेबियन और डेबियन आधारित डिस्ट्रोस पर भी उपलब्ध है। यह iproute पैकेज का हिस्सा है जिसे महत्वपूर्ण के रूप में चिह्नित किया गया है।
ip
iproute2 पैकेज का एक हिस्सा है जो डिफ़ॉल्ट रूप से कई डिस्ट्रो है। यह सबसे अच्छा भंडार है। en.wikipedia.org/wiki/Iproute2
/sbin/ip
बजाय क्यों ip
?
awk
और cut
हल्का मेरे लिए मनोरंजक है, यहाँ एक संभावित विकल्प जो वास्तव में बेहतर नहीं हो सकता है है:ip -o -4 addr show eth0 | awk '{ split($4, ip_addr, "/"); print ip_addr[1] }'
बस क्यों नहीं करते IP=$(hostname -I)
?
hostname -i
मुझे बस देता है 127.0.0.1
, hostname -I
मुझे सही आईपी-एड्रेस देता है ...
-i Display the network address(es) of the host name. Note that this works only if the host name can be resolved. Avoid using this option; use hostname --all-ip-addresses
/etc/hosts
कि इसी आईपी पते के साथ इसे जोड़ा जा रहा है
-I
FreeBSD पर नहीं , लेकिन आप उपयोग कर सकते हैंdig +short `hostname -f`
यदि आप एक इंटरफ़ेस का पता चाहते हैं, तो सबसे आसान तरीका है कि अधिक मोबाइल इंस्टॉल करें:
anthony@Zia:~$ ifdata -pa br0
172.16.1.244
ifdata
आपके ifconfig
लिए आउटपुट पार्स करने के लिए लुभाए जाने वाले प्रत्येक प्रश्न का बहुत अधिक उत्तर देता है।
यदि आप अपने आईपी पते का पता लगाना चाहते हैं तो बाहर वाला इसे देखता है (किसी भी NAT, आदि से परे), वहाँ बहुत सारी सेवाएं हैं जो इसे करेंगे। एक काफी आसान है:
anthony@Zia:~$ curl ifconfig.me
173.167.51.137
ifdata
जोड़ा जाना अच्छा होगा iproute2
। शायद एक नया बाइनरी कहा जाता हैipdata
IPv4 और IPv6 पते प्राप्त करने के लिए, और मान लें कि मुख्य इंटरफ़ेस नहीं है eth0
(ये दिन em1
अधिक सामान्य है ), कोशिश करें:
ips=$(ip -o addr show up primary scope global |
while read -r num dev fam addr rest; do echo ${addr%/*}; done)
-o
एक पंक्ति का उत्पादन प्रारूप है, जो आसान है के साथ कार्रवाई करने के लिए उपयोग करता है read
, grep
आदिup
उन उपकरणों को बाहर करता है जो सक्रिय नहीं हैंscope global
निजी और स्थानीय पते जैसे 127.0.0.1
औरfe80::/64
primary
अस्थायी पते को छोड़कर (यह मानते हुए कि आप ऐसा पता चाहते हैं जो परिवर्तित न हो)-4
/ पास कर सकते हैं -6
। आप आसानी से अन्य इंटरफ़ेस पैरामीटर भी प्राप्त कर सकते हैं। व्यक्तिगत रूप से, मैं लूप को नापसंद करता हूं और मैं पसंद करता हूंgrep -o 'inet6\? [0-9a-f\.:]*' | cut -f 2 -d ' '
निर्भर करता है कि आप अपने आईपी पते से क्या मतलब है। सिस्टम में कई सबनेट (कभी-कभी प्रति सबनेट) पर IP पते होते हैं, जिनमें से कुछ IPv4, कुछ IPv6 ईथरनेट एडेप्टर, लूपबैक इंटरफेस, वीपीएन टनल, ब्रिज, वर्चुअल इंटरफेस जैसे उपकरणों का उपयोग करते हैं ...
मेरा मतलब है कि IP पता जिसके द्वारा किसी अन्य दिया गया डिवाइस आपके कंप्यूटर तक पहुंच सकता है, आपको यह पता लगाना होगा कि कौन सा सबनेट है, और हम किस आईपी संस्करण की बात कर रहे हैं। इसके अलावा, ध्यान रखें कि NAT द्वारा फ़ायरवॉल / राउटर द्वारा प्रदर्शन किए जाने के कारण, इंटरफ़ेस का IP पता समान नहीं हो सकता है क्योंकि दूरस्थ होस्ट आपके कंप्यूटर से आने वाले कनेक्शन को देखता है।
जब फैंसी स्रोत राउटिंग या प्रति प्रोटोकॉल / पोर्ट रूटिंग है, तो यह पता लगाना मुश्किल हो सकता है कि किसी दिए गए प्रोटोकॉल पर एक दूरस्थ कंप्यूटर से बात करने के लिए किस इंटरफ़ेस का उपयोग किया जाएगा और फिर भी, इस बात की कोई गारंटी नहीं है कि उस इंटरफ़ेस का आईपी पता हो सकता है दूरस्थ कंप्यूटर द्वारा सीधे आपके कंप्यूटर के लिए एक नया कनेक्शन स्थापित करना चाहते हैं।
IPv4 के लिए (संभवतः IPv6 के लिए भी काम करता है), एक चाल जो लिनक्स सहित कई यूनियनों में काम करती है, जो दिए गए होस्ट तक पहुंचने के लिए उपयोग किए गए इंटरफ़ेस के आईपी पते का पता लगाने के लिए एक यूडीपी सॉकेट पर कनेक्ट (2) का उपयोग करना और उपयोग करना है ():
उदाहरण के लिए, मेरे घर के कंप्यूटर पर:
perl -MSocket -le 'socket(S, PF_INET, SOCK_DGRAM, getprotobyname("udp"));
connect(S, sockaddr_in(1, inet_aton("8.8.8.8")));
print inet_ntoa((sockaddr_in(getsockname(S)))[1]);'
इंटरफ़ेस के आईपी पते का पता लगाने के लिए उपयोग किया जाएगा जिसके माध्यम से मैं 8.8.8.8 (Google के DNS सर्वर) तक पहुंच जाएगा। यह "192.168.1.123" की तरह कुछ लौटाएगा जो इंटरनेट के लिए डिफ़ॉल्ट मार्ग के लिए इंटरफ़ेस का पता है। हालाँकि, Google मेरी मशीन से एक DNS अनुरोध नहीं देख रहा है क्योंकि वह उस आईपी पते से आ रहा है जो एक निजी है, जैसा कि NAT ने मेरे होम ब्रॉडबैंड राउटर द्वारा किया है।
UDP सॉकेट पर कनेक्ट () किसी भी पैकेट को नहीं भेजता (UDP कनेक्शन-कम है), लेकिन रूटिंग टेबल को क्वेरी करके सॉकेट तैयार करता है।
ipa=$(ip route get 8.8.8.8| grep src| sed 's/.*src \(.*\)$/\1/g')
ipa=$(hostname -i|cut -f2 -d ' ')
-I
इसके बजाय का उपयोग करना -i
बेहतर है क्योंकि आप लूपबैक ipa=$(hostname -I|cut -f1 -d ' ')
grep
पर्याप्त नहीं है, तो इसे किसी और चीज़ पर न डालें। बस कुछ और (का उपयोग sed
, awk
आदि)।
मैं एक झटका होने का मतलब नहीं है, लेकिन वास्तव में एक सही तरीका है और यह है। आप ip route
केवल स्रोत IP प्राप्त करने के लिए आउटपुट ट्रिम करते हैं । आप जिस आईपी तक पहुंचने की कोशिश कर रहे हैं, उसके आधार पर "मेरा अपना आईपी पता" (ओपी के शब्द) अलग होंगे। यदि आप सार्वजनिक इंटरनेट तक पहुंचने की परवाह करते हैं, तो Google के 8.8.8.8 DNS सर्वर का उपयोग करना बहुत मानक है। इसलिए...
ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
अगर मुझे इंटरनेट तक पहुंचने के लिए उपयोग होने वाले आईपी चाहिए , तो मैं इसका उपयोग करता हूं:
pi@et3:~ $ ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
10.55.0.200
अगर मुझे अपने वीपीएन पर किसी चीज़ तक पहुँचने के लिए उपयोग होने वाले आईपी चाहिए , तो मैं इसका उपयोग करता हूं:
pi@et3:~ $ ip route get 172.31.0.100 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
172.29.0.9
यह अगले एक सच में सिर्फ उदाहरण के लिए है। लेकिन, यह किसी भी लिनक्स सिस्टम पर काम करना चाहिए। तो, आप इसका उपयोग यह प्रदर्शित करने के लिए कर सकते हैं कि, हां, सभी मशीनों में हर समय कई आईपी पते हैं।
अगर मुझे वह आईपी चाहिए जो मैं खुद तक पहुँचने के लिए उपयोग करूँ , तो मैं इसका उपयोग करूँगा :
pi@et3:~ $ my_ip=$(getent hosts $(cat /etc/hostname) | awk '{print $1; exit}')
pi@et3:~ $ ip route get $my_ip | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
127.0.0.1
sed
आदेश के बारे में अधिकपहले मुझे यह कहना चाहिए कि यूनिक्स उपकरण चुनते समय, आप उन उपकरणों को चुनने की कोशिश करते हैं जिनमें सबसे कम पाइप की आवश्यकता होती है। तो, जबकि कुछ जवाब पाइप होगा ifconfig
करने के लिए grep
करने के लिए sed
करने के लिए head
, कि शायद ही कभी आवश्यक है। जब आप इसे देखते हैं, तो इसे एक लाल झंडा उठाना चाहिए जिसे आप किसी के अनुभव से सलाह ले रहे हैं। यह "समाधान" को गलत नहीं बनाता है। लेकिन, यह शायद कुछ सुव्यवस्थित उपयोग कर सकता है।
मैंने चुना है sed
क्योंकि यह उसी वर्कफ़्लो की तुलना में अधिक सुस्पष्ट है awk
। (मैं नीचे एक अजीब उदाहरण के बाद से है।) मैं किसी भी अन्य उपकरण नहीं लगता है, लेकिन उन 2 उपयुक्त होगा।
आइए देखें कि क्या sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}'
होता है:
sed # the sed executable located via $PATH
-n # no output unless explicitly requested
' # begin the command space
/src/ # regex match the string 'src'
{ # begin a block of commands **
s/ # begin a substitution (match)
.*src * # match anything leading up to and including src and any number of spaces
\([^ ]*\) # define a group containing any number of non spaces
.* # match any trailing characters (which will begin with a space because of the previous rule).
/ # begin the substitution replacement
\1 # reference the content in the first defined group
/ # end the substitution
p # print (explicitly, remember) the result
; # designate the end of the command
q # quit
} # end the block of commands
' # end the command space
** all of which will be performed "on match"
- otherwise only the first command to following the match would be performed "on match"
- any other commands would be performed whether there was a match or not
ध्यान दें:
मैं उपयोग करता था sed -n '/src/{s/.*src *//p;q}'
लेकिन एक टिप्पणीकार ने बताया कि कुछ सिस्टम में src
फ़ील्ड के बाद डेटा अनुगामी है ।
ip route get 8.8.8.8 | \
awk '{gsub(".*src",""); print $1; exit}'
# or
ip route get 8.8.8.8 | \
awk '{for(i=1; i<NF; i++){if($i=="src"){i++; print $i; exit}}}'
मेरा ifconfig
पता चलता है कि मुझे tun0
अपने वीपीएन के लिए और eth0
अपने लैन के लिए है।
pi@et3:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.55.0.200 netmask 255.255.252.0 broadcast 10.55.3.255
inet6 fe80::71e6:5d7c:5b4b:fb25 prefixlen 64 scopeid 0x20<link>
ether b8:27:eb:b2:96:84 txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 172.29.0.9 netmask 255.255.255.255 destination 172.29.0.10
inet6 fe80::3a8e:8195:b86c:c68c prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:e7:c3:d1 txqueuelen 1000 (Ethernet)
ip route get 8.8.8.8 | sed -n '/src/{s/.*src *//p;q}'
मुझे दिया 10.1.2.3 uid 1002
। इसलिए मैं | awk '{print $1}'
केवल आईपी पता रखने के लिए एपेंड करता हूं ।
FreeBSD पर आप उपयोग कर सकते हैं
dig +short `hostname -f`
यह अन्य वातावरणों के लिए काम कर सकता है, आपके सेट-अप पर निर्भर करता है।
/etc/resolv.conf
कैसे और कैसे नेटवर्क राउटर स्थानीय होस्टनामों के विन्यास पर निर्भर है । यदि आप इसका परीक्षण करते हैं और यह काम करता है तो अपने वातावरण में इसका उपयोग करना ठीक है । लेकिन अगर आप ऐसा करते हैं, तो आप एक "भंगुर" प्रणाली का निर्माण कर रहे हैं जो आपके द्वारा साझा किए जाने पर दूसरों की समस्याओं का कारण बनने जा रही है। सावधानी से प्रयोग करें।
यह मानते हुए कि आपके पास विभिन्न नाम के विभिन्न इंटरफेस हो सकते हैं, लेकिन आप पहले गैर-लोकलहोस्ट एक और गैर-आईपीवी 6 चाहते हैं, तो आप कोशिश कर सकते हैं:
ip=`ip addr show |grep "inet " |grep -v 127.0.0. |head -1|cut -d" " -f6|cut -d/ -f1`
मैं इस एक लाइनर का उपयोग करता हूं:
IP=$(/sbin/ifconfig | grep -e "inet:" -e "addr:" | grep -v "inet6" | grep -v "127.0.0.1" | head -n 1 | awk '{print $2}' | cut -c6-)
उपयोग ifconfig
(व्यापक रूप से उपलब्ध), localhost
पते को नहीं लेता है , आपको किसी दिए गए इंटरफ़ेस नाम से बाँधता नहीं है, आईपीवी 6 को ध्यान में नहीं रखता है और पहले नेटवर्क इंटरफ़ेस का आईपी प्राप्त करने की कोशिश करता है।
आपको ip
इसके बजाय (इसके बजाय ifconfig
) का उपयोग करना चाहिए , क्योंकि यह वर्तमान, बनाए रखा गया है, और संभवतः स्क्रिप्टिंग उद्देश्यों के लिए सबसे महत्वपूर्ण है, यह एक सुसंगत और पार्स करने योग्य आउटपुट का उत्पादन करता है। निम्नलिखित कुछ समान दृष्टिकोण हैं:
यदि आप अपने ईथरनेट इंटरफ़ेस के लिए IPv4 पता चाहते हैं eth0
:
$ ip -4 -o addr show eth0 | awk '{print $4}'
192.168.1.166/24
एक स्क्रिप्ट के रूप में:
$ INTFC=eth0
$ MYIPV4=$(ip -4 -o addr show $INTFC | awk '{print $4}')
$ echo $MYIPV4
192.168.1.166/24
उपरोक्त उत्पादन CIDR संकेतन में है। यदि CIDR संकेतन नहीं चाहता है, तो इसे छीन लिया जा सकता है:
$ ip -4 -o addr show eth0 | awk '{print $4}' | cut -d "/" -f 1
192.168.1.166
एक अन्य विकल्प जो आईएमएचओ "सबसे सुरुचिपूर्ण" है, जो कुछ भी निर्दिष्ट रिमोट होस्ट (इस मामले में 8.8.8.8) से कनेक्ट करने के लिए उपयोग किया जाता है, के लिए आईपीवी 4 पता मिलता है। इस उत्तर में @gatoatigrado के सौजन्य से :
$ ip route get 8.8.8.8 | awk '{ print $NF; exit }'
192.168.1.166
एक स्क्रिप्ट के रूप में:
$ RHOST=8.8.8.8
$ MYIP=$(ip route get $RHOST | awk '{ print $NF; exit }')
$ echo $MYIP
192.168.1.166
यह एकल इंटरफ़ेस के साथ मेजबान पर पूरी तरह से काम करता है, लेकिन अधिक लाभप्रद रूप से कई इंटरफेस और / या मार्ग विनिर्देशों के साथ मेजबानों पर भी काम करेगा।
ip
मेरा पसंदीदा तरीका होगा, लेकिन यह निश्चित रूप से इस बिल्ली की त्वचा का एकमात्र तरीका नहीं है। hostname
यदि आप कुछ आसान / अधिक संक्षिप्त पसंद करते हैं, तो यहां एक और दृष्टिकोण का उपयोग किया गया है :
$ hostname --all-ip-addresses | awk '{print $1}'
या, यदि आप IPv6 पता चाहते हैं:
$ hostname --all-ip-addresses | awk '{print $2}'
मुझे अपने वायर्ड एनआईसी पर एक रेडियो सर्वर शुरू करने के लिए एक उपनाम के भीतर ऐसा करने की आवश्यकता थी। मैंनें इस्तेमाल किया
ip addr | egrep -i "inet.+eth1" | awk -F[\ /] '{print $6}' | tr -d [:space:]
egrep
मूल्यह्रास किया गया है grep -E
इसके बजाय उपयोग करें ।
कुछ कमांड सेंटोस 6 या 7 पर काम कर रहे हैं, दोनों पर काम करने वाले कमांड,
#!/bin/sh
serverip=`/sbin/ifconfig eth0 | grep "inet" | awk '{print $2}' | awk 'NR==1' | cut -d':' -f2`
echo $serverip
grep | awk | awk
। लाइन को छोटा किया जा सकता है/sbin/ifconfig eth0 | awk '$1 == "inet" { print substr($2,6); next ; } '
यह स्निपेट डिवाइस के नाम (जैसे 'eth0') को हार्ड-कोडिंग से बचाता है और ip
इसके बजाय उपयोग करेगा ifconfig
:
/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'
यह आउटपुट में सूचीबद्ध पहले सक्रिय डिवाइस का आईपी लौटाएगा ip addr
। आपकी मशीन के आधार पर, यह एक आईपीवी 4 या आईपीवी 6 पता हो सकता है।
इसे चर में संग्रहीत करने के लिए, उपयोग करें:
ip=$(/sbin/ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
awk / sed / grep का उपयोग करने वाले सभी समाधान मेरी स्थिति के लिए अत्यधिक जटिल और बदसूरत लगते हैं ... इसलिए मैं वास्तव में इस सरल समाधान के साथ आया हूँ लेकिन खबरदार यह कुछ धारणाएँ बनाता है, अर्थात यह अनुमान कि LAST इंटरफ़ेस वह है जो आप हैं रुचि। यदि आप इसके साथ ठीक हैं तो यह बहुत साफ है:
ifconfig | awk '/net / { x = $2 } END { print x }'
अन्यथा आप if
एक विशिष्ट उपसर्ग या आपके पास जो भी मानदंड हो, परीक्षण करने के लिए कुछ मूर्खतापूर्ण बयान कर सकते हैं।
यदि आप बॉक्स के सार्वजनिक आईपी पते की तलाश कर रहे हैं , तो आप निम्नलिखित का उपयोग कर सकते हैं:
dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \"
आप dig(1)
जैसे विकल्प का उपयोग कर सकते हैं -4
या -6
विशेष रूप से IPv4 या IPv6 पते की तलाश कर सकते हैं; Google एक TXT
प्रकार के रिकॉर्ड में एक उत्तर प्रदान करेगा , जिसके द्वारा प्रस्तुत किए जाने पर इसके चारों ओर उद्धरण होंगे dig
; यदि आप बाद में उपयोगिताओं जैसे चर का उपयोग करना चाहते हैं traceroute
, तो आप उक्त उद्धरणों को हटाने के लिए tr (1) जैसी किसी चीज़ का उपयोग करेंगे ।
अन्य विकल्पों में शामिल हैं whoami.akamai.net
और myip.opendns.com
, जो ( Google से उपरोक्त उदाहरण के बजाय) रिकॉर्ड A
और AAAA
रिकॉर्ड TXT
करते हैं, इसलिए, उन्हें उद्धरणों की आवश्यकता नहीं है:
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t any myip.opendns.com +short
dig -6 @resolver1.opendns.com -t any myip.opendns.com +short
यहां एक नमूना स्क्रिप्ट है जो चर सेट करने के लिए उपरोक्त सभी विकल्पों का उपयोग करता है:
#!/bin/sh
IPANY="$(dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv4="$(dig -4 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
GOOGv6="$(dig -6 @ns1.google.com -t txt o-o.myaddr.l.google.com +short | tr -d \")"
AKAMv4="$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)"
CSCOv4="$(dig -4 @resolver1.opendns.com -t a myip.opendns.com +short)"
CSCOv6="$(dig -6 @resolver1.opendns.com -t aaaa myip.opendns.com +short)"
printf '$GOOG:\t%s\t%s\t%s\n' "${IPANY}" "${GOOGv4}" "${GOOGv6}"
printf '$AKAM:\t%s\n$CSCO:\t%s\t%s\n' "${AKAMv4}" "${CSCOv4}" "${CSCOv6}"
यदि आप एक निजी IP पता के लिए देख रहे हैं, या बॉक्स करने के लिए आवंटित सभी IP पतों का एक सेट के लिए, आप में से कुछ संयोजन इस्तेमाल कर सकते हैं ifconfig
, (BSD और जीएनयू / लिनक्स पर) ip addr
(जीएनयू / लिनक्स पर), hostname
(विकल्प -i
और -I
पर GNU / Linux) और netstat
यह देखने के लिए कि क्या चल रहा है।
hostname -I >> file_name
यह वह सब कुछ करेगा जो आप चाहते हैं
hostname: invalid option -- 'l'
...