ฉันสามารถทำการค้นหา DNS (ชื่อโฮสต์ไปยังที่อยู่ IP) โดยใช้ Javascript ฝั่งไคลเอ็นต์ได้หรือไม่


92

ฉันต้องการใช้ Javascript ฝั่งไคลเอ็นต์เพื่อทำการค้นหา DNS (ชื่อโฮสต์ไปยังที่อยู่ IP) ตามที่เห็นจากคอมพิวเตอร์ของไคลเอนต์ เป็นไปได้หรือไม่


5
หลายคำตอบสำหรับคำถามนี้ดูเหมือนจะแนะนำให้ทำในฝั่งเซิร์ฟเวอร์แก้ปัญหา ขึ้นอยู่กับกรณีการใช้งานที่อาจไม่เพียงพอ ตัวอย่างเช่นหากบริการที่คุณกำลังค้นหาใช้ GSLB อาจส่งคืน IP ที่แตกต่างกันโดยขึ้นอยู่กับตำแหน่งของผู้ใช้ ด้วยเหตุนี้การตอบสนองที่โค้ดฝั่งเซิร์ฟเวอร์ได้รับจึงมีแนวโน้มที่จะเป็นการตอบสนองที่แตกต่างจากที่เบราว์เซอร์จะได้รับ ดังที่กล่าวมาฉันยังไม่มีทางเลือกอื่นสำหรับผู้ที่สนใจเกี่ยวกับความแตกต่างนี้
Ilan Rabinovitch

คำตอบ:


35

ไม่มีความคิดเกี่ยวกับโฮสต์หรือที่อยู่ IP ในไลบรารีมาตรฐานจาวาสคริปต์ ดังนั้นคุณจะต้องเข้าถึงบริการภายนอกเพื่อค้นหาชื่อโฮสต์ให้คุณ

ฉันขอแนะนำให้โฮสต์ cgi-bin ซึ่งค้นหาที่อยู่ IP ของชื่อโฮสต์และเข้าถึงผ่านจาวาสคริปต์


26
cgi-bin? นั่นคือโรงเรียนเก่า ฉันชอบมัน!
Andrew Hedges

10
นี่เป็นเรื่องจริงในขณะที่เขียน (2008) นี่ไม่เป็นความจริงในอีก 6 ปีต่อมา: ดูความคิดเห็นของฉันเกี่ยวกับ WebRTC ในหน้าเดียวกันนี้ (โชคร้ายที่ Google ยังคงชี้ไปที่ชุดข้อความนี้เมื่อค้นหาวิธีแก้ไขปัญหาที่อยู่ IP และอาจทำให้ผู้คนไปในทิศทางที่ไม่ถูกต้อง)
earizon

1
@earizon - คำตอบของคุณคือคำถามอื่น - วิธีค้นหาที่อยู่ IP ส่วนตัวของคุณเอง
Gene Vayngrib

ปัญหาผ่าน CGI จากคลาวด์คือการค้นพบไอพีโฮสต์อินทราเน็ตซึ่งไม่สามารถทำได้จากภายนอก คุณจะต้องใช้บริการท้องถิ่นบนเครื่องหรืออินทราเน็ต
Tzahi Fadida

มีมาตรฐานอินเทอร์เน็ตที่เสนอใหม่ซึ่งช่วยให้คุณสามารถส่งแบบสอบถาม DNS ผ่าน HTTPS ได้ (ดูคำตอบนี้stackoverflow.com/a/58299823/9638991 ) ในความเป็นจริงโดยทั่วไปแล้วมันใช้งานได้เหมือนกับสคริปต์ cgi-bin :) (ยกเว้นว่า IETF ได้รับมาตรฐานและ บริษัท ใหญ่ ๆ จำนวนมากสนับสนุน)
kimbo

82

แก้ไข : คำถามนี้ทำให้ฉันรู้สึกคันดังนั้นฉันจึงติดตั้งบริการเว็บเซิร์ฟเวอร์ JSONP บน Google App Engine ที่ส่งคืนที่อยู่ IP ของไคลเอ็นต์ การใช้งาน:

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

ใช่ไม่จำเป็นต้องใช้พร็อกซีเซิร์ฟเวอร์


JS บริสุทธิ์ไม่ได้ หากคุณมีสคริปต์เซิร์ฟเวอร์ภายใต้โดเมนเดียวกับที่พิมพ์ออกมาคุณสามารถส่ง XMLHttpRequest เพื่ออ่านได้


4
คุณสามารถโพสต์แหล่งที่มาในบริการเว็บของคุณได้หรือไม่? มันจะเป็นการดีที่จะเรียกใช้อินสแตนซ์
จะ

18
ขออภัยต้องลดคะแนนเนื่องจากฉันไม่คิดว่าจะตอบคำถามเดิมได้จริง พวกเขาต้องการเพียงการค้นหา DNS มาตรฐานไม่ใช่ IP สาธารณะของผู้ใช้
Simon East

31

สายมาก แต่ฉันเดาว่าหลายคนยังคงมาที่นี่ผ่าน "Google Airlines" แนวทางของโมเด็มคือการใช้ 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
นี่เป็นความสามารถใหม่ที่ไม่มีมาก่อน WebRTC - เพื่อค้นหาที่อยู่ IP ของคุณเอง แต่ @noahjacobson ถามคำถามที่แตกต่างออกไป - การค้นหา DNS ของ IP โดยใช้ชื่อโฮสต์จากจาวาสคริปต์
Gene Vayngrib

2
น่าสนใจมากมันเป็นข้อบกพร่องหรือข้อบกพร่องในการออกแบบอย่างไรก็ตามเมื่อถึงจุดหนึ่งจะได้รับการแก้ไขดังนั้นจึงไม่ดีสำหรับโครงการระยะยาว
e-info128

16

ฉันรู้ว่ามีการถามคำถามนี้เมื่อนานมาแล้ว แต่ฉันคิดว่าจะให้คำตอบล่าสุด

DNS ผ่าน HTTPS (DoH)

คุณสามารถส่งแบบสอบถาม DNS ผ่าน HTTPS ไปยังตัวแก้ไข DNS ที่รองรับได้ มาตรฐานสำหรับ DOH อธิบายไว้ในRFC 8484

นี่เป็นสิ่งที่คล้ายกับสิ่งที่คำตอบอื่น ๆ แนะนำเฉพาะที่ DoH เป็นโปรโตคอล DNS ผ่าน HTTPS นอกจากนี้ยังเป็นมาตรฐานอินเทอร์เน็ตที่ "เสนอ" และกำลังเป็นที่นิยมมาก ตัวอย่างเช่นเบราว์เซอร์หลัก ๆ บางตัวรองรับหรือมีแผนที่จะสนับสนุน (Chrome, Edge, Firefox) และ Microsoft อยู่ระหว่างการสร้างมันลงในระบบปฏิบัติการ

วัตถุประสงค์ประการหนึ่งของ DoH คือ:

อนุญาตให้เว็บแอปพลิเคชันเข้าถึงข้อมูล DNS ผ่านทาง API ของเบราว์เซอร์ที่มีอยู่ได้อย่างปลอดภัยซึ่งสอดคล้องกับ Cross Origin Resource Sharing (CORS)

มีเครื่องมือที่เปิดแหล่งที่มาโดยเฉพาะอย่างยิ่งสำหรับการทำการค้นหา DNS จากการใช้งานเว็บที่เรียกว่าเป็นdohjs มันไม่DNS ผ่าน HTTPS (DOH) wireformat คำสั่งตามที่อธิบายในRFC 8484 รองรับทั้ง GET และ POST วิธีการ

การเปิดเผยข้อมูลทั้งหมด: ฉันเป็นผู้สนับสนุน dohjs

DNS ผ่าน HTTPS JSON API

หากคุณไม่ต้องการกังวลกับรูปแบบสาย DNS ทั้ง Google และ Cloudflare เสนอ JSON API สำหรับ DNS ผ่าน HTTPS

ตัวอย่างโค้ด Javascript เพื่อค้นหา example.com ด้วย JSON DOH API ของ Google:

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

ตัวอย่างจาก RFC สำหรับ DOH GET และ POST ด้วยรูปแบบลวด

นี่คือตัวอย่างที่ RFC ให้สำหรับทั้ง GET และ POST (ดูhttps://tools.ietf.org/html/rfc8484#section-4.1.1 ):

รับตัวอย่าง:

คำขอตัวอย่างแรกใช้ GET เพื่อขอ "www.example.com"

: method = GET
: Scheme = https
: authority = dnsserver.example.net
: path = / dns-query? dns = AAABAAABAAAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB
accept = application / dns-message

ตัวอย่าง POST:

แบบสอบถาม DNS เดียวกันสำหรับ "www.example.com" โดยใช้วิธีการ POST จะเป็น:

: method = POST
: Scheme = https
: authority = dnsserver.example.net
: path = / dns-query
accept = application / dns-message
content-type = application / dns-message
content-length = 33

<33 ไบต์แสดงโดยการเข้ารหัสฐานสิบหกต่อไปนี้> 00 00 01 00 00 01 00 00 00 00 00 00 03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01

สถานที่อื่น ๆ ในการส่งแบบสอบถาม DOH

คุณสามารถค้นหารายการตัวแก้ไข DNS สาธารณะที่รองรับ DNS ผ่าน HTTPS ได้ในสองที่:

จากแหล่งข้อมูลข้างต้นฉันจะบอกว่ารายการใน wiki ของ Curl และรายการ DNSCrypt น่าจะเป็นรายการที่สมบูรณ์และอัปเดตบ่อยที่สุด หน้า Curl ยังมีรายการเครื่องมือโอเพนซอร์สสำหรับ DoH (เซิร์ฟเวอร์พร็อกซีไคลเอ็นต์ libs ฯลฯ )


14

เวอร์ชัน JSONP ที่โฮสต์ทำงานได้อย่างมีเสน่ห์ แต่ดูเหมือนว่าจะใช้ทรัพยากรในช่วงกลางคืนเกือบทุกวัน (เวลาตะวันออก) ฉันจึงต้องสร้างเวอร์ชันของตัวเอง

นี่คือวิธีที่ฉันประสบความสำเร็จด้วย PHP:

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

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

จากนั้น Javascript ก็เหมือนเดิมทุกประการไม่ใช่อาร์เรย์:

<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! แค่สิ่งที่ฉันกำลังมองหา :)
jClark

เดี๋ยวก่อนทำไมถึงใช้ $ _GET? อย่างที่คุณบอกว่านี่คือช่องโหว่ ไม่สามารถใช้: echo 'getip ('. $ data. ');';
deweydb

7
ขออภัยต้องลดคะแนนเนื่องจากฉันไม่คิดว่าจะตอบคำถามเดิมได้จริง พวกเขาต้องการเพียงการค้นหา DNS มาตรฐานไม่ใช่ IP สาธารณะของผู้ใช้
Simon East

2
@SimonEast เหอ ๆ . คุณแก้ไขคำถามของคำถามอายุ 7 ปี ทำทุกอย่างที่คุณต้องการเพื่อตอบสนองตัวเอง ;-)
tcole

2
ฉันเพียงแก้ไขคำถามเดิมเพื่อให้ชัดเจนขึ้นเนื่องจากฉันเพิ่งค้นคว้าคำถามเดียวกันนี้ แต่ด้วยเหตุผลบางประการคำตอบส่วนใหญ่ที่นี่ไม่ใช่สิ่งที่ผู้โพสต์ต้นฉบับต้องการและควรโพสต์ไว้ภายใต้คำถามอื่น
Simon East

3

ฉันรู้ว่านี่เป็นคำถามเก่า แต่วิธีแก้ปัญหาของฉันอาจช่วยเหลือผู้อื่นได้

ฉันพบว่าบริการ JSON (P) ที่ทำให้ง่ายนี้ไม่คงอยู่ตลอดไป แต่ JavaScript ต่อไปนี้ใช้ได้ดีสำหรับฉันในขณะที่เขียน

<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 ของเซิร์ฟเวอร์ของฉันบนหน้าที่ตั้งอยู่ แต่สคริปต์สามารถแก้ไขเพื่อค้นหา IP ใดก็ได้โดยเปลี่ยน 'zero.eu.org' เป็นชื่อโดเมนอื่น สิ่งนี้สามารถเห็นได้ในหน้าของฉันที่: http://meon.zero.eu.org/


ฉันไม่เข้าใจวิธีค้นหาที่อยู่ IP ของตัวเองโดยใช้สิ่งนี้: <! - # echo var = "REMOTE_ADDR" -> ตามเว็บไซต์ของคุณ
George Carlin

นี่คือสิ่งอำนวยความสะดวก 'echo' มาตรฐานที่มีอยู่ในเว็บเซิร์ฟเวอร์ส่วนใหญ่ ดู: google.co.uk/…
Neville Hillyer

1
นี่อาจเป็นคำตอบเดียวที่สามารถตอบคำถามเดิมได้อย่างถูกต้องและทำได้ดี น่าเสียดายที่ไม่เป็นไปตามที่เห็นจากชิ้นส่วนคอมพิวเตอร์ของลูกค้าซึ่งอาจเป็นข้อกำหนดที่สำคัญ (หรือไม่ก็ได้)
Simon East

@Simon - มันบอกว่า "เท่าที่เห็นจากคอมพิวเตอร์ของลูกค้า" ตรงไหนและทำไมคำตอบของฉันถึงไม่เป็นไปตามนี้?
Neville Hillyer

1
@Simon - จุดดี แต่เนื่องจากโดยปกติ JS ฝั่งไคลเอ็นต์เป็นเซิร์ฟเวอร์ที่ให้มาจึงมีโอกาสที่ดีที่ผู้เขียน / เจ้าของเซิร์ฟเวอร์จะทราบถึงข้อ จำกัด DNS นี้ - อาจเป็นปัญหาสำหรับผู้เขียนที่ใช้เซิร์ฟเวอร์ของบุคคลที่สาม ตามที่ระบุไว้ในโพสต์ที่นี่เทคโนโลยีที่มีอยู่ต้องดิ้นรนเพื่อให้เป็นไปตามข้อ จำกัด ทั้งหมดในข้อนี้ ข้อมูลที่ฉันป้อนมีจุดประสงค์เพื่อสื่อถึงโซลูชันที่ฉันพบว่าใช้งานได้จริงที่สุดบนเซิร์ฟเวอร์
Neville Hillyer


1

อย่างที่หลาย ๆ คนบอกว่าคุณต้องใช้บริการภายนอกและเรียกมันว่า และนั่นจะทำให้คุณได้รับการแก้ปัญหา DNS จากมุมมองของเซิร์ฟเวอร์เท่านั้น

หากดีพอและหากคุณต้องการความละเอียด DNS คุณสามารถใช้คอนเทนเนอร์ Docker ต่อไปนี้:

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"
     ]
 }

คำแนะนำของฉันคือคุณตั้งค่าเว็บเซิร์ฟเวอร์ของคุณเพื่อย้อนกลับพร็อกซีไปยังคอนเทนเนอร์บนปลายทางเฉพาะในเซิร์ฟเวอร์ของคุณที่ให้บริการ Javascript ของคุณและเรียกใช้โดยใช้ฟังก์ชัน Javascript Ajax มาตรฐานของคุณ


1

มี javascript library DNS-JS.comที่ทำสิ่งนี้ได้

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

1
ยังไม่ใช่จากมุมมองของลูกค้า ไลบรารีดังกล่าวส่งคำขอไปยังdns-js.com/api.aspxเพื่อขอรับที่อยู่ IP ซึ่งจะแก้ไข DNS ฝั่งเซิร์ฟเวอร์
wp-overwatch.com

0

การทำเช่นนี้จะต้องทำลายแซนด์บ็อกซ์ของเบราว์เซอร์ พยายามให้เซิร์ฟเวอร์ของคุณทำการค้นหาและร้องขอจากฝั่งไคลเอ็นต์ผ่าน XmlHttp


-1

Firefox มี API ในตัวสำหรับสิ่งนี้ตั้งแต่ v60 สำหรับ WebExtensions:

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


ด้วยเหตุผลใดก็ตามbrowserไม่มีใน Firefox 64 beta ดังนั้นฉันจึงสงสัยว่ามันถูกลบออกไป
Kevin Ghadyani

3
@Sawtaytoes: มันถูกเปิดเผยสำหรับWebExtensionsเท่านั้น โปรดทราบว่าต้องdnsได้รับอนุญาตและสคริปต์จะไม่ทำงานเป็นสคริปต์เนื้อหา (เช่นเดิมอีกครั้งbrowser.dnsจะไม่ถูกเปิดเผยที่นั่น)
Saturnus

@Saturnus ใช้งานได้ดีสำหรับส่วนขยาย Firefox มีโอกาสที่จะทำเช่นเดียวกันกับส่วนขยาย Chrome บ้างไหม?
drk

-1

แน่ใจว่าคุณสามารถทำได้โดยไม่ต้องใช้การเพิ่มเติมใด ๆ เพียงแค่ javascript บริสุทธิ์โดยใช้วิธีการ dns นี้browser.dns.resolve("example.com"); แต่เข้ากันได้กับ FIREFOX 60 เท่านั้นคุณสามารถดูข้อมูลเพิ่มเติมได้ที่ MDN https://developer.mozilla.org/en-US/docs / Mozilla / Add-ons / WebExtensions / API / dns / แก้ไข


4
วิธีนี้ใช้ได้เฉพาะในบริบทของ WebExtension ไม่สามารถใช้โดยหน้าเว็บได้
Duskwuff

-2

ฉันไม่คิดว่าเบราว์เซอร์ส่วนใหญ่อนุญาตด้วยเหตุผลด้านความปลอดภัยในบริบท JavaScript บริสุทธิ์ตามที่คำถามถาม


5
มันไม่ใช่คำตอบ นี่ควรเป็นความคิดเห็น!
trejder

-3

บางทีฉันอาจพลาดประเด็นไป แต่ในการตอบกลับ NAVY guy นี่คือวิธีที่เบราว์เซอร์สามารถบอกที่อยู่ IP ของ 'ผู้ร้องขอ' (แม้ว่าอาจเป็นเพียงผู้ให้บริการของพวกเขา)

วางแท็กสคริปต์ในหน้าที่จะแสดงโดยไคลเอนต์ที่เรียก (มี src ชี้ไปที่) เซิร์ฟเวอร์อื่นที่ไม่ได้โหลดบาลานซ์ (ฉันรู้ว่านี่หมายความว่าคุณต้องเข้าถึงเซิร์ฟเวอร์ที่ 2 แต่โฮสติ้งราคาถูกในปัจจุบันและคุณสามารถทำได้ ตั้งค่านี้ได้ง่ายและราคาถูก)

นี่คือประเภทของรหัสที่ต้องเพิ่มในหน้าไคลเอนต์:

บนเซิร์ฟเวอร์อื่น "someServerIown" คุณต้องมีเพจ ASP, ASPX หรือ PHP ที่;

----- มีรหัสเซิร์ฟเวอร์ดังนี้:

"<% Response.Write (" var clientipaddress = '"& Request.ServerVariables (" REMOTE_ADDR ") &"'; ")%>" (โดยไม่มีเครื่องหมายคำพูด dbl ภายนอก :-))

---- และเขียนโค้ดนี้กลับไปที่แท็กสคริปต์:

   var clientipaddress = '178.32.21.45';

สิ่งนี้สร้างตัวแปร Javascript ได้อย่างมีประสิทธิภาพซึ่งคุณสามารถเข้าถึงด้วย Javascript บนหน้าเว็บได้ไม่น้อย

หวังว่าคุณจะเข้าถึงตัวแปรนี้และเขียนค่าลงในตัวควบคุมฟอร์มที่พร้อมสำหรับการส่งกลับ

เมื่อผู้ใช้โพสต์หรือได้รับคำขอถัดไป Javascript และ / หรือแบบฟอร์มของคุณส่งค่าของตัวแปรที่ "otherServerIown" ได้กรอกให้คุณกลับไปที่เซิร์ฟเวอร์ที่คุณต้องการ

นี่คือวิธีที่ฉันเข้าใจตัวโหลดบาลานเซอร์แบบโง่ ๆ ที่เรามีที่มาสก์ที่อยู่ IP ของไคลเอนต์และทำให้มันปรากฏเป็นของตัวโหลดบาลานเซอร์ .... โง่ ... โง่โง่โง่!

ฉันไม่ได้ให้คำตอบที่แน่นอนเพราะสถานการณ์ของทุกคนแตกต่างกันเล็กน้อย อย่างไรก็ตามแนวคิดนี้ฟังดูดี นอกจากนี้โปรดทราบว่าหากคุณกำลังทำสิ่งนี้บนหน้า HTTPS "otherServerIOwn" ของคุณจะต้องส่งในรูปแบบที่ปลอดภัยนั้นด้วยมิฉะนั้นไคลเอ็นต์จะได้รับการแจ้งเตือนเมื่อมีเนื้อหาผสมกัน และหากคุณมี https ให้ตรวจสอบให้แน่ใจว่าใบรับรองทั้งหมดของคุณถูกต้องมิฉะนั้นลูกค้าจะได้รับคำเตือนด้วย

หวังว่าจะช่วยใครสักคน! ขออภัยใช้เวลาหนึ่งปีในการตอบ / ร่วมให้ข้อมูล :-)


3
ขออภัยต้องลดคะแนนเนื่องจากฉันไม่คิดว่าจะตอบคำถามเดิมได้จริง พวกเขาต้องการเพียงการค้นหา DNS มาตรฐานไม่ใช่ IP สาธารณะของผู้ใช้
Simon East

-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
ขออภัยต้องลดคะแนนเนื่องจากฉันไม่คิดว่าจะตอบคำถามเดิมได้จริง พวกเขาต้องการเพียงการค้นหา DNS มาตรฐานไม่ใช่ IP สาธารณะของผู้ใช้ นอกจากนี้รหัสของคุณยังไม่ฆ่าเชื้อ $ _GET ซึ่งเป็นปัญหาใหญ่ด้านความปลอดภัย
Simon East

@ ไซม่อนอีสผมว่ายิ่งแย่ ดูเหมือนว่าพวกเขาต้องการค้นหา IP ด้วย DNS
Joeri

@SimonEast คุณไม่สามารถพิสูจน์ได้ว่าเป็นปัญหาด้านความปลอดภัยเนื่องจากคุณไม่รู้ว่าฉันรวบรวม php ของฉันอย่างไร ความเข้มงวดของคุณเป็นเพียงความโง่เขลา
Joeri

-10

หากไคลเอนต์ติดตั้ง Java คุณสามารถทำสิ่งนี้:

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

นอกเหนือจากนั้นคุณอาจต้องใช้สคริปต์ฝั่งเซิร์ฟเวอร์


8
ทำไมบางคนถึงโหวตเรื่องนี้? java! = javascript นี่ไม่ใช่คำตอบ
Sven Mawby

2
ก๊อกก๊อก. ใครอยู่ตรงนั้นน่ะ? (... หยุดยาว) Java Applet
mike nelson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.