web-dev-qa-db-fra.com

Bash: Recherchez une adresse IP pour un nom d'hôte, y compris / etc / hosts à la recherche

buntu 10.10 +

Dans mon script, j'ai besoin de consulter une adresse IP pour un nom d'hôte donné.

Si ce nom est répertorié dans /etc/hosts, alors la commande doit imprimer IP de /etc/hosts, pas du serveur DNS.

Quelles commandes j'ai essayé (nslookup, Dig, Host), ignore complètement /etc/hosts - au moins pour des noms qui ne sont pas connus avec le serveur DNS.

Remarque: je préférerais la solution qui ne vous obligerait pas à grep /etc/hosts par la main.

17
Alexander Gladysh

getent utilise les fonctions d'information GLIBC de bas niveau pour interroger toutes les sources configurées.

$ 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    
23

J'utilise simplement ce qui suit comme remplacement de la cmd 'hôte' Inapt. Cela fera automatiquement la bonne chose avec certaines restrictions (IPv4 uniquement).

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
sparkie
nmap -sP 192.168.1.0/24|grep SEARCHED_HOSTNAME|sed -n 's/.*[(]\([0-9\.]*\)[)].*/\1/p'

Aucune requête DNS

0
Philippe Gachoud