बैश: खोज में / आदि / मेजबानों सहित एक मेजबान नाम के लिए एक आईपी की तलाश


17

उबंटू 10.10+

मेरी स्क्रिप्ट में मुझे दिए गए होस्ट नाम के लिए एक आईपी देखने की आवश्यकता है।

यदि वह नाम इसमें सूचीबद्ध है /etc/hosts, तो कमांड को IP से प्रिंट करना चाहिए /etc/hosts, DNS सर्वर से नहीं।

क्या आज्ञा देता है मैंने कोशिश की ( 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पैकेज, 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 'होस्ट' 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 क्वेरी नहीं


हालांकि यह वास्तव में इस सवाल का जवाब दे सकता है कि यह व्याख्या करना अच्छा होगा कि यह कैसे और क्यों करता है। यह क्या कर रहा है के रूप में कम या कोई स्पष्टीकरण के साथ एक कमांड लाइन भविष्य के आगंतुकों को मदद नहीं कर सकती है जिन्हें एक समान समस्या को हल करने की आवश्यकता हो सकती है।
मोकूबाई ub
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.