Bash: Suchen Sie eine IP nach einem Hostnamen, einschließlich / etc / hosts bei der Suche


17

Ubuntu 10.10+

In meinem Skript muss ich eine IP für einen bestimmten Hostnamen suchen.

Wenn dieser Name in aufgeführt ist /etc/hosts, sollte der Befehl die IP- /etc/hostsAdresse nicht vom DNS-Server drucken .

Welche Befehle habe ich versucht ( nslookup, dig, host), völlig ignorieren /etc/hosts- zumindest für die Namen , die auf dem DNS - Server nicht bekannt sind.

Hinweis: Ich würde eine Lösung vorziehen, bei der ich nicht /etc/hostsvon Hand greifen müsste .

Antworten:


23

getent Verwendet die einfachen Glibc-Informationsfunktionen, um alle konfigurierten Quellen abzufragen.

$ 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.comist wahrscheinlich ein wenig einfacher
higuita

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

Aus dem syslinuxPaket zumindest in Ubuntu 12.04.


3

Das ist supergeil , aber ich benutze es seit Ewigkeiten und es funktioniert (für 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}';
}

Verwenden Sie wie: ipfor google.com


Hacky aber tragbar. Ich mag.
Luis.espinal

0

Ich benutze einfach folgendes als Ersatz für inapt 'host' cmd. Mit einigen Einschränkungen wird dies automatisch das Richtige tun (nur 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'

Keine DNS-Abfrage


Während dies in der Tat die Frage beantworten kann, wäre es gut zu erklären, wie und warum dies geschieht. Eine Befehlszeile mit wenigen oder keinen Erklärungen zu ihrer Funktionsweise kann zukünftigen Besuchern, die möglicherweise ein ähnliches Problem lösen müssen, möglicherweise nicht helfen.
Mokubai
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.