Bash : / etc / hosts를 포함하여 호스트 이름에 대한 IP를 검색합니다.


17

우분투 10.10+

내 스크립트에서 주어진 호스트 이름에 대한 IP를 찾아야합니다.

해당 이름이에 나열된 경우 /etc/hosts명령은 /etc/hostsDNS 서버가 아니라에서 IP를 인쇄해야 합니다.

내가 뭘하려 명령 ( nslookup, dig, host), 완전히 무시 /etc/hosts- 적어도 DNS 서버에 알려지지 않은 이름을.

참고 : /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패키지, 우분투 12.04에서 적어도.


3

이것은 super-hacky 이지만, 오랫동안 사용해 왔으며 (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 쿼리가 없습니다


이것이 실제로 질문에 대답 할 수는 있지만 어떻게, 왜 그렇게하는지 설명하는 것이 좋습니다. 수행중인 작업에 대한 설명이 거의 또는 전혀없는 명령 줄은 비슷한 문제를 해결해야하는 향후 방문자에게 도움이되지 않을 수 있습니다.
Mokubai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.