Can I perform a DNS lookup (hostname to IP address) using client-side Javascript?

后端 未结 16 1460
没有蜡笔的小新
没有蜡笔的小新 2020-11-22 11:45

I would like to use client-side Javascript to perform a DNS lookup (hostname to IP address) as seen from the client\'s computer. Is that possible?

相关标签:
16条回答
  • 2020-11-22 11:49

    Doing this would require to break the browser sandbox. Try to let your server do the lookup and request that from the client side via XmlHttp.

    0 讨论(0)
  • 2020-11-22 11:51

    There is a javascript library DNS-JS.com that does just this.

    DNS.Query("dns-js.com",
        DNS.QueryType.A,
        function(data) {
            console.log(data);
    });
    
    0 讨论(0)
  • 2020-11-22 11:52

    My version is like this:

    php on my server:

    <?php
        header('content-type: application/json; charset=utf-8');
    
        $data = json_encode($_SERVER['REMOTE_ADDR']);
    
    
        $callback = filter_input(INPUT_GET, 
                     'callback',
                     FILTER_SANITIZE_STRING, 
                     FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);
        echo $callback . '(' . $data . ');';
    ?>
    

    jQuery on the page:

    var self = this;
    $.ajax({
        url: this.url + "getip.php",
        data: null,
        type: 'GET',
        crossDomain: true,
        dataType: 'jsonp'
    
    }).done( function( json ) {
    
        self.ip = json;
    
    });
    

    It works cross domain. It could use a status check. Working on that.

    0 讨论(0)
  • 2020-11-22 11:54

    sure you can do that without using any addition, just pure javascript, by using this method of dns browser.dns.resolve("example.com"); but it is compatible just with FIREFOX 60 you can see more information on MDN https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve

    0 讨论(0)
  • 2020-11-22 11:54

    If the client has Java installed, you could do something like this:

    ipAddress = java.net.InetAddress.getLocalHost().getHostAddress();
    

    Other than that, you will probably have to use a server side script.

    0 讨论(0)
  • 2020-11-22 11:56

    As many people said you need to use an external service and call it. And that will only get you the DNS resolution from the server perspective.

    If that's good enough and if you just need DNS resolution you can use the following Docker container:

    https://github.com/kuralabs/docker-webaiodns

    Endpoints:

    [GET] /ipv6/[domain]: Perform a DNS resolution for given domain and return the associated IPv6 addresses.

     {
         "addresses": [
             "2a01:91ff::f03c:7e01:51bd:fe1f"
         ]
     }
    

    [GET] /ipv4/[domain]: Perform a DNS resolution for given domain and return the associated IPv4 addresses.

     {
         "addresses": [
             "139.180.232.162"
         ]
     }
    

    My recommendation is that you setup your web server to reverse proxy to the container on a particular endpoint in your server serving your Javascript and call it using your standard Javascript Ajax functions.

    0 讨论(0)
提交回复
热议问题