我想使用客户端JavaScript来执行从客户端计算机上看到的DNS查找(主机名到IP地址)。那可能吗?我可以使用客户端Javascript执行DNS查找(主机名到IP地址)吗?
回答
有在JavaScript标准库没有主机或IP地址的概念。所以你必须访问一些外部服务来为你查找主机名。
我建议举办一个cgi-bin目录,其是通过JavaScript查找一个主机名和访问的IP地址。
cgi-bin?那是个老派。我喜欢! – 2008-09-20 01:02:26
撰写本文时(2008年)这是真实的。这在6年之后是不正确的:在同一页面查看我对WebRTC的评论。 (不幸的是,当搜索IP地址问题的解决方案时,Google仍指向此主题,并且可能会将人们置于错误的方向)。 – earizon 2014-09-30 16:47:05
@earizon - 你的答案是针对不同的问题 - 如何发现你自己的私人IP地址。 – 2015-01-18 01:38:40
如果客户端已经安装了Java,你可以做这样的事情:
比ipAddress = java.net.InetAddress.getLocalHost().getHostAddress();
其他,你可能会使用一个服务器端脚本。
为什么有人提出这个问题? java!= javascript,这不是一个答案。 – fr34kyn01535 2015-06-06 14:47:49
爆震。谁在那? (...长时间停顿)Java Applet – 2017-02-06 03:45:44
这样做需要打破浏览器沙箱。试着让你的服务器执行查找,并通过XmlHttp从客户端请求。
编辑:这个问题给了我一个痒,所以我在Google App Engine上放置了一个JSONP web服务,它返回客户端的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来读取它。
您可以将源代码发布到您的Web服务吗?运行一个实例会很好。 – Will 2012-03-05 21:28:26
对不起,但不得不downvote,因为我不认为它实际上回答了原来的问题。他们只需要标准的DNS查询,而不是用户的公共IP。 – 2015-11-11 07:46:50
托管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!
也许我错过了点,但在回答NAVY家伙在这里是浏览器如何能告诉你“请求者” IP地址(尽管也许只有他们的服务提供商)。
在页面中放置一个脚本标记,由客户端调用(具有src指向)未负载均衡的另一个服务器呈现(我意识到这意味着您需要访问第二台服务器,但这些天托管很便宜你可以轻松而廉价地设置它)。
这是一个需要被添加到客户端页面的那种代码:
在其他的服务器“someServerIown”你需要有ASP,ASPX或者PHP页面;
-----包含服务器这样的代码:
“<% 回复于(” VAR端ClientIPAddress =“” & Request.ServerVariables( “REMOTE_ADDR”)& “';”) % >” (不含外侧引号DBL :-))
----并写这段代码回到脚本标签:
var clientipaddress = '178.32.21.45';
这有效创建一个Javascript变量,您可以在页面上使用Javascript访问,而不会更少。
希望你能够访问这个var并将值写入一个表单控件以准备发回。
当用户发布或获取下一个请求时,您的Javascript和/或表单会将“otherServerIown”为您填充的变量的值发送回您希望使用的服务器。
这就是我如何绕过哑巴负载平衡器,我们有屏蔽客户端IP地址,并使其显示为负载平衡器......愚蠢的愚蠢愚蠢愚蠢!
我还没有给出确切的解决方案,因为每个人的情况都有些不同。但是这个概念很好。另外请注意,如果您在HTTPS页面上执行此操作,则您的“otherServerIOwn”必须以该安全形式进行传递,否则会向客户端发出混合内容警报。如果您确实拥有https,请确保您的所有证书都有效,否则客户端也会收到警告。
希望它可以帮助别人!对不起,花了一年的时间来回答/提供。 :-)
我的版本是这样的:
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;
});
它的工作原理跨域。 它可以使用状态检查。正在努力。
很晚了,但我想很多人仍然会通过“Google Airlines”登陆这里。 Moderm方法是使用不需要服务器支持的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.";
}
副本&贴我知道这是一个老问题,但我的解决方案可以帮助他人。
我发现使这种简单的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,它位于页面上,但该脚本可以被修改,以发现通过改变“zero.eu.org”到另一个域名的任何IP。 这可以在行动,在可以看到我的网页上:http://meon.zero.eu.org/
有一个第三方服务提供了一个CORS友好的REST API从浏览器中执行DNS查找 - https://exana.io/tools/dns/
正如许多人说你需要使用外部服务并调用它。这只会让你从服务器的角度来看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"
]
}
我的建议是,你设置你的Web服务器反向代理到容器上的特定端点在服务器服务你的Javascript和使用标准的JavaScript Ajax函数调用它。
- 1. 执行DNS查找以使用JavaScript将主机名解析为IP地址
- 2. 从局域网中的IP地址查找DNS主机名
- 3. 如何使用Javascript代码查找客户端的IP地址
- 4. 使用javascript的客户端IP地址
- 5. DNS查询:从DNS /主机名获取IP地址
- 6. 我可以检索使用JS的客户端的内部IP地址吗?
- 7. Azure客户端IP地址
- 8. 客户端ip地址
- 9. 扭曲TCP客户端中远程对端的IP地址和主机名
- 10. 我可以在LCDS服务呼叫中获取客户端的IP地址吗?
- 11. 获取客户端的IP地址和计算机名称?
- 12. dns到directadmin ip地址:端口
- 13. 如何找到客户端的IP地址用perl
- 14. C++ Pipe [如何获取连接客户端的IP地址或主机名。]
- 15. 查找通过代理连接的客户端的IP地址
- 16. 查询DNS服务记录查找主机名和TCP/IP
- 17. 如何在python中设置“ip地址”,“DNS”,“主机名”,“MAC地址”?
- 18. 得到客户端机器的IP地址
- 19. 屏蔽主机名在Linux /猛砸/ Perl的IP地址查找
- 20. Bro脚本从IP地址查找主机名
- 21. 服务器如何找到真实的客户端IP地址?
- 22. 设置可以检测客户端IP地址的服务器
- 23. 如何查找Mac机器的DNS服务器IP地址?
- 24. 使用IP地址连接到客户端系统
- 25. DNS名称可能看起来像IP地址吗?
- 26. 我想检查IP地址到相应的主机名和主机名IP范围
- 27. 是否有可能从没有DNS的IP地址解析主机名?
- 28. 我可以以编程方式覆盖客户端app.config WCF端点地址吗?
- 29. 厨师 - 客户端IP地址
- 30. RESTEasy和客户端IP地址
对这个问题的许多答案似乎建议做解析服务器端。取决于可能不够用的用例。例如,如果您正在查找的服务正在使用GSLB,则可能会根据用户所在的位置返回不同的IP;因此服务器端代码收到的响应很可能与浏览器收到的响应不同。话虽如此,我还没有为那些关心这种差异的人提供另一种解决方案。 – 2012-07-12 08:02:47