การค้นหาโฮสต์ที่เกี่ยวข้องกับ / etc / hosts


19

ยูทิลิตี้ชอบhostและdigช่วยให้คุณเห็นที่อยู่ IP ที่สอดคล้องกับชื่อโฮสต์

นอกจากนี้ยังมีgetentยูทิลิตี้ที่สามารถใช้ในการสืบค้น/etc/hostsหรือฐานข้อมูล NSS อื่น ๆ

ฉันกำลังมองหายูทิลิตี้มาตรฐานที่ให้ความสะดวกสบาย (ซึ่งมีให้บริการใน Debian, พูด) ซึ่งแก้ไขชื่อโฮสต์โดยไม่คำนึงว่าจะมีการกำหนดไว้ที่ไหน

มันควรจะมากหรือน้อยเทียบเท่า

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

5
มีอะไรผิดปกติกับgetent?
Patrick

2
ใช่ฉันไม่คิดว่ามันจะสะดวกไปกว่า Getent
Bratchley

@ แพทริก: อืมฉันไม่ได้ตระหนักถึงgetentรูปลักษณ์ใน DNS (ฉันคิดว่ามันดูเฉพาะใน/etc/hosts) ตอนนี้ฉันได้ลองแล้วนี่คือสิ่งที่ผิดกับgetent: เพราะgoogle.comมันจะส่งคืนที่อยู่เดียวและที่อยู่นั้นคือ IPv6 ซึ่งไม่เป็นประโยชน์เนื่องจากฉันอยู่ในเครือข่าย IPv4 และคำสั่งของฉันจะพิมพ์ที่อยู่ IPv4 จริง ๆ
Roman Cheplyaka

@RomanCheplyaka - ดูคำตอบของ eppesuig ที่แสดงวิธีใช้ getent เพื่อค้นหาที่อยู่ IPv4 เท่านั้น: unix.stackexchange.com/a/71392/7453
slm

คำตอบ:


4

คำสั่งเดียวที่ฉันรู้ว่าทำในสิ่งที่คุณต้องการคือ resolip:

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

อย่างไรก็ตามมันมาพร้อมกับเซิร์ฟเวอร์ mysql เท่านั้นซึ่งอาจไม่เหมาะที่จะติดตั้งทุกที่


14

หากปัญหาคือคุณไม่ต้องการแก้ไขชื่อเหล่านี้โดยใช้ ipv6 ให้ขอให้ getent ใช้ 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การใช้งาน
Luc

2
สำหรับผู้ที่ต้องการหลีกเลี่ยงการพิจารณาความแตกต่างระหว่าง IPv4 และ IPv6 getent ahosts google.comให้ใช้
Mikko Rantalainen

6

มีหลาย API ที่ใช้แก้ชื่อโฮสต์เช่นgethostbynameกันgetaddrinfoและinet_ptonบางอันสามารถส่งคืนที่อยู่มากกว่าหนึ่งรายการและ / หรือคุณสามารถสืบค้นประเภทของที่อยู่ที่คุณต้องการ

หากคุณต้องการวิธีพกพาในการรับหนึ่งที่อยู่ IPv4 อาจจะ:

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

2

(คำตอบนี้ใช้ได้เฉพาะในกรณีที่คุณรูทเครื่อง)

ฉันเคยถูกรบกวนด้วยเช่นกันและจากนั้นฉันก็ใช้งานมาตรฐานบนdnsmasqบนเครื่องทั้งหมดของฉัน Dnsmasq เป็นแคช DNS ที่มีน้ำหนักเบา ในฐานะที่เป็นประโยชน์อีกด้านหนึ่งนั้นจะให้บริการเนื้อหาของ/etc/hostsDNS มากกว่า


2

gethostip -d name.domainจากsyslinuxแพ็คเกจบน Ubuntu (และอาจเป็น Debian) -dเอาต์พุตรูปแบบทศนิยม


0

ฉันใช้ความรู้ภาษาเพียวบริสุทธิ์ของฉันและสร้างสคริปต์เล็กน้อยด้วยการจัดการข้อผิดพลาด:

/ usr / local / 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";

ขอบคุณสำหรับStéphane Chazelas สำหรับแนวคิดเบื้องต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.