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

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


当前回答

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

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

ajax。getip。php是这样的

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

其他回答

我会说乍得和马耳他有很好的答案。然而,他们的想法很复杂。所以我建议这个代码,我发现从广告国家插件

<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。只是简单的javascript。: 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访问的服务器也可以毫无问题地工作。

好吧,我偏离了这个问题,但我今天有一个类似的需求,尽管我无法使用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中,我只是加载这个值。

这可能对像你这样有类似需求的人(比如我,但我还没有弄清楚)有帮助。

干杯!

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

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

下面是一些使用jQuery获取IP的例子。

基于HTTPS的JSON格式

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

$.getJSON(“https://api.ipify.org/?format=json”, function(e) { 警报(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) { 警报(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

获取系统本地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) { }