शेल स्क्रिप्ट में सार्वजनिक IP पता ढूँढना


39

मैं ifconfig या hostname -i कमांड का उपयोग करके अपना आईपी पता पा सकता हूं।

लेकिन मुझे अपना सार्वजनिक आईपी कैसे मिलेगा?

(मेरे पास एक स्थिर सार्वजनिक आईपी है, लेकिन मैं इसे यूनिक्स कमांड का उपयोग करके पता लगाना चाहता हूं)


क्या आप इस प्रोग्राम को करने की कोशिश कर रहे हैं?
एंड्रयू कीथ

शेल स्क्रिप्ट में हाँ
शांतनुओ

1
क्या आप लिनक्स, मैकओएसएक्स, फ्रीबीएसडी आदि का उपयोग कर रहे हैं? इन अलग-अलग OSes के लिए 'ifconfig' का आउटपुट अलग है, और MacOSX पर 'ip' कमांड मौजूद नहीं है। क्या आप अपने कंप्यूटर के आईपी की तलाश कर रहे हैं (आपको ifconfig, या कुछ और) पार्स करने के लिए एक शेल स्क्रिप्ट की आवश्यकता होगी, या आपका राउटर (नीचे दी गई वेबसाइटें काम कर सकती हैं)?
स्टेफन लासवर्स्की

जवाबों:


49

curl ifconfig.me

curl ifconfig.me/ip (सिर्फ आईपी के लिए)

curl ifconfig.me/all (अधिक जानकारी के लिए, समय लगता है)

अधिक आदेशों की यात्रा के लिए: http://ifconfig.me/#cli_wrap


1
IPv6 पतों के बारे में क्या?
20:

वह लिंक मर चुका है। आप इसकी जगह इसका उपयोग कर सकते हैं:curl http://checkip.amazonaws.com/
फरहान

@ Farhan.K कृपया इसे उत्तर के रूप में पोस्ट करें क्योंकि यह संभवतः सबसे अच्छा उत्तर है। यदि आप नहीं करते हैं, तो मैं आपके नाम का उल्लेख करूंगा और सुझाव
दूंगा

@ अलीओस्ताद इसे पोस्ट करने के लिए स्वतंत्र महसूस कर रहा है :)
फरहान।

@ फरहान। अर्घ, संरक्षित: /
अलीस्तद

26

आप निवेदन कर सकते हैं myip.opendns.com। OpenDNS से। dig @208.67.222.220 myip.opendns.com


8
वह सिर्फ शांत है। किसी भी आसान संस्करण को याद रखने के लिए, आप इसमें डाल सकते हैं dig @resolver1.opendns.com myip.opendns.com। या विंडोज पर nslookup myip.opendns.com resolver1.opendns.com:।
माइकल क्रॉपैट

2
मेरे लिए सबसे अच्छा काम किया: dig @208.67.222.220 myip.opendns.com +shortपूरे जवाब के माध्यम से जाने के बिना सीधे आईपी प्राप्त करने के लिए।
क्रिस्टोफर चिचे

18

dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short

dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

dig -4 @resolver1.opendns.com -t a myip.opendns.com +short


ध्यान दें कि उपरोक्त केवल वर्तमान में IPv4 के लिए काम करता है (इनमें से कोई भी रिज़ॉल्वर वर्तमान में IPv6 नहीं है, लेकिन यदि आप छोड़ देते हैं -4और स्पष्ट है -t a, तो आप भविष्य में इसे तोड़ने का जोखिम उठाते हैं (Google के अपवाद के साथ txt, जो वास्तव में काम कर सकते हैं) IPv6 एक दिन, यदि Google द्वारा ठीक से सक्षम किया गया है))।

ध्यान दें कि myip.opendns.comकेवल के माध्यम से resolvable है resolver1.opendns.com, और नहीं के साथ auth1.opendns.com- तो, ​​वे कुछ DNS अपहरण और अपने स्वयं के डोमेन नाम के बीच-बीच में करते हुए प्रतीत होते हैं! इस प्रकार, आप इसे एक यादृच्छिक रिज़ॉल्वर के आईपी को खोजने के लिए उपयोग नहीं कर सकते, क्योंकि resolver1.opendns.comयह आधिकारिक नहीं है myip.opendns.com

ध्यान दें कि o-o.myaddr.l.google.comसबसे लचीला और भविष्य-प्रूफ दृष्टिकोण जैसा दिखता है; यह परीक्षण के लिए भी अच्छा है कि क्या आपका DNS रिसॉल्वर क्लाइंट सबनेट के लिए प्रयोगात्मक EDNS0 एक्सटेंशन का समर्थन करता है (जो बहुत कम रिज़ॉल्वर के लिए समर्थन है):

% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options:  printcmd
o-o.myaddr.l.google.com. 60     IN      TXT     "74.125.189.16"
o-o.myaddr.l.google.com. 60     IN      TXT     "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec  8 20:38:46 2013
;; MSG SIZE  rcvd: 114

2
@ मैट 3 ओ 12 <मैंने ओपनडएनएस पाया dig +short AAAA myip.opendns.com @2620:0:ccc::2:।
बफ

आजकल Google से TXT रिकॉर्ड प्राप्त करने की विधि IPv4 और IPv6 दोनों का समर्थन करती है, इसलिए आपको एक विशिष्ट IP संस्करण की आवश्यकता है -4या -6यदि आपको निर्दिष्ट करना चाहिए ।
मार्टिन

12

यदि आपके पास इंटरनेट का उपयोग है, तो एक बहुत ही सरल एवर है:

curl icanhazip.com

ध्यान रखें, अपने आईपी के लिए तीसरे पक्ष के स्रोतों पर भरोसा करना समस्याग्रस्त हो सकता है, खासकर यदि आपके डेटा के साथ ऐसा करने का विशेष अर्थ है।

एक अधिक भरोसेमंद तरीका एक ज्ञात, भरोसेमंद डीएनएस सर्वर (आदर्श रूप से डीएनएसएसईसी चल रहा है) को चुनना है और इसके साथ बॉक्स के होस्टनाम को क्वेरी करना है, बशर्ते आपके डीएनएस सर्वर में ऐसी प्रविष्टियां हों;

dig @trustworthysource.com +short `hostname`

8

मैंने इसके लिए एक सरल और तेज़ वेबसेवा लिखी।

curl ident.me

आप अपने IPv4 के लिए पूछ सकते हैं:

curl v4.ident.me

या IPv6:

curl v6.ident.me

और एपीआई http://api.ident.me/ पर प्रलेखित है


7

एक तरीका: http://www.whatismyip.com/


1
दूसरा तरीका: ipchicken.com
बॉबी

या, यदि आप XML API, ip-address.domaintools.com/myip.xml चाहते हैं । मैंने वहां एक को देखा जो सादा-पाठ लौटाता है।
ceejayoz

7
चौथा तरीका: moanmyip.com
मिकीबी

1
नियमों का पालन करें या आपको कुछ भी नहीं मिलेगा। whatismyip.com/faq/automation.asp
लदाददादा

5

अगर

  1. आपके पास केवल एक सार्वजनिक IP पता है और
  2. आप सीधे इंटरनेट से जुड़े हैं (कोई नेट / प्रॉक्सी / वीपीएन आदि नहीं)

तब आप सिर्फ अपने सभी इंटरफेस के आईपी पतों की सूची प्राप्त करने के लिए इंटरफेस ("इनट एड्र:" भाग) के आईपी पते के लिए ifconfig से आउटपुट पार्स कर सकते हैं। एक आईपी पता जो निजी श्रेणी में नहीं है (देखें http://en.wikipedia.org/wiki/IP_address#IPv4_pStreet_addresses ) आपका सार्वजनिक आईपी पता है।

उसी सूची के माध्यम से भी प्राप्त किया जा सकता है

ip addr show

जो पार्स करना आसान हो सकता है।

यदि आपके पास प्रत्यक्ष इंटरनेट कनेक्शन (NAT आदि) नहीं है, तो बाहरी मदद के बिना आपके सार्वजनिक आईपी पते को खोजने का कोई तरीका नहीं है (क्योंकि आपका कंप्यूटर इसे नहीं जानता है)। फिर आपको इसे अन्य उत्तरों की तरह करना होगा।


4

मैंने एसटीयूएन प्रोटोकॉल का उपयोग करके थोड़ा अलग दृष्टिकोण लिया जो एनएटी ट्रैवर्सल के लिए डिज़ाइन किया गया था। यदि आप उबंटू का उपयोग करते हैं तो आप टाइप करके पैकेज "स्टन" को स्थापित कर सकते हैं:

sudo apt-get install stun

पैकेज एक STUN सर्वर स्थापित करता है जिसकी आपको शायद आवश्यकता नहीं है, लेकिन यह STUN परीक्षण क्लाइंट के साथ भी आता है जिसका उपयोग मैंने इस समस्या को हल करने के लिए किया था। अब आप अपने सार्वजनिक IP को एक (इतना सरल) कमांड के साथ पुनः प्राप्त कर सकते हैं:

stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq

अब, यह क्या करता है: stun सार्वजनिक STUN सर्वर "stunserver.org" से संपर्क करता है और अपने सार्वजनिक आईपी के साथ वापस उत्तर प्राप्त करता है, बाकी कमांड केवल आउटपुट से आईपी को फ़िल्टर करने के लिए है।


stun.l.google.com तेज है: D
Zibri

3

एक तरीका है, आप पेज पर एक अनुरोध कर सकते हैं

http://www.biranchi.com/ip.php

यह आपके सिस्टम का IP पता लौटाता है


यह एक प्रकार के पाठ / html ... के साथ सादा पाठ परोसता है ...
bortzmeyer

क्या यह आपके ब्राउज़र में आपके आईपी को प्रदर्शित नहीं कर रहा है?

2
लेकिन गलत प्रकार के साथ।
बोर्ट्जमेयर

@bortzmeyer उह, "सही प्रकार" क्या है? text/htmlउस छद्म एपीआई रिटर्न के लिए ठीक है - यह निश्चित रूप से XML या JSON नहीं है। text/plainहो सकता है, लेकिन यह पूरी तरह से प्रयोग करने योग्य है text/html
ceejayoz

3
एक पृष्ठ के लिए +1 जिसे ग्रीपिंग की आवश्यकता नहीं है। इसके अलावाwget -q -O - http://wgetip.com/
Xofer

3

Google अब आपका सार्वजनिक आईपी पता: http://www.google.com/search?q=ip प्रदर्शित करता है


यह मेरे लिए काम नहीं कर रहा है, या तो एक ब्राउज़र में या कर्ल के माध्यम से।
लदादादा

वह अजीब है। मेरा कहना है कि "आपका सार्वजनिक आईपी पता XX.XX.XXX.XX है - पहले सर्प से पहले शीर्ष पर अधिक जानें"।
जेक विल्सन

मेरे 3 जी कनेक्शन पर काम किया। अधिक अंक यहां जानें
लदादादा

Google किसी अजीब कारण के लिए केवल आपके आईपी-पते को दिखाता है जिसके आधार पर User-Agentपृष्ठ को स्ट्रिंग की आपूर्ति की जाती है। फ़ायरफ़ॉक्स के साथ, यह काम करता है; लेकिन SeaMonkey "फ़ायरफ़ॉक्स" स्ट्रिंग के साथ अक्षम ("general.useragent.compatMode.firefox" के माध्यम से गलत पर सेट), यह अचानक नहीं करता है। इसका कोई सुराग नहीं है कि Google स्पष्ट रूप से केवल किसी भी गेको के बजाय फ़ायरफ़ॉक्स के लिए इस तरह से सामान सक्षम करता है, क्योंकि गेको पर आधारित कई अन्य डेस्कटॉप ब्राउज़र हैं जो समान रूप से संगत हैं, जिनमें सीमोंकी शामिल हैं।
cnst

curl -qs " google.com/search?q=blowme"pgtr " () "" \ n | क्रेप क्लाइंट: कट -d ":" -f 2 | tr -d ""
Zibri

3

ठीक है ... मुझे पता है कि इस तथ्य के बाद रास्ता है और शायद पोस्टिंग के लायक भी नहीं है, लेकिन यहां मेरा काम करने वाला समाधान है।

#!/bin/sh

IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP

अच्छा और सरल।


2
यह आंतरिक IP पता देता है जो नहीं पूछा गया था। लेकिन, आपकी जानकारी के लिए, आप इसे कमांड hostname -I(राजधानी 'i') के साथ भी कर सकते हैं ।
रेडसेंड्रो

3

सबसे सरल तरीका है http://ifconfig.me/ का उपयोग करें , जैसा कि सुझाव दिया गया है।

इस पृष्ठ पर, आपको पता चल जाएगा कि आप किस जानकारी को पुनः प्राप्त करना चाहते हैं, इसके लिए किस कमांड का उपयोग करना है।

आईपी ​​के लिए:

कर्ल ifconfig.me
या
कर्ल ifconfig.me/ip

सार्वजनिक होस्टनाम के लिए:

कर्ल ifconfig.me/host

XML फ़ाइल में सभी informations के लिए:

कर्ल ifconfig.me/all.xml

आदि ... बस http://ifconfig.me देखें


2

मैं यह बहुत कुछ कर रहा हूं, और बहुत सारे उपकरणों से, इसलिए मैंने एक सर्वर पर अपनी दो सेवाएं दी हैं:

  1. वेबसर्वर के मूल में php फाइल:

    user@host:~$ cat index.php`
    <?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
    

    एक खोल पर उपयोग:

    $ curl -4 mydomain.com
    79.22.192.12
    

    ipv6 के साथ काम करना भी:

    $ curl mydomain.com
    2a01:e34:ee7d:180::3
    

    Netcat के साथ:

    $ echo "GET /" | nc myserver.com 80
    2a01:e34:ee7d:180::3
    

    सिस्को राउटर पर:

    router#more http://myserver.com/index.php
    79.22.192.12
    
  2. एक कस्टम टेलनेट सर्वर के साथ त्वरित हैक: xinetd स्पॉनिंग / usr / बिन / env:

    service telnet
    {
       server           = /usr/bin/env
       socket_type      = stream
       protocol         = tcp
       flags            = IPv6
       wait             = no
       port             = 23
       cps              = 3 30
       passenv          = %a
    }
    

    और फिर इसे टेलनेट करें:

    $ nc -4 myserver.com 23
    REMOTE_HOST=::ffff:79.22.192.12
    
    $ nc myserver.com 23
    REMOTE_HOST=2a01:e34:ee7d:180::3
    

    राउटर के साथ भी यही काम करता है:

    router#telnet myserver.com
    79.22.192.12
    

इस तरह से आप इसे अपने आंतरिक नेटवर्क पर काम कर सकते हैं, अगर कुछ नेट या प्रॉक्सी संचार में शामिल है और आप जानना चाहते हैं कि आईपी क्या दिखाई देता है।

इसके लिए किसी तीसरे पक्ष की सेवा की आवश्यकता नहीं है।


2

बाहरी स्रोतों पर भरोसा करने से बचने के लिए, मैं अपने राउटर में टेलनेट करने और इसके सार्वजनिक इंटरफ़ेस का आईपी पता प्राप्त करने के लिए उम्मीद का उपयोग करता हूं। यहाँ एक उदाहरण है उम्मीद स्क्रिप्ट:

#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]

spawn telnet $ip
expect "login:" {
    send "$username\r"
}
expect "Password:" {
    send "$password\r"
}
expect "#" {
    send "ifconfig ppp0 | grep inet\r"
    send "exit\r"
}
expect eof

मैं तब सार्वजनिक स्क्रिप्ट प्राप्त करने के लिए उपरोक्त स्क्रिप्ट को निष्पादित करता हूं:

./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1

बेशक, यह इस धारणा पर आधारित है कि मेरे पास राउटर की पहुंच है, और इसके लिनक्स-आधारित राउटर, ifconfig कमांड उपलब्ध है।


1


1

यदि आप जो चाहते हैं वह आपके राउटर पर बाहरी आईपी पते को खोजने के लिए है, तो आप या तो राउटर से अपने वान पते के लिए पूछ सकते हैं, या बाहर के किसी व्यक्ति से इसे आपके लिए प्राप्त करने के लिए कह सकते हैं।

मैन्युअल तरीके से आप ऊपर दी गई किसी भी साइट को ब्राउज़ कर सकते हैं जो इनकमिंग अनुरोध के आईपी को वापस कर देगा।

स्वचालित तरीके से, आप कोशिश कर सकते हैं:

wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\. 

जो आपको उस पंक्ति को प्राप्त करेगा जिसमें http प्रतिक्रिया पर आईपी पता शामिल है, फिर उसे सीड, ऑक, आदि के साथ पार्स करें


0

आप बाहरी प्रदाताओं का उपयोग करके अपने बाहरी आईपी की जांच करने के लिए सिर्फ शेल का उपयोग कर सकते हैं

#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80              
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line 
do  
    case "$line" in
        *"Your local IP address is"* ) 
            line="${line#*Your local IP address is&nbsp;}"
            line=${line%%</p>*}
            echo "Your ip is: $line"
            exec >&5-
            exit
            ;;            
    esac
done <&5

उत्पादन


0
lynx - dump http://www.whatismyip.com/ | grep -o '[0-9]। * \। [0-9]। * \ _। [0-9]। * \ _। [0-9]। *
-m1 

0

मैं यह करता हूँ। यह सिर्फ मुझे किसी भी तीसरे पक्ष की भागीदारी के बिना आईपी देता है ..

आईपी ​​एड्र शो | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | कट -f1 -d "/"


3
वह अपना सार्वजनिक आईपी पता चाहता है। स्थानीय नहीं।
जेक विल्सन

0
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

0

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

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

2) सेवा के गतिशील अपडेट टूल को स्थापित करें (आईपी सेवा में परिवर्तन की रिपोर्ट करता है)।

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

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

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


0

OS X पर निजी और सार्वजनिक दोनों IP प्राप्त करने के लिए दो सरल समाधान दिए गए हैं (यदि आप LaunchBar का उपयोग करते हैं तो बोनस कोड के साथ)।

निजी आईपी

$ ipconfig getifaddr $1
# $1=en0 || en1 || en*

लॉन्चबार स्क्रिप्ट

#!/bin/sh

title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)

open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"

सार्वजनिक आईपी

$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||    
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com

लॉन्चबार स्क्रिप्ट

#!/bin/sh

title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)

open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.