मुझे शेल स्क्रिप्ट में अपना बाहरी आईपी पता कैसे मिल सकता है?


273

मुझे एक शेल स्क्रिप्ट से अपना बाहरी आईपी पता खोजने की आवश्यकता है। फिलहाल मैं इस फ़ंक्शन का उपयोग करता हूं:

myip () { 
    lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}

लेकिन यह इस पर निर्भर करता perl-libwww, perl-html-format, perl-html-treeस्थापित किया। अपने बाहरी आईपी को और किन तरीकों से प्राप्त कर सकते हैं?


8
बाहरी आईपी से आपका क्या तात्पर्य है? अब तक दो उत्तर HTTP का उपयोग करते हैं। प्रतिक्रिया आपके ISP के प्रॉक्सी सर्वर का IP होने का अंत कर सकती है। (जो आप चाहते हैं वह हो सकता है।)
बिलपेपर

@bpg: मेरा मतलब है कि नेट राउटर का आईपी
यूजीन यारमैश

फिर आपको HTTPS का उपयोग करने वाली what-is-my-IP वेब सेवा की आवश्यकता होगी। काश, मैं किसी के बारे में नहीं जानता।
बिल्वपत्र


checkip.amazonaws.com इसका उपयोग प्रसिद्ध प्रदाता
arulraj.net

जवाबों:


441

मैं इसे सीधे DNS सर्वर से प्राप्त करने की सलाह दूंगा।

नीचे दिए गए अन्य उत्तरों में से अधिकांश में एक दूरस्थ सर्वर से HTTP पर जाना शामिल है। उनमें से कुछ को आउटपुट की पार्सिंग की आवश्यकता होती है, या सादे पाठ में सर्वर को प्रतिक्रिया देने के लिए उपयोगकर्ता-एजेंट हेडर पर भरोसा किया जाता है। वे बार-बार बदलते हैं (नीचे जाएं, अपना नाम बदलें, विज्ञापन डालें, आउटपुट स्वरूप बदल सकते हैं आदि)।

  1. DNS प्रतिक्रिया प्रोटोकॉल मानकीकृत है (प्रारूप संगत रहेगा)।
  2. ऐतिहासिक रूप से, DNS सेवाएं ( OpenDNS , Google सार्वजनिक DNS , ..) बहुत लंबे समय तक जीवित रहती हैं और अधिक स्थिर, अधिक स्केलेबल हैं, और आम तौर पर जो भी नए हिप whatismyip.com HTTP सेवा की तुलना में अधिक गर्म है, आज गर्म है।
  3. यह विधि स्वाभाविक रूप से तेज है (केवल कुछ मिलीसेकंड के द्वारा!)।

रिज़ॉल्वर के रूप में OpenDNS केdig साथ उपयोग करना :

dig @resolver1.opendns.com ANY myip.opendns.com +short

शायद अपने आप में यह उर्फ ​​है bashrcइसलिए इसे याद रखना आसान है

alias wanip='dig @resolver1.opendns.com ANY myip.opendns.com +short'

एक सादे आईपी पते के साथ प्रतिक्रिया करता है:

$ wanip
80.100.192.168 # or, 2606:4700:4700::1111

वाक्य - विन्यास

( Https://ss64.com/bash/dig.html से संक्षिप्त ) :

usage:  dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]

    q-type   one of (A, ANY, AAAA, TXT, MX, ...). Default: A.

    d-opt    ...
             +[no]short          (Display nothing except short form of answer)
             ...

    q-opt    one of:
             -4                  (use IPv4 query transport only)
             -6                  (use IPv6 query transport only)
             ...

ANYक्वेरी प्रकार या तो एक AAAA या एक एक रिकॉर्ड देता है। IPv4 या IPv6 कनेक्शन को विशेष रूप से पसंद करने के लिए, तदनुसार विकल्प -4या -6विकल्प का उपयोग करें।

प्रतिक्रिया के लिए IPv4 पता होना चाहिए, किसी के साथ बदलें A; IPv6 के लिए, इसे प्रतिस्थापित करें। ध्यान AAAAदें कि यह केवल कनेक्शन के लिए उपयोग किए गए पते को वापस कर सकता है। उदाहरण के लिए, IPv6 से कनेक्ट होने पर, यह A पता नहीं लौटा सकता है।

वैकल्पिक सर्वर और उदाहरण

OpenDNS के अलावा, अकामाई और Google द्वारा दी गई समान DNS सेवाएं हैं:

$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168

$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"

उदाहरण उर्फ ​​जो विशेष रूप से IPv4 पते का अनुरोध करता है:

alias wanip4='dig @resolver1.opendns.com A myip.opendns.com +short -4'

$ wanip4
80.100.192.168

और IPv6 के लिए:

alias wanip6='dig @resolver1.opendns.com AAAA myip.opendns.com +short -6'

$ wanip6
2606:4700:4700::1111

समस्या निवारण

यदि कमांड किसी कारण से काम नहीं कर रहा है, तो अपस्ट्रीम प्रदाता, कमांड-लाइन टूल, या कुछ और के साथ कोई समस्या हो सकती है। यह समझने में मदद करने के लिए कि यह क्यों काम नहीं कर रहा है, +shortDNS क्वेरी के विवरण को प्रकट करने के लिए विकल्प के बिना कमांड चलाएं । उदाहरण के लिए:

$ dig @resolver1.opendns.com ANY myip.opendns.com

;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR

;; QUESTION SECTION:
;myip.opendns.com.      IN  ANY

;; ANSWER SECTION:
myip.opendns.com.   0   IN  AAAA    2606:4700:4700::1111

;; Query time: 4 msec
;; WHEN: Fri Apr 11 00:00:01 GMT 2011

18
आप सही कह रहे हैं कि यह बहुत तेज है ..
राहुल पाटिल

4
@ क्रिंकल एक उत्कृष्ट जवाब है। क्या myip.opendns.comGoogles Public DNS में एक समान है ?
कन्नन मोहन

12
मैंने इसे ~ 19x से अधिक तेज पाया curl http://canhazip.com। देखें askubuntu.com/a/427092/2273
एडम Monsen

3
जब तक आप 80 पोर्ट करने के लिए बाध्य न हों, इस स्वच्छ / बिना निर्भरता के दृष्टिकोण से बहुत बेहतर प्यार करते हैं
बाइनरीनोमली

5
कृपया ध्यान दें कि कुछ मामलों में NAT प्रदान करने वाले राउटर भी DNS प्रतिक्रियाओं का अनुवाद करेंगे (आप wiki.nil.com/Network_address_translation_of_DNS_responses पर नज़र डाल सकते हैं ); इस मामले में आपको कुछ ऐसे उत्तर पर वापस जाना चाहिए जो DNS के अलावा अन्य दृष्टिकोण की सिफारिश करते हैं।
रजवान स्टेफनेस्कु

146

नोट: यह के बारे में है बाहरी आईपी पते (एक है कि इंटरनेट पर सर्वरों को देखने जब आप उन्हें करने के लिए कनेक्ट) - अगर आप चाहते हैं आंतरिक आईपी पते (एक है कि अपने स्वयं के कंप्यूटर कनेक्शन के लिए उपयोग कर रहा है, जो अलग अलग हो सकता है) को देखने के लिए इस जवाब दो

टीएल; डीआर - 2015 में सबसे तेज़ तरीके

DNS का उपयोग करने वाली सबसे तेज़ विधि:

dig +short myip.opendns.com @resolver1.opendns.com

या एक्सटीरियर का उपयोग करना :

externalip dns

सबसे तेज़ HTTP का उपयोग करना:

curl -s http://whatismyip.akamai.com/

या एक्सटीरियर का उपयोग करना:

externalip http

वैध प्रमाणपत्र के साथ HTTPS का सबसे तेज़ उपयोग:

curl -s https://4.ifcfg.me/

या एक्सटीरियर का उपयोग करना:

externalip https

टेलनेट का उपयोग करना:

ncकमांड के साथ :

nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4

या एक्सटीरियर का उपयोग करना:

externalip telnet

telnetकमांड के साथ :

telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4

FTP का उपयोग करना:

echo close | ftp 4.ifcfg.me | awk '{print $4; exit}'

या एक्सटीरियर का उपयोग करना:

externalip ftp

उपरोक्त सभी को मेरी बाहरी स्क्रिप्ट का उपयोग करके चलाया जा सकता है :

externalip dns
externalip http
externalip https
externalip telnet
externalip ftp

अब एक लंबी कहानी ...

अलग-अलग सर्वरों के बहुत सारे विकल्प हैं जो विशेष रूप से HTTP के माध्यम से यहाँ या कहीं और पोस्ट किए गए हैं।

मैंने यह देखने के लिए एक बेंचमार्क बनाया कि क्या उनमें से कोई भी दूसरों से बेहतर है और मैं परिणामों से हैरान था। उदाहरण के लिए सबसे व्यापक रूप से अनुशंसित ifconfig.me में से एक मेरे लिए लगभग हमेशा सबसे धीमा था, कभी-कभी प्रतिक्रिया देने में कई सेकंड लगते हैं। कई HTTPS पर काम नहीं करते हैं, या काम करते हैं, लेकिन अमान्य प्रमाण पत्र हैं। कुछ में बहुत असंगत प्रतिक्रिया समय होता है।

मानक

HTTP और HTTPS

यह मेरी बाहरी-बेंचमार्क स्क्रिप्ट का स्रोत है जिसका मैंने उपयोग किया है:

आप इसे स्वयं देख सकते हैं कि यहां बताई गई कौन सी सेवाएं उपयोग करने लायक हैं:

wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark

मेरे परिणाम जो मुझे २०१५-०४-०३ को वारसॉ से मिले थे - निर्दोषों की सुरक्षा के लिए पते बदल दिए गए हैं:

सर्वश्रेष्ठ http प्रतिक्रिया समय:

0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'

सर्वश्रेष्ठ https प्रतिक्रिया समय:

0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''

(नोट: खाली सामग्री के साथ कुछ तेज़ प्रतिक्रियाएं हैं - जो अमान्य हैं।)

सबसे अच्छा औसत पिंग समय:

10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

ये परिणाम हैं जो मुझे एम्स्टर्डम से 2015-04-03 को मिले थे:

सर्वश्रेष्ठ http प्रतिक्रिया समय:

0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'

सर्वश्रेष्ठ https प्रतिक्रिया समय:

0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''

सबसे अच्छा औसत पिंग समय:

1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/

(999999 पिंग का मतलब 100% पैकेट नुकसान है।)

डीएनएस

यहां तुलना के लिए कई बार दूसरे तरीके अपनाते हैं - 2015-06-16 को वारसॉ और एम्स्टर्डम से परीक्षण किया गया।

का उपयोग करते हुए:

time dig +short myip.opendns.com @resolver1.opendns.com

आमतौर पर (वास्तविक दीवार घड़ी समय) के बारे में:

  • वारसा से 0.035 से
  • एम्सटर्डम से 0.015 से

वहाँ वास्तव में चार resolvers कि इस तरह से इस्तेमाल किया जा सकता है:

  • resolver1.opendns.com
  • resolver2.opendns.com
  • resolver3.opendns.com
  • resolver4.opendns.com

वे सभी वारसॉ और एम्स्टर्डम में एक ही प्रतिक्रिया समय देते हैं लेकिन अन्य स्थानों में ऐसा नहीं हो सकता है।

208.67.222.222 - अपने डोमेन नाम के बजाय resolver1.opendns.com का IP तेज है:

  • वारसॉ से 0.023s
  • एम्स्टर्डम से 0.009 s

लेकिन भविष्य में काम नहीं कर सकता है अगर आईपी कभी बदलता है (हालांकि यह एक प्रसिद्ध डीएनएस रिज़ॉल्वर के लिए संभावना नहीं हो सकता है - शायद मुझे अपनी बाहरी स्क्रिप्ट में आईपी का उपयोग करना चाहिए - कृपया टिप्पणी करें)।

टेलनेट

आमतौर पर टेलनेट ncया telnetकमांड (ऊपर देखें) लेता है:

  • वारसॉ से 0.103
  • एम्स्टर्डम से 0.035s

(के बीच कोई उल्लेखनीय अंतर नहीं है ncऔर telnetआदेशों।)

एफ़टीपी

  • वारसा से 0.104
  • एम्स्टर्डम से 0.036s

कार्यक्षेत्र नाम

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

टिप्पणियाँ

यदि आप अपने स्थान से कुछ दिलचस्प परिणाम देखते हैं, या यदि आपको लगता है कि मेरे द्वारा चुने गए के बजाय कुछ अन्य होस्ट की सिफारिश की जानी चाहिए, तो कृपया एक टिप्पणी पोस्ट करें। यदि कोई महत्वपूर्ण सेवा गायब है, तो कृपया टिप्पणी करें या GitHub पर एक समस्या पोस्ट करें । मैं इस पोस्ट को सर्वश्रेष्ठ प्रदर्शन करने वाली सेवाओं की वर्तमान पसंद के साथ अपडेट रखना चाहता हूं।


2
क्या आपने क्रिंकल के जवाबmyip.opendns.com में DNS विधि को बेंचमार्क किया ? वर्तमान में ऐसा लगता है कि इस पद्धति के लिए किसी अन्य प्रदाता से अनजान होने के कारण यह विजेता-दर-डिफ़ॉल्ट है, लेकिन फिर भी अन्य तरीकों से तुलना करना उपयोगी होगा।
जेम्स हाई

@JamesHaigh सुझाव के लिए धन्यवाद। मैंने DNS और अन्य तरीकों (telnet, ftp) को उत्तर में जोड़ा। सबसे तेज़ विधि रिज़ॉल्वर के सीधे आईपी पते (डोमेन नाम के बजाय) का उपयोग करके डीएनएस लगती है।
आरएसपी

आपको canhazip.com / canhazip.com और साथ ही (HTTP और HTTPS) टेस्ट / टेस्ट करना चाहिए ।
xxdesmus

आप अपनी सूची में myip.addr.space जोड़ सकते हैं । मैंने इसे स्वयं बनाया क्योंकि मैं उस समय किसी भी अन्य व्यक्ति से संतुष्ट नहीं था।
माइकल हैम्पटन

कभी-कभी मुझे dig +short myip.opendns.com @resolver1.opendns.com(36.86.63.180), dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short(118.98.115.34), और curl http://canhazip.com(36.71.64.71) का उपयोग करके अलग-अलग परिणाम मिलते हैं। मैं कैसे तय कर सकता हूं कि कौन सा सही है।
सुतंडियनो

80
 curl -s http://whatismijnip.nl |cut -d " " -f 5

डच काम करने वाली साइट की जगह।


3
+1 मैं whatismyip.com के बारे में जानता था, लेकिन whatismyip.org नहीं, यह बहुत बढ़िया है।
जूलियन

उस एक के बारे में कभी नहीं पता था! महान साइट!
bbosak

2
@MaciekSawicki क्या -sइस मामले में वास्तव में विकल्प आवश्यक है? मैंने अपने फेडोरा 15 - बैश 4.2.10 (1) में इसके साथ / इसके बिना प्रयास किया और इसने दोनों तरीकों से काम किया।
ztank1013

4
सीएलआई के माध्यम से अब काम नहीं करता है, लेकिन वेब ब्राउज़र से वेबपेज पर जाना काम करता है। मैं का उपयोग कर रहा हूँ OpenSUSE 12.1 x64।
SaultDon

5
whatismyip.comने बाहरी आईपी की जांच के लिए मुफ्त सेवा को हटा दिया है । इसलिए, मुझे डर है कि यह अब सही नहीं है। icanhazip.comअभी भी काम करता है।
दासोंग

54

चूंकि whatsmyip.org और ifconfig.me पहले ही उल्लेख किया गया है:

curl -s icanhazip.com

4
एक और एक: ip.appspot.com या ip.appspot.com
Lekensteyn

1
ये दोनों IPv6 को सपोर्ट करते हैं।
जोश ली

1
@JoshLee, ध्यान दें कि icanhazip भी ipv6 का समर्थन करता है। इसके अलावा, ओपी को एक नोट, ये सभी curlसमाधान (हालांकि वैध) अभी भी एक बाहरी पुस्तकालय ( libcurl) पर निर्भर हैं ।
हालोसगॉस्ट

एक और एक: ifcfg.me
Eun

18

यदि आप whatismyip.org के विकल्प के रूप में ifconfig.me का उपयोग कर सकते हैं ।

curl -s http://ifconfig.me

इसके अलावा ifconfig.me में कुछ अतिरिक्त कार्यात्मक हैं। यह जानने के लिए कि आप वेबसाइट पर और कौन सी जानकारी प्राप्त कर सकते हैं।


5
यह बेहद धीमी है । मुझे अक्सर 30 सेकंड में प्रतिक्रिया समय मिलता है, कभी-कभी एक मिनट से भी अधिक! कभी-कभी यह आधा सेकंड (जो अभी भी बहुत कुछ है), और फिर यह 15 सेकंड या ऐसा है। विभिन्न स्थानों से इसका परीक्षण किया जाता है। अधिक जानकारी और बेंचमार्क के लिए मेरा जवाब
आरपी

15
wget -O - -q http://whatismyip.org/

3
मैं अपने आईपी को इस तरह से प्राप्त करने में सक्षम नहीं था, बस इसे इस प्रकार देता <img src='ipimg.php'/>
हूं

यह जादू के कुछ सभ्य बहुत से काम कर रहा है, लेकिन यह आसान नहीं था। क्या आपको इस सेवा का उपयोग करने पर जोर देना चाहिए, उस लाइन को स्क्रिप्ट में लपेटना सुनिश्चित करें:$ curl -s http://whatismyip.org | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}'
वाक्य रचना

13

अमेज़न AWS

curl https://checkip.amazonaws.com

नमूना उत्पादन:

123.123.123.123

क्योंकि मुझे यह पसंद है:

  • यह सिर्फ प्लेटेक्स्ट आईपी लौटाता है, और कुछ नहीं
  • यह एक प्रसिद्ध प्रदाता से है जो जल्द ही कभी भी ऑफ़लाइन जाने की संभावना नहीं है

9

मैं curlmyip.com का उपयोग करना पसंद करता हूं। यह उतना ही सरल है:

curl curlmyip.com

यह याद रखने के लिए छोटा और सरल है।


bashOP- के इरादे में उपयोग के लिए, आप -sअन्य उत्तरों में वर्णित विकल्प के बिना नहीं कर सकते ।
सर्ज स्ट्रोबंड्ट

3
@SergeStroobandt हाँ आप कर सकते हैं। सभी -sस्विच करता है इसे मूक मोड में चलाया जाता है, अर्थात। त्रुटि संदेश प्रदर्शित नहीं किया जाएगा। तो यह नीचे आता है कि वह कैसे अपनी स्क्रिप्ट त्रुटियों को संभालना चाहता है। कमांड खुद ही एक IP एड्रेस को मज़बूती से इस्तेमाल करते हुए लौटा देगा -s
गैरेट फोगेरली

1
अब तक, यह साइट कई परीक्षणों में सबसे विश्वसनीय थी।
आमोस शापिरा

9
curl ident.me

या

curl ifconfig.me

या

curl tnx.nl/ip

या

curl ipecho.net/plain

या

curl ip.appspot.com

या

curl whatismyip.akamai.com

या

curl icanhazip.com

या

curl wgetip.com

या

curl ip.tyk.nu

या

curl curlmyip.com

या

curl corz.org/ip

या

curl bot.whatismyipaddress.com

संदर्भ


6
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1

ब्लैंक आउटपुट यहां, हालांकि साइट काम करती है। कोई विचार क्यों? मैं एक प्रॉक्सी के पीछे हूँ, अगर यह प्रासंगिक है, लेकिन wget icanhazip.comकाम करता है।
l0b0

@ l0b0 इस | tail -n1भाग को छोड़ने का प्रयास करें और देखें कि आपको छद्म से क्या मिलता है
यूजीन यारमाश

कुछ नहीं, बस बाहर निकलें कोड 1. के लिए Ditto netcat icanhazip.com 80। ऐसा लगता है कि यह अनदेखा है $http_proxyऔर दोस्तों, क्योंकि प्रॉक्सी और पोर्ट को निर्दिष्ट करने के साथ -xही एक फांसी की प्रक्रिया हुई।
l0b0

@ l0b0: netcat proxy 3128 <<<$'GET http://icanhazip.com/ HTTP/1.0\n\n' | tail -n 1एक मूल HTTP प्रॉक्सी के लिए (यह मानकर कि यह पोर्ट 3128 पर चल रहा है)। आपको स्पष्ट रूप से प्रॉक्सी बैक का आईपी पता मिलेगा, हालाँकि।
ट्रिपल

1
HTTP 1.0 में Host:अनुरोध शीर्षलेख नहीं है - नाम आधारित आभासी होस्टिंग HTTP 1.1 में प्रमुख सुधारों में से एक था। HTTP / 1.1 को निर्दिष्ट करने के लिए अनुरोध को बदलें, या होस्ट हेडर को हटा दें (मैं पूर्व की सिफारिश करता हूं)।
बजे एक CVn

4

यदि इन सभी सुझावों को पढ़ने के बाद आप और भी अधिक पढ़ना चाहते हैं, तो यकीनन ओवर-इंजीनियर बैश स्क्रिप्ट है।

इसमें DNS और HTTP सर्वरों की एक सूची है जो फरवरी 2017 तक ठीक काम करते हैं।

यदि आपके पास है dig, तो यह पहली बार DNS की कोशिश करता है जो कि लगभग विभिन्न HTTP सेवाओं के तेजी से परिमाण का एक क्रम है।

यह पहले उत्तर में इसे बाहर निकलता है।

यदि आपके पास नहीं है digया यदि सभी DNS सर्वर विफल हैं, तो यह तब तक HTTP सेवाओं की कोशिश करता है जब तक कि उसे उत्तर नहीं मिलता।

सर्वरों को वर्णानुक्रम में सूचीबद्ध किया गया है, लेकिन उपयोग करने से पहले फेरबदल किया जाता है ताकि हमेशा उसी का उपयोग न किया जा सके।

#!/bin/bash

## Get my external IP

timeout=2   # seconds to wait for a reply before trying next server
verbose=1   # prints which server was used to STDERR

dnslist=(
    "dig +short            myip.opendns.com        @resolver1.opendns.com"
    "dig +short            myip.opendns.com        @resolver2.opendns.com"
    "dig +short            myip.opendns.com        @resolver3.opendns.com"
    "dig +short            myip.opendns.com        @resolver4.opendns.com"
    "dig +short    -t txt  o-o.myaddr.l.google.com @ns1.google.com"
    "dig +short -4 -t a    whoami.akamai.net       @ns1-1.akamaitech.net"
    "dig +short            whoami.akamai.net       @ns1-1.akamaitech.net"
)

httplist=(
    4.ifcfg.me
    alma.ch/myip.cgi
    api.infoip.io/ip
    api.ipify.org
    bot.whatismyipaddress.com
    canhazip.com
    checkip.amazonaws.com
    eth0.me
    icanhazip.com
    ident.me
    ipecho.net/plain
    ipinfo.io/ip
    ipof.in/txt
    ip.tyk.nu
    l2.io/ip
    smart-ip.net/myip
    tnx.nl/ip
    wgetip.com
    whatismyip.akamai.com
)



# function to shuffle the global array "array"
shuffle() {
   local i tmp size max rand
   size=${#array[*]}
   max=$(( 32768 / size * size ))
   for ((i=size-1; i>0; i--)); do
      while (( (rand=$RANDOM) >= max )); do :; done
      rand=$(( rand % (i+1) ))
      tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp
   done
}


## if we have dig and a list of dns methods, try that first
if hash dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
    eval array=( \"\${dnslist[@]}\" )
    shuffle

    for cmd in "${array[@]}"; do
        [ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
        ip=$(timeout $timeout $cmd)
        if [ -n "$ip" ]; then
            echo $ip
            exit
        fi
    done
fi


# if we haven't succeeded with DNS, try HTTP

if [ ${#httplist[*]} == 0 ]; then
    echo "No hosts in httplist array!" >&2
    exit 1
fi

# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);

if [ -z "$curl_or_wget" ]; then
    echo "Neither curl nor wget found. Cannot use http method." >&2
    exit 1
fi

eval array=( \"\${httplist[@]}\" )
shuffle

for url in "${array[@]}"; do
    [ "$verbose" == 1 ] && echo Trying: $curl_or_wget  "$url" 1>&2
    ip=$(timeout $timeout $curl_or_wget "$url")
    if [ -n "$ip" ]; then
        echo $ip
        exit
    fi
done

नमूना उपयोग (मैंने स्क्रिप्ट कहा myip):

$ myip
Trying: dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"

$ ip=$(myip); echo "IP = '$ip'"
Trying: dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'

verboseउपयोग किए गए सर्वर को प्रिंट करने से बचने के लिए स्क्रिप्ट के शीर्ष पर वैरिएबल पर टिप्पणी करें।

अपडेट: यह स्क्रिप्ट अब गितुब पर भी है जहां मैं जरूरत पड़ने पर इसे अपडेट कर सकता हूं:
https://github.com/mivk/myip


3

यदि आप कुछ संभावित नुकसान से बचने के लिए HTTPS का उपयोग करना चाहते हैं:

_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"

2
शायद आप इस बात पर विस्तार से बता सकते हैं कि संभावित नुकसान क्या हैं जिनसे आप यहाँ बच रहे हैं?
कालेब

डोमेन ipcheckit.com जाहिरा तौर पर बिक्री के लिए है और अब सेवा को प्रदर्शित करने वाले आईपी पते को होस्ट नहीं करता है।
11

आह, लिखावट लिपियों के नुकसान :)
ларослав Рахматуллин

@Chris डाउन तकनीक अभी भी मान्य है, आपको इसका उपयोग करने के लिए बस एक और एसएसएल सक्षम साइट की आवश्यकता है।
कालेब

3

यहां एक और विकल्प है जो होस्ट्स पर निर्भर करता है जो व्यवसाय गतिशील आईपी को प्रबंधित करने के आसपास हल करता है, बल्कि "सार्वजनिक सेवा" साइटें जो कि दूर जा सकती हैं या प्रारूप बदल सकती हैं।

  1. अपने सर्वर को कई मुफ्त डायनामिक डीएनएस सेवाओं में से एक में पंजीकृत करें (जैसे no-ip.com) यह आपको xxx.no-ip.org जैसी DNS प्रविष्टि देगा।
  2. सेवा के डायनेमिक अपडेट टूल को स्थापित करें (आईपी सेवा में परिवर्तन की रिपोर्ट करता है)।

एक स्क्रिप्ट में आईपी पता प्राप्त करने के लिए, बस करें:

external_ip=`dig +short xxx.no-ip.org`

गतिशील आईपी बदल गया है और कुछ कॉन्फ़िगरेशन प्रविष्टियों को बदलने की आवश्यकता है, यह जांचने के लिए क्रॉन जॉब में उपयोग के लिए बढ़िया है।


3

यह हमेशा मेरे लिए काम करता है, मैं अपने आईपी पते को प्राप्त करने के लिए अपनी शंकु में इसका उपयोग करता हूं।

wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'

+1 यद्यपि इतनी अनाड़ी दिख रही है, यह दृष्टिकोण मेरे लिए भी कई बार जीवन-रक्षक रहा है। क्योंकि इंटरनेट WWW नहीं है । आपके पास इंटरनेट का उपयोग हो सकता है, लेकिन आप (आमतौर पर सर्वर रूम में) एक गैर-जीयूआई कंसोल के लिए बर्बाद हो सकते हैं, और इस मामले में चेकआईपी सेवा URL में से एक को दिल से याद रखना महत्वपूर्ण है । और जैसा कि यह एक बहुत ही सामान्य है, यह केवल प्रतीत होता है , क्योंकि आपको एक से एक से अधिक डायंड्स याद रखने की अधिक संभावना होगी amazonaws। यानि अगर आपके पास इसके लिए google का NO तरीका नहीं है। (नहीं भी lynx)।
वाक्यविन्यास

3

चूंकि मैं कनेक्शन या सेवा पर भरोसा नहीं करता, इसलिए मैं निम्नलिखित कोड का उपयोग करता हूं, जो विभिन्न सेवाओं का उपयोग करके आईपी प्राप्त करने की कोशिश करता है (अधिक जोड़ने के लिए स्वतंत्र महसूस करें):

# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)

while [ -z "$IP" ] # If no IP found yet, keep trying!
do
    sleep 30
    IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$((  RANDOM % ${#arr[@]}  ))]})  
done

echo -n "$IP" >  /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP" 

अधिक मजबूती जोड़ने के लिए (जैसे कि यदि सेवाओं में से कोई एक अपना प्रारूप बदलता है), तो आप जाँच सकते हैं कि $IPनिम्नलिखित फ़ंक्शन का उपयोग करके एक वैध आईपी है :

# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ `echo $1 | grep -o '\.' | wc -l` -ne 3 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 3 dots).";
        exit 1;
elif [ `echo $1 | tr '.' ' ' | wc -w` -ne 4 ]; then
        echo "Parameter '$1' does not look like an IP Address (does not contain 4 octets).";
        exit 1;
else
        for OCTET in `echo $1 | tr '.' ' '`; do
                if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' is not numeric).";
                        exit 1;
                elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
                        echo "Parameter '$1' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
                        exit 1;
                fi
        done
fi

return 0;
}

3

ifcfg.me समर्थन करता है:

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

IPv4 और IPv6, कर्ल के साथ और भी सामान: ifcfg.me/?


क्रिंकल के उत्तर में nslookupविधि कैसे संबंधित है ? वे दोनों DNS का उपयोग करते हैं, है ना? तो क्या मैं कुछ विकल्प पारित कर सकता हूं ताकि यह वही DNS रिकॉर्ड प्राप्त कर सके जो यहां कर रहा है? digdignslookup
जेम्स हैघ

dig +short . @ifcfg.meयदि आप चाहें तो हाँ का उपयोग कर सकते हैं
यूं

2

मैं अपने परिवार के लिए एक क्लाउड सेवा चलाता हूं और मैंने यह त्वरित स्क्रिप्ट बनाई है जिसे मैं cronहर सुबह 5 बजे चलाता हूं क्योंकि मैं सस्ता हूं एक स्थिर आईपी नहीं खरीदूंगा।

यह सार्वजनिक IP को पकड़ लेता है, और इसे मेरे उपयोगकर्ताओं को ईमेल करता है। इसे हाइपरलिंक प्रारूप में ईमेल किया ताकि मेरी माँ को पोर्ट या कुछ भी लिखने की जरूरत न पड़े। शायद कोई और इसका इस्तेमाल कर सकता है।

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" user1@someemail.com, user2@ect.com

1

यह पॉपअप विंडो में वर्तमान आईपी पता दिखाएगा:

zenity --info --text "$(curl -s icanhazip.com)"

1

मेरे पास एक ऐसी सेवा है जो IP पते को JSON / XML या सादे पाठ के रूप में लौटाती है। आप उन्हें यहां पा सकते हैं

http://ipof.in/txt

/ Json और / xml वाला समान URL आपको अन्य प्रारूप भी देगा

यदि आप HTTPS चाहते हैं तो आप उसी URL का उपयोग कर सकते हैं जिसमें https उपसर्ग है। फायदा यह है कि अगर आप Wifi पर हैं तो भी आपको पब्लिक एड्रेस मिलेगा।

तो एक साधारण उर्फ ​​myip = "कर्ल https://ipof.in/txt " पर आपका आईपी मिलेगा


1

वैकल्पिक रूप से आप STUN का उपयोग कर सकते हैं जो इस प्रश्न का उत्तर स्वचालित रूप से देने के लिए आविष्कार किया गया था और इसका उपयोग बड़े पैमाने पर इंटरनेट संचार जैसे SIP और WebRTC द्वारा किया जाता है ।

Stunclient का उपयोग करते हुए (डेबियन / ubuntu पर apt-get install stuntman-client) बस करो:

$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541

A.B.C.Dस्थानीय जाल पर आपकी मशीन का IP पता कहां है और W.X.Y.Zवेबसाइटों से IP पता सर्वर है जैसे बाहर से देखें (और जिसे आप देख रहे हैं)। उपयोग करने से sedआप केवल एक आईपी पते तक के उत्पादन को कम कर सकते हैं:

stunclient stun.services.mozilla.com |
    sed -ne "s/^Mapped address: \(.*\):.*$/\1/p"

एक वैकल्पिक STUN लुकअप के लिए बेसिक कमांड लाइन टूल्स का उपयोग करने के लिए, AskUbuntu पर मेरा जवाब देखें (एक मजेदार व्यायाम के रूप में, उत्पादन के लिए नहीं)।


0

W3m Plaintext-Browser बैश के लिए बहुत अच्छा है। आप उपयोग कर सकते हैं grepऔर tailउत्तर को छोटा कर सकते हैं :

w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1


0

DNS पते का अनुवाद करने वाले NAT राउटर के पीछे भी DNS अनुरोध का उपयोग करना, यह काम कर सकता है:

$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t

या, आप इसके बजाय HTTP अनुरोध विधि का उपयोग कर सकते हैं:

$ curl -s ipinfo.io/ip
x.y.z.t

1
आप एक के बाद एक की सिफारिश क्यों करेंगे?
रोएमा

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