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

时间:2008-12-24 18:22:31

标签: javascript jquery ip-address

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

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

48 个答案:

答案 0 :(得分:250)

更新:我一直想制作一个min / uglified版本的代码,所以这是一个ES6 Promise代码:



var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})

/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))




注意:如果你想要用户的所有IP(可能更多地取决于他的网络),这个新的缩小代码将只返回单个IP,使用原始代码...

由于 WebRTC ,在WebRTC支持的浏览器中获取本地IP非常容易(至少现在如此)。我修改了源代码,减少了行数,没有发出任何眩晕请求,因为你只需要本地IP,而不是公共IP,下面的代码适用于最新的Firefox和Chrome,只需运行代码片段并自行检查:



function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
  var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
  var pc = new myPeerConnection({iceServers: []}),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;

  function ipIterate(ip) {
    if (!localIPs[ip]) onNewIP(ip);
    localIPs[ip] = true;
  }
  pc.createDataChannel(""); //create a bogus data channel
  pc.createOffer(function(sdp) {
    sdp.sdp.split('\n').forEach(function(line) {
      if (line.indexOf('candidate') < 0) return;
      line.match(ipRegex).forEach(ipIterate);
    });
    pc.setLocalDescription(sdp, noop, noop);
  }, noop); // create offer and set local description
  pc.onicecandidate = function(ice) { //listen for candidate events
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
  };
}



var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);

function addIP(ip) {
  console.log('got ip: ', ip);
  var li = document.createElement('li');
  li.textContent = ip;
  ul.appendChild(li);
}

findIP(addIP);
&#13;
<h1> Demo retrieving Client IP using WebRTC </h1>
&#13;
&#13;
&#13;

这里发生的是,我们正在创建一个虚拟对等连接,并且为了让远程对等方联系我们,我们通常会互相交换冰候选人。阅读冰候选者(从本地会话描述和onIceCandidateEvent)我们可以告诉用户的IP。

我从中获取代码 - &gt; Source

答案 1 :(得分:175)

您可以通过服务器端使用JSONP

进行转发

在谷歌上搜索时,在SO Can I perform a DNS lookup (hostname to IP address) using client-side Javascript?

上找到了它
<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具有永久shut down as of November 15th, 2015

答案 2 :(得分:100)

这里的大多数答案“解决”服务器端代码的需求...击中别人的服务器。这是一种完全有效的技术,除非你实际上需要来获取IP地址而不需要服务器。

传统上,如果没有某种插件,这是不可能的(即使这样,如果你在NAT路由器后面,你可能会得到错误的 IP地址),但随着它的出现WebRTC实际上可以这样做... 如果你的目标是browsers that support WebRTC(目前:Firefox,Chrome和Opera)。

Please read mido's answer ,详细了解如何使用WebRTC检索有用的客户端IP地址。

答案 3 :(得分:81)

你可以对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;
}

作为奖励,地理定位信息会在同一个电话中返回。

答案 4 :(得分:72)

试试这个
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

OR

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

Fiddle

答案 5 :(得分:52)

不要再看了

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

据他们说:

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

这是一个有效的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>

太懒了复制/粘贴?我喜欢。 Here's a demo

太懒了点击? :O

  

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

我有没有与IPify团队有关。我认为有人会为一般商品提供这样的服务真是太酷了。

答案 6 :(得分:48)

你不能。你不得不问服务器。

答案 7 :(得分:25)

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

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

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

答案 8 :(得分:19)

在您的网页中加入此代码:<script type="text/javascript" src="http://l2.io/ip.js"></script>

更多文档here

答案 9 :(得分:16)

我想说乍得和马耳他有很好的答案。然而,他们很复杂。所以我建议通过国家/地区插件广告找到此代码

<script>
<script language="javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="javascript">
mmjsCountryCode = geoip_country_code();
mmjsCountryName = geoip_country_name();

</script>

没有ajax。只是简单的javascripts。 :d

如果您转到http://j.maxmind.com/app/geoip.js,您会看到它包含

function geoip_country_code() { return 'ID'; }
function geoip_country_name() { return 'Indonesia'; }
function geoip_city()         { return 'Jakarta'; }
function geoip_region()       { return '04'; }
function geoip_region_name()  { return 'Jakarta Raya'; }
function geoip_latitude()     { return '-6.1744'; }
function geoip_longitude()    { return '106.8294'; }
function geoip_postal_code()  { return ''; }
function geoip_area_code()    { return ''; }
function geoip_metro_code()   { return ''; }

它还没有真正回答这个问题,因为

http://j.maxmind.com/app/geoip.js不包含IP(虽然我打赌它使用IP来获取国家/地区)。

但制作像

这样的PhP脚本非常容易
function visitorsIP()   { return '123.123.123.123'; }

做到这一点。加上http://yourdomain.com/yourip.php

然后做

<script language="javascript" src="http://yourdomain.com/yourip.php"></script>

问题特别提到不要使用第三方脚本。没有其他办法。 Javascript无法知道您的IP。但是其他可以通过javascript访问的服务器可以正常工作而没有问题。

答案 10 :(得分:14)

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

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.host);
        }
    );
});

答案 11 :(得分:13)

这是一种更简单,更自由的方法,不会向访问者征求任何许可。

它包括向http://freegeoip.net/json提交一个非常简单的Ajax POST请求。收到您的位置信息后,在JSON中,您会通过更新页面或重定向到新页面来做出相应的反应。

以下是您提交位置信息请求的方式:

jQuery.ajax( { 
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) {
     console.log(location)
  }
} );

答案 12 :(得分:12)

好吧,我对这个问题很离题,但今天我有类似的需求,虽然我无法使用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从服务器呈现。比Javascript我只是加载那个值。

对于像你这样有类似要求的人来说,这可能会有所帮助(就像我一样,但我没想到这一点)。

干杯!

答案 13 :(得分:11)

除非您使用某种外部服务,否则一般情况下不可能。

答案 14 :(得分:9)

使用jQuery获取您的IP

你可以用一行JS获取你的公共IP地址吗?有免费服务为您提供此服务,您只需要获取请求:

   $.get('http://jsonip.com/', function(r){ console.log(r.ip); });

要使上述代码段生效,您的浏览器必须支持CORS(跨源请求共享)。除此以外 将抛出安全异常。在旧版浏览器中,您可以使用此版本,该版本使用JSON-P请求:

   $.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });

答案 15 :(得分:8)

Appspot.com回调服务不可用。 ipinfo.io似乎正在发挥作用。

我做了一个额外的步骤并使用AngularJS检索了所有地理信息。 (感谢里卡多)看看吧。

<div ng-controller="geoCtrl">
  <p ng-bind="ip"></p>
  <p ng-bind="hostname"></p>
  <p ng-bind="loc"></p>
  <p ng-bind="org"></p>
  <p ng-bind="city"></p>
  <p ng-bind="region"></p>
  <p ng-bind="country"></p>
  <p ng-bind="phone"></p>
</div>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular-route.min.js"></script>
<script>
'use strict';
var geo = angular.module('geo', [])
.controller('geoCtrl', ['$scope', '$http', function($scope, $http) {
  $http.jsonp('http://ipinfo.io/?callback=JSON_CALLBACK')
    .success(function(data) {
    $scope.ip = data.ip;
    $scope.hostname = data.hostname;
    $scope.loc = data.loc; //Latitude and Longitude
    $scope.org = data.org; //organization
    $scope.city = data.city;
    $scope.region = data.region; //state
    $scope.country = data.country;
    $scope.phone = data.phone; //city area code
  });
}]);
</script>

此处的工作页面:http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html

答案 16 :(得分:8)

Javascript / jQuery get Client's IP Address & Location(国家,城市)

您只需要将带有“src”链接的标记嵌入到服务器中。服务器将返回“codehelper_ip”作为Object / 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>

答案 17 :(得分:8)

您可以使用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数据库。

免责声明:我写了这个库

答案 18 :(得分:8)

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

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

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

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

答案 19 :(得分:7)

如果你还是要包含一个文件,你可以做一个简单的ajax get:

function ip_callback() {
    $.get("ajax.getIp.php",function(data){ return data; }
}

ajax.getIp.php就是这样:

<?=$_SERVER['REMOTE_ADDR']?>

答案 20 :(得分:7)

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

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

通过HTTPS的JSON格式

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

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

HTTP上的JSON格式

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

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

HTTPS上的文本格式

如果您不想在JSON中使用它,则还会通过HTTPS进行明文响应

https://api.ipify.org

HTTP上的文本格式

还有一个基于HTTP的明文响应

http://api.ipify.org

答案 21 :(得分:6)

使用ipdata.co

API还提供地理位置数据,每个终端有10个终端,每天能够处理> 800M的请求!

  

这个答案使用的“测试”API密钥非常有限,仅用于测试几个调用。 Signup用于您自己的免费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>

答案 22 :(得分:6)

我想提供一种方法,当我想在html页面中存储信息时,我会使用很多方法,并希望我的javascript读取信息而不必将参数传递给javascript。当您的脚本在外部引用而不是内联时,这尤其有用。

然而,它不符合“无服务器端脚本”的标准。但是,如果您可以在html中包含服务器端脚本,请执行以下操作:

在html页面的底部,在最终正文标记的上方创建隐藏的标签元素。

您的标签将如下所示:

<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>

请务必创建一个名为hiddenlabel的类并设置visibility:hidden,以便没有人真正看到标签。您可以通过隐藏标签以这种方式存储大量内容。

现在,在你的javascript中,要检索存储在标签中的信息(在这种情况下是客户端的ip地址),你可以这样做:

var ip = document.getElementById("ip").innerHTML;

现在你的变量“ip”等于ip地址。现在您可以将ip传递给您的API请求。

*编辑2年后* 两个小改进:

我经常使用此方法,但调用标签class="data",因为事实上,它是一种存储数据的方法。类名“hiddenlabel”是一种愚蠢的名字。

第二个修改是在样式表中,而不是visibility:hidden

.data{
    display:none;
}

...是更好的方式。

答案 23 :(得分:5)

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

答案 24 :(得分:4)

<!DOCTYPE html>
<html ng-app="getIp">
<body>
    <div ng-controller="getIpCtrl">
        <div ng-bind="ip"></div>
    </div>

    <!-- Javascript for load faster
    ================================================== -->
    <script src="lib/jquery/jquery.js"></script>
    <script src="lib/angular/angular.min.js"></script>
    <script>
    /// Scripts app

    'use strict';

    /* App Module */
    var getIp = angular.module('getIp', [ ]);

    getIp.controller('getIpCtrl', ['$scope', '$http',
      function($scope, $http) {
        $http.jsonp('http://jsonip.appspot.com/?callback=JSON_CALLBACK')
            .success(function(data) {
            $scope.ip = data.ip;
        });
      }]);

    </script>
</body>
</html>

答案 25 :(得分:4)

var call_to = "http://smart-ip.net/geoip-json?callback=?";

$.getJSON(call_to, function(data){
   alert(data.host);
});

data.host是IP地址。只需从浏览器中调用即可。

http://smart-ip.net/geoip-json?callback=? [没有引号]并获取IP。

答案 26 :(得分:4)

您可以使用以下网络服务:http://ip-api.com/

示例:

<script type="text/javascript" src="http://ip-api.com/json/?callback=foo">
<script>
    function foo(json) {
        alert(json.query)
    }
</script>

additional example: http://whatmyip.info    

答案 27 :(得分:4)

    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });

答案 28 :(得分:3)

尝试JAvascript

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.host);
});

http://jsfiddle.net/ourcodeworld/cks0v68q/?utm_source=website&utm_medium=embed&utm_campaign=cks0v68q

答案 29 :(得分:3)

获取系统本地IP:

  try {
var RTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
if (RTCPeerConnection) (function () {
    var rtc = new RTCPeerConnection({ iceServers: [] });
    if (1 || window.mozRTCPeerConnection) {
        rtc.createDataChannel('', { reliable: false });
    };

    rtc.onicecandidate = function (evt) {
        if (evt.candidate) grepSDP("a=" + 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]; });
        LgIpDynAdd = displayAddrs.join(" or perhaps ") || "n/a";
        alert(LgIpDynAdd)
    }

    function grepSDP(sdp) {
        var hosts = [];
        sdp.split('\r\n').forEach(function (line) {
            if (~line.indexOf("a=candidate")) {
                var parts = line.split(' '),
                    addr = parts[4],
                    type = parts[7];
                if (type === 'host') updateDisplay(addr);
            } else if (~line.indexOf("c=")) {
                var parts = line.split(' '),
                    addr = parts[2];
                alert(addr);
            }
        });
    }
})();} catch (ex) { }

答案 30 :(得分:3)

试试这个:http://httpbin.org/ip(或https://httpbin.org/ip

https:

示例
$.getJSON('https://httpbin.org/ip', function(data) {
                console.log(data['origin']);
});

来源:http://httpbin.org/

答案 31 :(得分:3)

你走了:

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.host);
});

答案 32 :(得分:2)

如果您在某处使用NGINX,您可以添加此代码段并通过任何AJAX工具询问您自己的服务器。

location /get_ip {
    default_type text/plain;
    return 200 $remote_addr;
}

答案 33 :(得分:2)

您可以尝试使用我们的https://ip-api.io geo ip API。例如,使用jQuery:

$(document).ready( function() {
    $.getJSON("http://ip-api.io/api/json",
        function(data){
            console.log(data);
        }
    );
});

同样https://ip-api.io检查TOR,公共代理和垃圾邮件发送者数据库,并提供此信息。

回复示例:

{
  "ip": "182.35.213.213",
  "country_code": "US",
  "country_name": "United States",
  "region_code": "CA",
  "region_name": "California",
  "city": "San Francisco",
  "zip_code": "94107",
  "time_zone": "America/Los_Angeles",
  "latitude": 32.7697,
  "longitude": -102.3933,
  "suspicious_factors": {
    "is_proxy": true,
    "is_tor_node": true,
    "is_spam": true,
    "is_suspicious": true // true if any of other fields (is_proxy, is_tor_node, is_spam) is true
  }
}

答案 34 :(得分:2)

首先 实际答案 无法使用纯客户端执行的代码来查找自己的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
}

答案 35 :(得分:2)

<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
    <script>
        function systemip(){
        document.getElementById("ip").value = myip
        console.log(document.getElementById("ip").value)
        }
    </script>

答案 36 :(得分:2)

以上所有答案都有服务器部分,而不是纯客户端部分。这应该由Web浏览器提供。目前,没有网络浏览器支持此功能。

然而,有了这个firefox的插件: https://addons.mozilla.org/en-US/firefox/addon/ip-address/ 您必须要求您的用户安装此插件。 (这对我来说很好,第三方)。

您可以测试用户是否已安装它。

var installed=window.IP!==undefined;

你可以使用javascript获取它,如果它已安装,那么     var ip = IP.getClient();     var IPclient = ip.IP;     //而ip.url是网址

ip=IP.getServer();
var IPserver=ip.IP;
var portServer=ip.port;
//while ip.url is the url

//or you can use IP.getBoth();

此处提供更多信息:http://www.jackiszhp.info/tech/addon.IP.html

答案 37 :(得分:2)

我不是javascript专家,但是如果可能的话,你可以用http://www.whatismyip.com/automation/n09230945.asp作为源打开一个iframe,并阅读框架的内容。

编辑:由于跨域安全性,这不会起作用。

答案 38 :(得分:1)

我在这里看到的其他一些服务的一个问题是,它们要么不支持IPv6,要么在IPv6存在的情况下无法预测。

因为我在双栈环境中自己需要这个功能,所以我将自己的IP地址服务放在一起,你可以在http://myip.addr.space/找到它。还有/help的快速参考。

要将其与jQuery一起使用,请使用/ip端点。您将获得包含IP地址的纯文本,具体取决于您使用的子域:

$.get("http://myip.addr.space/ip")返回IPv6或IPv4,具体取决于系统可用的内容。 (JSFiddle

$.get("http://ipv4.myip.addr.space/ip")始终返回IPv4(如果没有IPv4,则会失败)。

$.get("http://ipv6.myip.addr.space/ip")始终返回IPv6(如果没有IPv6则会失败)。

答案 39 :(得分:1)

获取IP地址的简单解决方案是在您的文件中添加以下代码。

  $.getJSON('https://api.ipify.org?format=json', function(data){

   // Your callback functions like   

    console.log(data.ip);
    localStorage.setItem('ip',data.ip);
    alert(data.ip);

  });

页面加载时会获取IP地址。

答案 40 :(得分:1)

我有自己的api后端与laravel,所以我通常只是以下:

$(document).ready( function() {

    $.getJSON( "http://api.whoisdoma.com/v1/ip/visitor?api_key=key",
        function(data){
          alert( data.ip);
        }
    );

});

为了提高安全性,我提供了获取结果所需的api密钥。

答案 41 :(得分:1)

$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});

答案 42 :(得分:1)

试试这个

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

答案 43 :(得分:1)

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

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

运行以上脚本Clik here

答案 44 :(得分:0)

查找IP的Java脚本

要获取IP地址,我正在对Free Web Service进行JSON调用。喜欢

[jsonip.com/json,ipifo.io/json,www.telize.com/geoip,ip-api.com/json,api.hostip.info/get_json.php]

我正在传递回调函数的名称,该函数将在完成请求时被调用。

<script type="text/javascript">
    window.onload = function () {
    var webService = "http://www.telize.com/geoip";
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = webService+"?callback=MyIP";
        document.getElementsByTagName("head")[0].appendChild(script);
    };
    function MyIP(response) {
        document.getElementById("ipaddress").innerHTML = "Your IP Address is " + response.ip;
    }
</script>
<body>
    <form>
        <span id = "ipaddress"></span>
    </form>
</body>

for xml response code

WebRTC并不需要服务器支持。

答案 45 :(得分:0)

不能单独使用Javascript(除非客户端有如上所述的浏览器插件)。它也不能在客户端上使用Flash完成。但它可以在客户端上使用Java applet完成(并且javascript可以与之交谈),尽管它会提示完全权限。例如见http://www.findmyrouter.net

答案 46 :(得分:-1)

好吧,如果在HTML中导入脚本......

<script type="text/javascript" src="//stier.linuxfaq.org/ip.php"></script>

然后,您可以在页面的任何位置使用变量userIP(可能是访问者的IP地址)。

重定向:

<script>
if (userIP == "555.555.555.55") {window.location.replace("http://192.168.1.3/flex-start/examples/navbar-fixed-top/");}
</script>

或者在页面上显示:document.write (userIP);

免责声明:我是我要导入的脚本的作者。该脚本使用PHP提供IP。脚本的源代码如下。

<?php 
//Gets the IP address
$ip = getenv("REMOTE_ADDR") ; 
Echo "var userIP = '" . $ip . "';"; 
?>

答案 47 :(得分:-3)

您可以使用telize

中的api服务

如果您只需要客户端的公共IP,请执行以下操作:

var ip = "http://www.telize.com/ip";
var response = http.request({url: ip});

如果你想要更多细节,比如位置和东西,你可以这样做:

var ipAndGeoDetails = "http://www.telize.com/geoip/"
var response = http.request({url: ipAndGeoDetails});
  

注意:telize的公共API将于2015年11月15日永久关闭。