Bash: aramadaki / etc / hosts dahil olmak üzere bir ana bilgisayar adı için IP arayın


17

Ubuntu 10.10+

Senaryomda belirli bir ana bilgisayar adı için bir IP aramam gerekiyor.

Bu ad listelenmişse /etc/hosts, komut IP'yi /etc/hostsDNS sunucusundan değil IP'den yazdırmalıdır .

Denedim Ne komutları ( nslookup, dig, host), tamamen görmezden /etc/hosts- en azından DNS sunucusuna bilinmeyen adları için.

Not: /etc/hostsElle grep yapmamı gerektirmeyen çözümü tercih ederim .

Yanıtlar:


23

getent tüm yapılandırılmış kaynakları sorgulamak için düşük düzeyli glibc bilgi işlevlerini kullanır.

$ 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.commuhtemelen biraz daha basit
higuita

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

Gönderen syslinuxpaketin, Ubuntu 12.04 en azından.


3

Bu süper hacky , ama yaş için kullanıyorum ve çalışıyor (ipv4 için):

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}';
}

Gibi kullanın: ipfor google.com


Hacky ama taşınabilir. Benim gibi.
luis.espinal

0

Ben sadece inapt 'host' cmd yerine aşağıdaki kullanın. Bu, bazı kısıtlamalarla otomatik olarak doğru olanı yapar (yalnızca 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 Sorgusu Yok


Bu gerçekten soruyu cevaplasa da, nasıl ve neden yaptığını açıklamak iyi olur. Ne yaptığı hakkında çok az açıklama yapan veya hiç açıklama yapmayan bir komut satırı, benzer bir sorunu çözmesi gereken gelecekteki ziyaretçilere yardımcı olmayabilir.
Mokubai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.