如何使用JavaScript获取客户端的IP地址?

我需要以某种方式使用JavaScript检索客户端的IP地址;没有服务器端代码,甚至没有SSI。

但是,我不反对使用免费的第三方脚本/服务。

泡芙十三2020/03/12 14:32:15
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });
村村小小十三2020/03/12 14:32:15

首先是实际答案不可能仅使用客户端执行的代码来找到您自己的IP地址。

但是,您可以仅对https://api.muctool.de/whois进行GET 并收到类似获取客户端IP地址的信息

{
"ip": "88.217.152.15",
"city": "Munich",
"isp": "M-net Telekommunikations GmbH",
"country": "Germany",
"countryIso": "DE",
"postalCode": "80469",
"subdivisionIso": "BY",
"timeZone": "Europe/Berlin",
"cityGeonameId": 2867714,
"countryGeonameId": 2921044,
"subdivisionGeonameId": 2951839,
"ispId": 8767,
"latitude": 48.1299,
"longitude": 11.5732,
"fingerprint": "61c5880ee234d66bded68be14c0f44236f024cc12efb6db56e4031795f5dc4c4",
"session": "69c2c032a88fcd5e9d02d0dd6a5080e27d5aafc374a06e51a86fec101508dfd3",
"fraud": 0.024,
"tor": false
}
神奇Tony古一2020/03/12 14:32:15

您可以使用客户端可以调用的Flash对象,完全在客户端执行此操作,并且大多数情况下可以在JavaScript中执行。Flash 可以访问本地计算机的IP地址,这可能不是很有用。

Sam蛋蛋Itachi2020/03/12 14:32:15

确实没有可靠的方法来获取客户端计算机的IP地址。

这经历了一些可能性。如果用户具有多个接口,则使用Java的代码将中断。

http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html

从这里查看其他答案,听起来您可能想要获取客户端的公共IP地址,该地址可能是他们用来连接到互联网的路由器的地址。这里的许多其他答案都在谈论这一点。我建议创建并托管自己的服务器端页面,以接收请求并使用IP地址进行响应,而不是依赖于可能会或可能不会继续工作的其他人的服务。

GreenSamA2020/03/12 14:32:15

使用ipdata.co

该API还提供地理位置数据,并具有10个全局端点,每个端点每天可以处理超过800M个请求!

此答案使用的“测试” API密钥非常有限,仅用于测试几个调用。注册您自己的免费API密钥,每天最多可获得1500个开发请求。

$.get("https://api.ipdata.co?api-key=test", function (response) {
    $("#response").html(response.ip);
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>

西门猴子2020/03/12 14:32:15

我非常喜欢,api.ipify.org因为它同时支持HTTP和HTTPS。

以下是一些api.ipify.org使用jQuery 获取IP的示例

通过HTTPS的JSON格式

https://api.ipify.org?format=json

$.getJSON("https://api.ipify.org/?format=json", function(e) {
    alert(e.ip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

通过HTTP的JSON格式

http://api.ipify.org?format=json

$.getJSON("http://api.ipify.org/?format=json", function(e) {
    alert(e.ip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

通过HTTPS的文本格式

如果您不希望在JSON中使用它,那么还会通过HTTPS提供纯文本响应

https://api.ipify.org

通过HTTP的文本格式

还有通过HTTP的明文响应

http://api.ipify.org
小小神奇2020/03/12 14:32:15

Javascript / jQuery获取客户端的IP地址和位置(国家/地区,城市)

您只需要将带有“ src”链接的标签嵌入服务器。服务器将返回“ codehelper_ip”作为对象/ JSON,您可以立即使用它。

// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?js"></script>
// You can use it
<script language="Javascript">
    alert(codehelper_ip.IP);
    alert(codehelper_ip.Country);
</script>

有关更多信息,请参见Javascript Detect Real IP Address Plus Country

如果您使用的是jQUery,则可以尝试:

console.log(codehelper_ip); 

它将向您显示有关返回对象的更多信息。

如果您想要回调函数,请尝试以下操作:

// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?callback=yourcallback"></script>
// You can use it
<script language="Javascript">
    function yourcallback(json) {
       alert(json.IP);
     }
</script>
老丝2020/03/12 14:32:15

除非您使用某种外部服务,否则通常是不可能的。

村村宝儿Itachi2020/03/12 14:32:15

好吧,我偏离了这个问题,但是今天我有类似的需求,尽管我无法使用Javascript从客户端找到ID,但是我做了以下工作。

在服务器端:-

<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>

使用JavaScript

var ip = $get("uip").innerHTML;

我正在使用ASP.Net Ajax,但是可以使用getElementById代替$ get()。

发生的是,我在页面上隐藏了div元素,并从服务器呈现了用户的IP。比起Java,我只是加载了那个值。

这可能对像您这样有类似要求的人(像我一样,但我还没有弄清楚)有帮助。

干杯!

神无JimEva2020/03/12 14:32:15

您可以使用userinfo.io javascript库。

<script type="text/javascript" src="userinfo.0.0.1.min.js"></script>

UserInfo.getInfo(function(data) {
  alert(data.ip_address);
}, function(err) {
  // Do something with the error
});

您也可以使用requirejs加载脚本。

它会为您提供访问者的IP地址,以及有关其位置(国家,城市等)的一些数据。它基于maxmind geoip数据库。

免责声明:我写了这个库

樱理查德2020/03/12 14:32:15

通过使用Smart-IP.net Geo-IP API例如,通过使用jQuery:

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.host);
        }
    );
});
小卤蛋Tony2020/03/12 14:32:14

您可以为此使用我的服务http://ipinfo.io,它将为您提供客户端IP,主机名,地理位置信息和网络所有者。这是一个记录IP的简单示例:

$.get("http://ipinfo.io", function(response) {
    console.log(response.ip);
}, "jsonp");

这是一个更详细的JSFiddle示例,该示例还打印了完整的响应信息,因此您可以看到所有可用的详细信息:http : //jsfiddle.net/zK5FN/2/

2020/03/12 14:32:14

别再看了

查看http://www.ipify.org/

根据他们:

  • 您可以无限制使用它(即使您每分钟执行数百万个请求)。
  • ipify是完全开源的(请查看GitHub存储库)。

这是一个有效的JS示例(而不是想知道为什么这个答案投票这么少,请自己尝试一下以查看实际效果):

<script>
function getIP(json) {
  alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

太懒于复制/粘贴?我喜欢。这是一个演示

懒得点击? :O

注意在运行演示之前关闭Adblock Plus / uBlock&co ..否则,它将无法正常工作。

与IPify团队无关我只是认为有人为一般利益提供这样的服务真是太荒谬了。

小胖Itachi2020/03/12 14:32:14

你不能 您必须询问服务器。

小小卡卡西2020/03/12 14:32:14

在您的页面中包含以下代码: <script type="text/javascript" src="http://l2.io/ip.js"></script>

更多文档在这里

达蒙Itachi理查德2020/03/12 14:32:14

您可以对hostip.info或类似服务进行ajax调用...

function myIP() {
    if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
    else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.open("GET","http://api.hostip.info/get_html.php",false);
    xmlhttp.send();

    hostipInfo = xmlhttp.responseText.split("\n");

    for (i=0; hostipInfo.length >= i; i++) {
        ipAddress = hostipInfo[i].split(":");
        if ( ipAddress[0] == "IP" ) return ipAddress[1];
    }

    return false;
}

另外,地理定位信息会在同一调用中返回。

Gil村村2020/03/12 14:32:14

您可以通过JSONP通过服务器端进行中继

在搜寻时找到它的同时,在SO上找到了它。我可以使用客户端Javascript执行DNS查找(从主机名到IP地址)吗?

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

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

注意: telize.com API已于2015年11月15日永久关闭

斯丁西门2020/03/12 14:32:14
尝试这个
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

要么

$(document).ready(function () {
    $.getJSON("http://jsonip.com/?callback=?", function (data) {
        console.log(data);
        alert(data.ip);
    });
});

小提琴