यूनिक्स शेल का उपयोग करके होस्टनाम से आईपी एड्रेस प्राप्त करने का आसान तरीका


12

होस्टनाम से आईपी एड्रेस प्राप्त करने का सबसे आसान तरीका क्या है?

मैं एक कोशिश कर रहा था pingऔर इसे आउटपुट से पार्स करने के बारे में । हालाँकि, यह बहुत अच्छा नहीं लगता है और संभवतः सभी प्रणालियों पर समान तरीके से काम नहीं करेगा।

मैंने थोड़ा खोज किया और इसके साथ समाधान पाया nslookup, लेकिन यह होस्टनाम के लिए काम नहीं करता है /etc/hosts


मुझे अभी भी थोड़ा आश्चर्य है कि यूनिक्स के गोले को प्रोग्रामिंग भाषाओं के रूप में क्यों नहीं माना जाता है ...
अल्बर्ट

क्योंकि शेल को पारंपरिक रूप से स्क्रिप्टिंग के रूप में देखा जाता है, प्रोग्रामिंग नहीं;)
टीनो

जवाबों:


5

आप इसे मानक सिस्टम कॉल के साथ कर सकते हैं। यहाँ पर्ल में एक उदाहरण है:

use strict; use warnings;
use Socket;
use Data::Dumper;

my @addresses = gethostbyname('google.com');
my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses];
print Dumper(\@ips);

उत्पादन का उत्पादन:

$VAR1 = [
          '74.125.127.104',
          '74.125.127.103',
          '74.125.127.105',
          '74.125.127.106',
          '74.125.127.147',
          '74.125.127.99'
        ];

(कमांड लाइन पर, एक ही स्क्रिप्ट के रूप में लिखा जा सकता है: perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print Dumper(\@ips)')

आप इसे अन्य भाषाओं में भी कर सकते हैं - सिस्टम कॉल man -s3 gethostbynameआदि के लिए मैन पेज देखें ।


कूल, वह काम करता है। Esp।, perl -MSocket -MData::Dumper -wle'my @addresses = gethostbyname("www.google.com"); my @ips = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; print $ips[0]'
अल्बर्ट

बहुत अजीब है कि यह जवाब कुछ प्रोग्राम कोड है ... :) लगभग एक Stackoverflow जवाब की तरह दिखता है। वास्तव में Serverfault पर नहीं है। लेकिन मैं वैसे भी जवाब स्वीकार करूंगा।
अल्बर्ट

@ अल्बर्ट: अच्छी तरह से निष्पक्ष होने के लिए: 1. सवाल एसओ पर मूल रूप से पोस्ट किया गया था और एसएफ में माइग्रेट किया गया था, और 2. आप जिस प्रकार के डेटा की तलाश कर रहे हैं, उसे कुछ के साथ पार्स करने की आवश्यकता है ; कुछ लोग पर्ल को शेल स्क्रिप्ट का बेहतर रूप मानते हैं: D
ईथर

@ ईथर sed -e '/some people consider Perl a better form/s/better/worse/'SCNR
टीनो

11

host <hostname>

उदाहरण के लिए:

serv ~ $ host stackoverflow.com
stackoverflow.com has address 69.59.196.211

संपादित करें

लिनक्स पर, (और कुछ OS X वेरिएंट में, कम से कम), आप उपयोग करने में सक्षम हो सकते हैं resolveip, जो MySQL सर्वर का हिस्सा है।

/etc/hosts:
 ...
 127.0.0.1     localhost localhost.localdomain foo
 ...

serv ~ $ resolveip foo
IP address of foo is 127.0.0.1

काम भी नहीं करता। (मेजबानों के लिए /etc/hosts।) कोशिश करें host localhost
अल्बर्ट

serv ~ $ host localhost \n localhost has address 127.0.0.1

हम्म, ठीक है, यहाँ नहीं। मैं उत्सुक हूं कि आपके लिए क्यों काम करता है। या यह मेरे लिए क्यों नहीं है।
अल्बर्ट

2
मेरा संपादन देखें - आप कोशिश कर सकते हैं resolveip

एचएम, resolveipमेरे डेबियन पर डिफ़ॉल्ट रूप से स्थापित नहीं है।
अल्बर्ट

9

इस प्राचीन पोस्ट में कई रचनात्मक समाधान हैं।

अगर मुझे यह सुनिश्चित करने की आवश्यकता है कि मुझे भी /etc/hostsएक्सेस करना है, तो मैं उपयोग करना चाहता हूं

getent hosts somehost.com

यह काम करता है, कम से कम अगर `/etc/nsswitch.conf 'को फ़ाइलों का उपयोग करने के लिए कॉन्फ़िगर किया गया है (जैसा कि आमतौर पर होता है)।


अच्छा है, और IPv6 के लिए भी काम करता है।
तिनो

और syslinux स्थापित करने की आवश्यकता नहीं है!
क्लाउडीयू

दिलचस्प है कि कुछ आईपी के लिए यह ahostsबहु-पंक्ति जानकारी वापस करते समय कुछ भी नहीं देता है ।
23

7

IPv4 के लिए एक मानक कार्यक्रम है, जो / आदि / मेजबानों सहित रिज़ॉल्वर का उपयोग करके बॉक्स से बाहर काम करता है:

host="localhost"
ip="`gethostip -d "$host"`"

यह डेबियन का हिस्सा है, इसे इसके साथ स्थापित करें:

apt-get install syslinux

IPv4 की तुलना में अन्य प्रोटोकॉल के लिए (जैसे IPv6) मैं वर्तमान में एक समान उपकरण नहीं जानता। अद्यतन: इस वजह से मैंने सिर्फ एक छोटा उपकरण लिखा है जो IPv6 को हल करने में सक्षम है, भी:

https://github.com/hilbix/misc/blob/master/src/ipof.c

यह एक त्वरित और गंदे शेल के उपयोग के लिए सोचा जाता है, gethostipलेकिन IPv6 को भी अनुमति देता है:

ip="`ipof -6 -- heise.de`"

इसका उपयोग अंतःक्रियात्मक रूप से भी किया जा सकता है, उदाहरण के लिए:

ipof -a -d -x -v -h -

HTH


यह जवाब देने के लिए यहां आया, इसके बजाय आपको वोट दिया।
नहीं

4

क्यों नहीं dig +short hostname?

(क्वेरी DNS)


इस पर ध्यान नहीं /etc/hostsदिया जाता है।
३kar बजे जने पिक्कारेनैन

DNS नाम समाधान के लिए एक निश्चित स्रोत माना जाता है, और यदि आप होस्ट फ़ाइल को ओवरराइड करने के लिए उपयोग करते हैं, तो यह ठीक है। लेकिन यह एक ओवरराइड है, निश्चित नहीं ...
gWaldo

मुझे पता है, लेकिन मूल प्रश्न चाहता था / आदि / मेजबानों :)
Janne Pikkarainen

यकीन है कि पर्याप्त; मेरी पढ़ने की समझ में विफल ...
gWaldo

3

खैर, मेरा वर्तमान समाधान:

ping -c1 -n www.google.com | head -n1 | sed "s/.*(\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\)).*/\1/g"

यह केवल IP नहीं देता है: PING www.l.google.com (72.14.234.104): 56 डेटा बाइट्स
Federico klez Culloca

हाँ, ऐसा लगता है कि sedप्रत्येक प्रणाली पर थोड़ा अलग व्यवहार करता है। :) कैसा कष्टकर। मैंने इसे थोड़ा बदल दिया, मुझे लगता है कि इसे अब हर जगह काम करना चाहिए।
अल्बर्ट

0

कुछ यूनियनों पर, निम्नलिखित काम करेंगे:

arp <hostname>

मैक ओएस एक्स पर उदाहरण के लिए, मुझे यह मिलता है:

arp My-iMac.local
My-iMac.local (192.168.1.2) -- no entry

खैर, यह प्रविष्टि पाता है लेकिन यह केवल अपने मैक को सूचीबद्ध करता है, न कि आईपी को। :)
अल्बर्ट

आह, arp -n hostnameआईपी ​​दिखाता है।
अल्बर्ट

केवल, यह तरीका नेटवर्क के बाहर सर्वर के लिए काम नहीं करता है। : पी
अल्बर्ट

0

का उपयोग करना pingइतना बुरा नहीं है क्योंकि आपके पास आमतौर पर कोई मजबूत निर्भरता नहीं है।

यहाँ फ़ंक्शन मैं लिनक्स सिस्टम पर प्रयोग किया जाता है:

getip () { ping -c 1 -t 1 $1 | head -1 | cut -d ' ' -f 3 | tr -d '()' ; }

-1
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'
  • Nmap आपके सबनेट (192.168.1.0 या जो कुछ भी) से आता है
  • grep के साथ केवल उस होस्टनाम की लाइन प्राप्त करें जिसे आप ढूंढ रहे हैं
  • सीड के साथ कोष्ठक के अंदर केवल आईपी पता मिलता है

2
विभिन्न स्विचों के बारे में थोड़ी अधिक जानकारी और क्यों इस्तेमाल किया जाता है आपके उत्तर में जोड़ देगा
डेव एम

कम से कम चार अलग-अलग कारण हैं कि यह उत्तर काम क्यों नहीं कर रहा है। आप आईपी पते की श्रेणी के बारे में धारणा बनाते हैं जिसके भीतर उत्तर मिलेगा। जरूरत से ज्यादा नेटवर्क ट्रैफिक पैदा करने के कारण यह अक्षम है। यह केवल आईपी पते के लिए काम करता है जो जांच के प्रति प्रतिक्रिया करता है। यह मानता है कि रिवर्स DNS में आगे DNS के समान सटीक मैपिंग शामिल हैं।
कास्परड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.