Bash: ค้นหา IP สำหรับชื่อโฮสต์รวมถึง / etc / hosts ในการค้นหา


17

Ubuntu 10.10+

ในสคริปต์ของฉันฉันต้องค้นหา IP สำหรับชื่อโฮสต์ที่กำหนด

หากชื่อนั้นอยู่ในรายการ/etc/hostsคำสั่งควรพิมพ์ IP จาก/etc/hostsไม่ใช่จากเซิร์ฟเวอร์ DNS

สิ่งที่ฉันพยายามคำสั่ง ( nslookup, dig, host) ละเว้นสมบูรณ์/etc/hosts- อย่างน้อยสำหรับชื่อที่ไม่เป็นที่รู้จักไปยังเซิร์ฟเวอร์ DNS

หมายเหตุ: ฉันต้องการโซลูชันที่ไม่ต้องการให้ grep /etc/hostsด้วยมือ

คำตอบ:


23

getent ใช้ฟังก์ชั่นข้อมูล glibc ระดับต่ำเพื่อค้นหาแหล่งข้อมูลที่กำหนดค่าทั้งหมด

$ getent ahosts amd.com
163.181.249.32  STREAM amd.com
163.181.249.32  DGRAM  
163.181.249.32  RAW    
$ getent ahosts ipv6.google.com
2001:4860:b009::69 STREAM ipv6.l.google.com
2001:4860:b009::69 DGRAM  
2001:4860:b009::69 RAW    

3
getent hosts amd.comอาจจะง่ายกว่านิดหน่อย
higuita

6
$ gethostip localhost
localhost 127.0.0.1 7F000001
$ gethostip -d example.org
192.0.43.10

จากsyslinuxแพคเกจอย่างน้อยใน Ubuntu 12.04


3

นี่มันแฮ็คสุดๆ แต่ฉันใช้มันมานานแล้วและใช้งานได้ (สำหรับ ipv4):

function ipfor() {
  ping -c 1 $1 | grep -Eo -m 1 '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}';
}

ใช้เช่น: ipfor google.com


แฮ็ก แต่พกพาได้ ฉันชอบ.
luis.espinal

0

ฉันเพียงใช้สิ่งต่อไปนี้แทน inapt 'host' cmd สิ่งนี้จะทำสิ่งที่ถูกต้องโดยอัตโนมัติด้วยข้อ จำกัด บางอย่าง (IPv4 เท่านั้น)

myhost.c:

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <errno.h>
#include <string.h>

#define TOIN(a) ((struct sockaddr_in *)&(a))

main(argc, argv)
    char **argv;
{
    int err;
    struct sockaddr sa;
    char hbuf[NI_MAXHOST];

    if (argc <= 1) {
        printf("more args\n");
        exit(-1);
    }
    TOIN(sa)->sin_family = AF_INET;
    if (inet_pton(AF_INET, *(argv + 1), &TOIN(sa)->sin_addr) != 1) {
        printf("can't inet_pton: %s\n", errno ? strerror(errno) : "format err");
        exit(-1);
    }
    if (err = getnameinfo(&sa, sizeof(struct sockaddr_in), hbuf, sizeof hbuf, 0, 0, NI_NAMEREQD)) {
//        printf("%s\n", gai_strerror(err));
        printf("Host %s not found: 3(NXDOMAIN)\n", *(argv + 1));
        exit(-1);
    } else {
        printf("%s\n", hbuf);
        exit(0);
    }
}

0
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'

ไม่มี DNS Query


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