क्या मैं क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करके DNS लुकअप (होस्टनाम से आईपी एड्रेस) कर सकता हूं?


92

मैं क्लाइंट के कंप्यूटर से देखे गए DNS लुकअप (होस्टनाम से आईपी एड्रेस) का प्रदर्शन करने के लिए क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करना चाहूंगा। क्या यह संभव है?


5
इस प्रश्न के कई उत्तर रिज़ॉल्यूशन सर्वर साइड से करने की सलाह देते हैं। उपयोग के मामले पर निर्भर करता है जो पर्याप्त नहीं हो सकता है। उदाहरण के लिए, यदि आप जिस सेवा को देख रहे हैं, वह जीएसएलबी का उपयोग कर रही है तो यह उस उपयोगकर्ता के आधार पर एक अलग आईपी लौटा सकती है जहां उपयोगकर्ता स्थित है; परिणामस्वरूप सर्वर साइड कोड को जो प्रतिक्रिया मिलती है वह ब्राउज़र द्वारा प्राप्त की गई तुलना में एक अलग प्रतिक्रिया होने की काफी संभावना है। यह कहा जा रहा है, मैं अभी तक उन लोगों के लिए एक वैकल्पिक समाधान नहीं है जो इस अंतर की परवाह करते हैं।
इलन राबिनोविच

जवाबों:


35

जावास्क्रिप्ट मानक पुस्तकालय में मेजबानों या आईपी-पतों की कोई धारणा नहीं है। इसलिए आपको अपने लिए होस्टनाम देखने के लिए कुछ बाहरी सेवा का उपयोग करना होगा।

मैं एक cgi-bin की मेजबानी करने की सलाह देता हूं जो होस्टनाम के आईपी-एड्रेस को देखता है और जावास्क्रिप्ट के माध्यम से एक्सेस करता है।


26
cgi-bin? वह पुराना स्कूल है। मुझें यह पसंद है!
एंड्रयू हेजेज

10
यह लेखन (2008) के समय सच था। यह 6 साल बाद सच नहीं है: इस पेज में वेबआरटीसी के बारे में मेरी टिप्पणी देखें। (आईपी पते की समस्या का हल खोजते समय Unfortunatelly Google अभी भी इस धागे की ओर इशारा करता है और जो लोगों को गलत दिशा में डाल सकता है)।
ईरानी

1
@earizon - आपका उत्तर एक अलग प्रश्न के लिए है - अपने निजी आईपी पते की खोज कैसे करें।
१38:

क्लाउड से सीजीआई के माध्यम से समस्या इंट्रानेट मेजबान ips की खोज की जाएगी जो बाहर से संभव नहीं है। आपको मशीन या इंट्रानेट पर एक स्थानीय सेवा का उपयोग करना होगा।
तजाही फदिदा

एक नया प्रस्तावित इंटरनेट मानक है जो आपको HTTPS पर DNS प्रश्न भेजने की अनुमति देता है (यह उत्तर देखें stackoverflow.com/a/58299823/9638991 )। सभी वास्तविकता में, यह मूल रूप से एक cgi-bin स्क्रिप्ट के रूप में ही काम करता है :) (सिवाय इसके कि इसे IETF द्वारा मानकीकृत किया गया है और बड़ी कंपनियों का एक टन इसका समर्थन करता है)
kimbo

83

संपादित करें : इस सवाल ने मुझे एक खुजली दी, इसलिए मैंने Google ऐप इंजन पर एक JSONP webservice डाल दी, जो ग्राहकों को आईपी पता देता है। उपयोग:

<script type="application/javascript">
function getip(json){
  alert(json.ip); // alerts the ip address
}
</script>

<script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"> </script>

हाँ, कोई सर्वर प्रॉक्सी की आवश्यकता नहीं है।


शुद्ध जेएस नहीं कर सकते। यदि आपके पास उसी डोमेन के अंतर्गत एक सर्वर स्क्रिप्ट है जो इसे प्रिंट करता है तो आप इसे पढ़ने के लिए XMLHttpRequest भेज सकते हैं।


4
क्या आप स्रोत को अपनी वेब सेवा पर पोस्ट कर सकते हैं? एक उदाहरण चलाना अच्छा होगा।
विल

18
क्षमा करें, लेकिन मुझे लगता है कि यह वास्तव में मूल सवाल का जवाब नहीं लगता है downvote था। वे सिर्फ एक मानक DNS लुकअप चाहते हैं, न कि उपयोगकर्ता का सार्वजनिक आईपी।
साइमन ईस्ट

30

बहुत देर से, लेकिन मुझे लगता है कि कई लोग अभी भी "Google एयरलाइंस" के माध्यम से यहां उतरेंगे। एक मॉडेम दृष्टिकोण WebRTC का उपयोग करना है जिसे सर्वर समर्थन की आवश्यकता नहीं है।

https://hacking.ventures/local-ip-discovery-with-html5-webrtc-security-and-privacy-risk/

अगला कोड http://net.ipcalf.com/ से कॉपी और पेस्ट है

// NOTE: window.RTCPeerConnection is "not a constructor" in FF22/23
var RTCPeerConnection = /*window.RTCPeerConnection ||*/ window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

if (RTCPeerConnection) (function () {
    var rtc = new RTCPeerConnection({iceServers:[]});
    if (window.mozRTCPeerConnection) {      // FF needs a channel/stream to proceed
        rtc.createDataChannel('', {reliable:false});
    };  

    rtc.onicecandidate = function (evt) {
        if (evt.candidate) grepSDP(evt.candidate.candidate);
    };  
    rtc.createOffer(function (offerDesc) {
        grepSDP(offerDesc.sdp);
        rtc.setLocalDescription(offerDesc);
    }, function (e) { console.warn("offer failed", e); }); 


    var addrs = Object.create(null);
    addrs["0.0.0.0"] = false;
    function updateDisplay(newAddr) {
        if (newAddr in addrs) return;
        else addrs[newAddr] = true;
        var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; }); 
        document.getElementById('list').textContent = displayAddrs.join(" or perhaps ") || "n/a";
    }   

    function grepSDP(sdp) {
        var hosts = []; 
        sdp.split('\r\n').forEach(function (line) { // c.f. http://tools.ietf.org/html/rfc4566#page-39
            if (~line.indexOf("a=candidate")) {     // http://tools.ietf.org/html/rfc4566#section-5.13
                var parts = line.split(' '),        // http://tools.ietf.org/html/rfc5245#section-15.1
                    addr = parts[4],
                    type = parts[7];
                if (type === 'host') updateDisplay(addr);
            } else if (~line.indexOf("c=")) {       // http://tools.ietf.org/html/rfc4566#section-5.7
                var parts = line.split(' '), 
                    addr = parts[2];
                updateDisplay(addr);
            }   
        }); 
    }   
})(); else {
    document.getElementById('list').innerHTML = "<code>ifconfig | grep inet | grep -v inet6 | cut -d\" \" -f2 | tail -n1</code>";
    document.getElementById('list').nextSibling.textContent = "In Chrome and Firefox your IP should display automatically, by the power of WebRTCskull.";
}   

19
यह वास्तव में एक नई क्षमता है जो वेबआरटीसी से पहले मौजूद नहीं थी - अपने स्वयं के आईपी पते की खोज करने के लिए। लेकिन @noahjacobson ने एक अलग सवाल पूछा - जावास्क्रिप्ट से होस्टनाम द्वारा आईपी का डीएनएस लुकअप।
जीन वायंगरिब

2
बहुत, बहुत दिलचस्प है, यह एक बग या डिज़ाइन दोष है, वैसे भी कुछ समय में इसे ठीक किया जाएगा ताकि दीर्घकालिक परियोजनाओं के लिए कोई अच्छा न हो
ई-इन्फ्लूएंज़ा

15

मुझे पता है कि यह सवाल बहुत समय पहले पूछा गया था, लेकिन मुझे लगा कि मैं हाल ही में जवाब देना चाहूंगा।

HTTPS (DoH) पर DNS

आप HTTPS से अधिक DNS प्रश्नों को DNS रिसॉल्वर को भेज सकते हैं जो इसका समर्थन करते हैं। DOH के लिए मानक RFC 8484 में वर्णित है ।

यह एक ऐसी ही बात है जो अन्य सभी उत्तर सुझाते हैं, केवल यह कि DoH वास्तव में HTTPS पर DNS प्रोटोकॉल है। यह एक "प्रस्तावित" इंटरनेट मानक भी है और यह काफी लोकप्रिय हो रहा है। उदाहरण के लिए, कुछ प्रमुख ब्राउज़र या तो इसका समर्थन करते हैं या इसका समर्थन करने की योजना है (क्रोम, एज, फ़ायरफ़ॉक्स), और Microsoft इसे अपने ऑपरेटिंग सिस्टम में बनाने की प्रक्रिया में है।

DoH का एक उद्देश्य है:

क्रॉस ओरिजिनल रिसोर्स शेयरिंग (कोर) के अनुरूप एक सुरक्षित तरीके से मौजूदा ब्राउज़र एपीआई के माध्यम से डीएनएस जानकारी तक पहुँचने के लिए वेब एप्लिकेशन को अनुमति देता है।

विशेष रूप से dohjs नामक वेब एप्लिकेशन से DNS लुकअप करने के लिए एक खुला स्रोत उपकरण है । यह RFC 8484 में वर्णित HTTPS (DoH) वायरफॉर्म प्रश्नों पर DNS करता है । यह GET और POST दोनों तरीकों का समर्थन करता है।

पूर्ण प्रकटीकरण: मैं dohjs के लिए एक योगदानकर्ता हूं।

HTTPS JSON API पर DNS

यदि आप DNS वायरफ़ॉर्मैट से परेशान नहीं होना चाहते हैं, तो Google और Cloudflare दोनों HTTPS पर DNS के लिए JSON API प्रदान करते हैं।

उदाहरण जावास्क्रिप्ट कोड Google के JSON DOH API के साथ example.com देखने के लिए:

var response = await fetch('https://dns.google/resolve?name=example.com');
var json = await response.json();
console.log(json);

वायरफ़ॉर्मेट के साथ DOH GET और POST के लिए RFC के उदाहरण

यहाँ GET और POST दोनों के लिए RFC द्वारा दिए गए उदाहरण हैं (देखें https://tools.ietf.org/html/rfc8484#section-4.1.1 ):

उदाहरण प्राप्त करें:

पहला उदाहरण अनुरोध "www.example.com" प्राप्त करने के लिए GET का उपयोग करता है।

: विधि = GET
: योजना = https
: प्राधिकार = dnsserver.example.net
: path = / dns-query; dns = AAABAAABAAAAAAAAAA3d3dleGFtcGxlA2bvbQAAAQAB
स्वीकार = एप्लिकेशन / डीएनएस-संदेश

POST उदाहरण:

POST विधि का उपयोग करते हुए "www.example.com" के लिए समान DNS क्वेरी होगी:

: विधि = POST
: योजना = https
: प्राधिकार = dnsserver.example.net
: path = / dns-query
स्वीकार = आवेदन / dns-message
सामग्री-प्रकार = आवेदन / dns-message
सामग्री-लंबाई = 33

<33 बाइट्स निम्न हेक्स एन्कोडिंग द्वारा प्रस्तुत> 00 00 01 00 00 01 00 00 00 00 00 77 77 77 07 65 65 6d 70 6c 70 03 63 6f 6d 00 00 01 00 01

DOH प्रश्न भेजने के लिए अन्य स्थान

आप कुछ सार्वजनिक DNS रिसॉल्वर की सूची पा सकते हैं जो एक जोड़े में HTTPS पर DNS का समर्थन करते हैं:

उपरोक्त संसाधनों में, मैं कहूंगा कि कर्ल की विकि पर सूची और DNSCrypt सूची शायद सबसे पूर्ण और सबसे अधिक बार अद्यतन की गई हैं। कर्ल के पेज में DoH (सर्वर, प्रॉक्सी, क्लाइंट लिबास आदि) के लिए ओपन सोर्स टूल्स की सूची भी शामिल है।


14

होस्ट किया गया JSONP संस्करण एक आकर्षण की तरह काम करता है, लेकिन ऐसा लगता है कि यह अपने संसाधनों पर रात के समय में सबसे अधिक दिनों (पूर्वी समय) में चला जाता है, इसलिए मुझे अपना संस्करण बनाना पड़ा।

इस तरह मैंने इसे PHP के साथ पूरा किया:

<?php
header('content-type: application/json; charset=utf-8');

$data = json_encode($_SERVER['REMOTE_ADDR']);
echo $_GET['callback'] . '(' . $data . ');';
?>

फिर जावास्क्रिप्ट पहले की तरह ही है, बस एक सरणी नहीं:

<script type="application/javascript">
function getip(ip){
    alert('IP Address: ' + ip);
}
</script>

<script type="application/javascript" src="http://www.anotherdomain.com/file.php?callback=getip"> </script>

इतना ही आसान!

साइड नोट: यदि आप किसी भी सार्वजनिक-सामना वाले वातावरण में इसका उपयोग कर रहे हैं, तो अपने $ _GET को साफ करना सुनिश्चित करें!


धन्यवाद tcole! बस मैं क्या
चाह

एक मिनट रुको, क्यों भी $ _GET का उपयोग करें? जैसे आपने कहा कि यह एक भेद्यता है। बस एक का उपयोग नहीं किया जा सकता है: गूंज 'getip ('। $ डेटा। ');';
डेवय्डब

7
क्षमा करें, लेकिन मुझे लगता है कि यह वास्तव में मूल सवाल का जवाब नहीं लगता है downvote था। वे सिर्फ एक मानक DNS लुकअप चाहते हैं, न कि उपयोगकर्ता का सार्वजनिक आईपी।
साइमन ईस्ट

2
@SimonEast हेह। आपने 7 साल पुराने प्रश्न को संशोधित किया। जो कुछ भी आपको अपने आप को संतुष्ट करने की आवश्यकता है ;-)
tcole

2
मैंने इसे स्पष्ट करने के लिए मूल प्रश्न को केवल संपादित किया, जैसा कि मैं हाल ही में एक ही प्रश्न पर शोध कर रहा था, फिर भी किसी कारण से यहां अधिकांश उत्तर वास्तव में नहीं हैं जो मूल पोस्टर के लिए पूछ रहा था और एक अलग प्रश्न के तहत पोस्ट किया जाना चाहिए।
साइमन ईस्ट

3

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मेरा समाधान दूसरों की सहायता कर सकता है।

मुझे लगता है कि JSON (P) सेवाएं जो इसे आसान बनाती हैं, वे हमेशा के लिए नहीं रहती हैं, लेकिन निम्नलिखित जावास्क्रिप्ट लेखन के समय मेरे लिए अच्छी तरह से काम करती हैं।

<script type="text/javascript">function z (x){ document.getElementById('y').innerHTML=x.query }</script>
<script type='text/javascript' src='http://ip-api.com/json/zero.eu.org?callback=z'></script>

उपरोक्त मेरे सर्वर के IP को उस पृष्ठ पर लिखता है, जो स्थित है, लेकिन स्क्रिप्ट को किसी भी आईपी को किसी अन्य डोमेन नाम में 'zero.eu.org' बदलकर खोजने के लिए संशोधित किया जा सकता है। यह मेरे पृष्ठ पर कार्रवाई में देखा जा सकता है: http://meon.zero.eu.org/


मैं समझ नहीं पा रहा हूं कि इस तरह से अपना खुद का आईपी पता कैसे लगाएं: <! - # echo var = "REMOTE_ADDR" -> आपकी वेबसाइट के अनुसार।
जॉर्ज कारलिन

यह अधिकांश वेब सर्वरों पर उपलब्ध एक मानक 'इको' सुविधा है। देखें: google.co.uk/…
नेविल हिलर

1
यह संभवतः एकमात्र उत्तर है जो वास्तव में मूल प्रश्न से सही तरीके से निपटता है, अच्छी तरह से किया जाता है। दुर्भाग्य से यह ग्राहक के कंप्यूटर भाग से देखा के रूप में पालन ​​नहीं करता है , जो एक महत्वपूर्ण आवश्यकता हो सकती है (या नहीं)।
साइमन ईस्ट

@ साइमन - यह कहां कहता है "जैसा कि क्लाइंट के कंप्यूटर से देखा गया है" और मेरा जवाब इस बात का अनुपालन क्यों नहीं करता है?
नेविल हिलीर

1
@Simon - अच्छी बात है, लेकिन आम तौर पर क्लाइंट-साइड जेएस की आपूर्ति की जाती है, एक अच्छा मौका है कि लेखक / सर्वर मालिक को इस डीएनएस सीमा के बारे में पता होगा - तीसरे पक्ष के सर्वर का उपयोग करते हुए लेखकों के लिए एक मुद्दा हो सकता है। जैसा कि यहां के पदों में संकेत दिया गया है कि मौजूदा प्रौद्योगिकी इस पर सभी बाधाओं को पूरा करने के लिए संघर्ष करती है। मेरे इनपुट का उद्देश्य उस समाधान को बताना था जो मैंने अपने सर्वर पर सबसे अधिक व्यावहारिक पाया है।
नेविल हिलर

3

एक तृतीय-पक्ष सेवा है जो ब्राउज़र से DNS लुकअप करने के लिए एक CORS-friendly REST API प्रदान करती है - https://exana.io/tools/dns/


1

जैसा कि कई लोगों ने कहा कि आपको एक बाहरी सेवा का उपयोग करने और इसे कॉल करने की आवश्यकता है। और वह केवल आपको सर्वर के नजरिए से DNS रिज़ॉल्यूशन मिलेगा।

यदि यह काफी अच्छा है और यदि आपको केवल DNS रिज़ॉल्यूशन की आवश्यकता है, तो आप निम्न डोकर कंटेनर का उपयोग कर सकते हैं:

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

अंतिम बिंदु:

[GET] /ipv6/[domain]: दिए गए डोमेन के लिए DNS रिज़ॉल्यूशन निष्पादित करें और संबंधित IPv6 पते लौटाएं।

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

[GET] /ipv4/[domain]: दिए गए डोमेन के लिए DNS रिज़ॉल्यूशन निष्पादित करें और संबंधित IPv4 पते वापस करें।

 {
     "addresses": [
         "139.180.232.162"
     ]
 }

मेरी अनुशंसा है कि आप अपने सर्वर पर अपने जावास्क्रिप्ट को सर्व करने वाले सर्वर में एक विशेष अंतिम बिंदु पर कंटेनर को प्रॉक्सी से रिवर्स करने के लिए अपने वेब सर्वर को सेटअप करें और अपने मानक जावास्क्रिप्ट अजाक्स कार्यों का उपयोग करके इसे कॉल करें।


1

एक जावास्क्रिप्ट लाइब्रेरी है DNS-JS.com जो ऐसा करती है।

DNS.Query("dns-js.com",
    DNS.QueryType.A,
    function(data) {
        console.log(data);
});

1
फिर भी क्लाइंट के नजरिए से नहीं। वह लाइब्रेरी IP पता प्राप्त करने के लिए dns-js.com/api.aspx से अनुरोध करती है, जो तब DNS सर्वर-साइड को हल करता है।
wp-overwatch.com

0

ऐसा करने से ब्राउज़र सैंडबॉक्स को तोड़ना होगा। अपने सर्वर को लुकअप करने की कोशिश करें और अनुरोध करें कि क्लाइंट की तरफ से XmlHttp के माध्यम से करें।


-1

WebExtensions के लिए फ़ायरफ़ॉक्स में v60 के बाद से इसके लिए एक अंतर्निहित एपीआई है:

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/dns/resolve


जो भी कारण के लिए, browserफ़ायरफ़ॉक्स 64 बीटा में मौजूद नहीं है तो मुझे आश्चर्य है कि अगर इसे हटा दिया गया था।
सवेटायटोएस

3
@Sawtaytoes: यह केवल WebExtensions के लिए सामने आया है । यह भी ध्यान दें कि इसे dnsअनुमति की आवश्यकता है और स्क्रिप्ट सामग्री स्क्रिप्ट के रूप में नहीं चलेगी (फिर से, browser.dnsवहां उजागर नहीं की जाएगी)
शनिवार

@Saturnus फ़ायरफ़ॉक्स एक्सटेंशन के लिए ठीक काम करता है। किसी भी तरह क्रोम एक्सटेंशन के साथ ऐसा करने का कोई मौका?
5

-1

सुनिश्चित करें कि आप बिना किसी जोड़ के, बिना शुद्ध जावास्क्रिप्ट के, इस विधि का उपयोग करके कर सकते हैं, browser.dns.resolve("example.com"); लेकिन यह सिर्फ FIREFOX 60 के साथ संगत है आप MDN पर अधिक जानकारी देख सकते हैं https://developer.mozilla.org/en-US/ / मोज़िला / Add-ons / WebExtensions / एपीआई / डीएनएस / संकल्प


4
यह विधि केवल एक WebExtension के संदर्भ में उपलब्ध है। इसका उपयोग वेब पेज द्वारा नहीं किया जा सकता है।
डस्कवफ़-एक्टिव-

-2

मुझे नहीं लगता कि यह सुरक्षा कारणों से अधिकांश ब्राउज़रों द्वारा शुद्ध जावास्क्रिप्ट संदर्भ में अनुमति देता है, जैसा कि सवाल पूछता है।


5
इसका जवाब नहीं है। यह एक टिप्पणी होनी चाहिए!
ट्रेडरज

-3

हो सकता है कि मैं इस बिंदु से चूक गया हो, लेकिन NAVY आदमी के जवाब में यहाँ बताया गया है कि कैसे ब्राउज़र आपको 'अनुरोधकर्ता' का IP पता बता सकता है (यद्यपि केवल उनका सेवा प्रदाता है)।

क्लाइंट द्वारा रेंडर किए जाने वाले पेज में एक स्क्रिप्ट टैग रखें (कॉल करने के लिए src इशारा करते हुए) एक और सर्वर है जो संतुलित नहीं है (मुझे पता है कि इसका मतलब है कि आपको दूसरे सर्वर तक पहुंच की आवश्यकता है लेकिन इन दिनों होस्टिंग सस्ता है और आप कर सकते हैं इसे आसानी से और सस्ते में सेट करें)।

यह उस प्रकार का कोड है जिसे क्लाइंट पेज में जोड़ने की आवश्यकता है:

दूसरे सर्वर "someServerIown" पर आपको ASP, ASPX या PHP पेज होना चाहिए;

----- इसमें सर्वर कोड शामिल है:

"<% Response.Write (" var clientipaddress = '"और Request.ServerVariables (" REMOTE_ADDR ") और"'; ")%>" (बाहर के dbl उद्धरणों के बिना :-))

---- और इस कोड को वापस स्क्रिप्ट टैग में लिखते हैं:

   var clientipaddress = '178.32.21.45';

यह प्रभावी रूप से एक जावास्क्रिप्ट वैरिएबल बनाता है जिसे आप पेज पर जावास्क्रिप्ट के साथ एक्सेस कर सकते हैं।

उम्मीद है, आप इस संस्करण का उपयोग करते हैं और वापस भेजने के लिए तैयार प्रपत्र नियंत्रण के लिए मूल्य लिखते हैं।

जब उपयोगकर्ता पोस्ट करता है या अगले अनुरोध पर आपका जावास्क्रिप्ट और / या फॉर्म चर का मूल्य भेजता है जो "otherServerIown" ने आपके लिए भर दिया है, तो उस सर्वर पर वापस जिसे आप इसे पसंद करेंगे।

यह है कि मैं डंब लोड बैलेंसर के चारों ओर मिलता हूं, हमारे पास ग्राहक आईपी पते के मुखौटे हैं और यह लोड बैलेंसर के रूप में दिखाई देता है .... गूंगा ... गूंगा गूंगा!

मैंने सटीक समाधान नहीं दिया है क्योंकि सभी की स्थिति थोड़ी अलग है। अवधारणा ध्वनि है, हालांकि। इसके अलावा, ध्यान दें कि यदि आप HTTPS पृष्ठ पर यह कर रहे हैं तो आपके "otherServerIOwn" को भी उस सुरक्षित रूप में वितरित करना होगा अन्यथा क्लाइंट मिश्रित सामग्री के लिए सतर्क हो जाता है। और अगर आपके पास https है तो सुनिश्चित करें कि आपके सभी सेर्ट्स वैध हैं अन्यथा क्लाइंट को चेतावनी भी मिलती है।

आशा है कि यह किसी की मदद करता है! क्षमा करें, उत्तर देने / योगदान देने में एक वर्ष लग गया। :-)


3
क्षमा करें, लेकिन मुझे लगता है कि यह वास्तव में मूल सवाल का जवाब नहीं लगता है downvote था। वे सिर्फ एक मानक DNS लुकअप चाहते हैं, न कि उपयोगकर्ता का सार्वजनिक आईपी।
साइमन ईस्ट

-4

मेरा संस्करण इस प्रकार है:

मेरे सर्वर पर php:

<?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:

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

}).done( function( json ) {

    self.ip = json;

});

यह क्रॉस डोमेन का काम करता है। यह एक स्थिति जाँच का उपयोग कर सकता है। उस पर काम कर रहे हैं।


2
क्षमा करें, लेकिन मुझे लगता है कि यह वास्तव में मूल सवाल का जवाब नहीं लगता है downvote था। वे सिर्फ एक मानक DNS लुकअप चाहते हैं, न कि उपयोगकर्ता का सार्वजनिक आईपी। आपका कोड $ _GET को भी साफ नहीं करता है जो एक बड़ा सुरक्षा मुद्दा है।
साइमन ईस्ट

@Simon पूर्व मुझे लगता है कि यह और भी बुरा है। ऐसा लगता है कि वे DNS द्वारा किसी भी आईपी को देखना चाहते हैं।
जोएरी

@SimonEast आप यह साबित नहीं कर सकते कि यह एक सुरक्षा मुद्दा है क्योंकि आपको पता नहीं है कि मैंने अपने php को कैसे संकलित किया है। आपकी सख्ती सिर्फ मूर्खतापूर्ण है।
जोएरी

-10

यदि क्लाइंट ने जावा स्थापित किया है, तो आप कुछ ऐसा कर सकते हैं:

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

इसके अलावा, आपको संभवतः सर्वर साइड स्क्रिप्ट का उपयोग करना होगा।


8
कोई इसे क्यों बढ़ा रहा है? जावा! = जावास्क्रिप्ट, यह एक जवाब नहीं है।
स्वेन मावी

2
खट खट। वहाँ कौन है? (... लंबी विराम) जावा एप्लेट
माइक नेल्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.