होस्ट लुकअप जो सम्मान / आदि / होस्ट करता है


19

उपयोगिताएँ जैसे hostऔर digआपको होस्ट नाम के अनुरूप आईपी पता देखने देती हैं।

getentउपयोगिता भी है जो क्वेरी /etc/hostsया अन्य एनएसएस डेटाबेस के लिए उपयोग की जा सकती है ।

मैं एक सुविधाजनक मानक उपयोगिता की तलाश कर रहा हूं (जो डेबियन में उपलब्ध है, कहते हैं) जो एक मेजबान के नाम को हल करता है, जहां यह परिभाषित किया गया है।

यह कम या ज्यादा के बराबर होना चाहिए

ping "$HOST" | head -1 | perl -lne '/\((.*?)\)/ && print $1'

5
क्या वास्तव में गलत है getent?
पैट्रिक

2
हाँ, मैं यह बात नहीं है कि यह और अधिक सुविधाजनक मिल सकता है।
ब्राचली

@ पैट्रिक: हम्म, मुझे यह getentभी महसूस नहीं हुआ कि डीएनएस में मुझे लगता है (मुझे लगा कि यह केवल दिखता है /etc/hosts)। अब जब मैंने इसे आज़मा लिया है, तो यहाँ क्या गलत है getent: इसके लिए google.com, यह एक एकल पता देता है, और वह पता IPv6 है। जो उपयोगी नहीं है, क्योंकि मैं एक आईपीवी 4 नेटवर्क पर हूं, और मेरी कमांड वास्तव में आईपीवी 4 पता प्रिंट करेगी।
रोमन चेप्लाकाका

@RomanCheplyaka - देखें eppesuig का जवाब है कि पता चलता है कि कैसे getent केवल देखो करने के लिए IPv4 पतों के लिए उपयोग करने के लिए: unix.stackexchange.com/a/71392/7453
SLM

जवाबों:


4

एकमात्र आदेश जो मुझे ज्ञात है कि जो आप चाहते हैं वह है संकल्प:

http://linux.die.net/man/1/resolveip

हालाँकि यह केवल mysql- सर्वर के साथ आता है, जो हर जगह स्थापित करने के लिए आदर्श नहीं हो सकता है।


14

यदि समस्या यह है कि आप इन नामों को IPv6 का उपयोग करके हल नहीं करना चाहते हैं, तो केवल IPv4 का उपयोग करने के लिए प्राप्त करने के लिए कहें। यह सभी ipv4 पतों की गणना करेगा:

giuseppe@blatta:~$ getent ahostsv4 www.google.com | cut -d' ' -f1 | sort -u
173.194.40.80
173.194.40.81
173.194.40.82
173.194.40.83
173.194.40.84

उन लोगों के लिए जो इतिहास को भूल जाते हैं (यानी IPv4), का उपयोग करें ahostsv6
ल्यूक

2
उन लोगों के लिए जो आईपीवी 4 और आईपीवी 6 के बीच के अंतर पर विचार करने से बचना चाहते हैं, का उपयोग करें getent ahosts google.com
मिकीको रैंटलैनेन

6

बात यह है कि मेजबान नामों को हल करने के लिए कई एपीआई हैं gethostbyname, getaddrinfoऔर inet_ptonउनमें से कुछ एक से अधिक पते वापस कर सकते हैं और / या आप जिस प्रकार के पते चाहते हैं, उसे क्वेरी कर सकते हैं।

यदि आप एक आईपीवी 4 पता प्राप्त करने के लिए एक पोर्टेबल तरीका चाहते हैं , तो हो सकता है:

perl -MSocket -le 'print inet_ntoa inet_aton shift' www.google.com

2

(यह उत्तर केवल तभी लागू होता है जब आप मशीन पर रूट होते हैं।)

मैं इससे भी नाराज़ हुआ करता था, और फिर मैंने अपने सभी मशीनों पर डैनस्कम चलाने का मानकीकरण किया। Dnsmasq एक हल्के DNS कैश है। एक साइड बेनिफिट के रूप में, यह /etc/hostsDNS से अधिक की सामग्री परोसता है ।


2

gethostip -d name.domainsyslinuxउबंटू (और शायद डेबियन) पर पैकेज से । -dदशमलव प्रारूप को आउटपुट करता है।


0

मैंने अपने शुद्ध प्रति ज्ञान का उपयोग किया और त्रुटि से निपटने के लिए थोड़ी स्क्रिप्ट बनाई:

/ Usr / स्थानीय / bin / gethostip:

#!/usr/bin/perl

# inspired by: /unix/71379/host-lookup-that-respects-etc-hosts#71393

use strict;
use Socket;

my $name = $ARGV[0];
if ($name eq '') {
  print STDERR "Usage: gethostip <hostname>\n";
  exit 1;
}
my $ip = inet_aton($name);
die("Unable to resolve host name $name") if ($ip eq '');
my $ipstr = inet_ntoa($ip);
print "$ipstr\n";

प्रारंभिक विचार के लिए Thx to Stéphane Chazelas

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