Получить IP-адрес клиента через сторонний веб-сервис - программирование
Подтвердить что ты не робот

Получить IP-адрес клиента через сторонний веб-сервис

Я хотел бы прочитать свой ip-адрес со следующей страницы (http://l2.io/ip или другой) с помощью javascript, чтобы сохранить его в моей переменной "MyIP".

function getMyIP() {
  var myIp;
  ...
  return myIp;
}

Как вы можете сделать?

4b9b3361

Ответ 1

Проверяя связанный сайт , вы можете включить тег script, передающий параметр ?var=desiredVarName, который будет установлен как глобальная переменная содержащий IP-адрес:

<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
                                                      <!-- ^^^^ -->
<script>alert(myip);</script>

Демо

Я считаю, что мне не нужно говорить, что это может быть легко подделано (через использование прокси или поддельных заголовков запросов), но это стоит отметить в любом случае.


Поддержка HTTPS

В случае, если ваша страница обслуживается с использованием протокола https, большинство браузеров будут блокировать контент на той же странице, который будет обслуживаться с использованием протокола http (включая скрипты и изображения), поэтому параметры довольно ограничены. Если у вас есть < 5k hits/day, можно использовать Smart IP API. Например:

<script>
var myip;
function ip_callback(o) {
    myip = o.host;
}
</script>
<script src="https://smart-ip.net/geoip-json?callback=ip_callback"></script>
<script>alert(myip);</script>

Демо

Изменить: По-видимому, этот сертификат службы https истек, поэтому пользователю нужно будет добавить исключение вручную. Откройте API напрямую, чтобы проверить состояние сертификата: https://smart-ip.net/geoip-json


С внутренней логикой

Самый устойчивый и простой способ, если у вас есть логика серверного сервера, - просто вывести IP-адрес реквестера внутри тега <script>, так что вам не нужно полагаться на внешние ресурсы. Например:

PHP:

<script>var myip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>

В этом ответном ответе есть более прочное решение PHP (учитывающее заголовки, которые иногда задаются прокси).

С#:

<script>var myip = '<%= Request.UserHostAddress %>';</script>

Ответ 2

    $.ajax({
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) {
            alert(location.ip);
        }
    });

Это тоже будет работать https

Ответ 3

Более надежная конечная точка REST будет http://freegeoip.net/json/

Возвращает IP-адрес вместе с геопозицией. Также разрешены междоменные запросы (Access-Control-Allow-Origin: *), поэтому вам не нужно кодировать JSONP.

Ответ 4

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

Ответ 5

Если вы столкнулись с проблемой CORS, вы можете использовать https://api.ipify.org/.

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
}


publicIp = httpGet("https://api.ipify.org/");
alert("Public IP: " + publicIp);

Я согласен, что использование синхронного HTTP-вызова не является хорошей идеей. Вы можете использовать асинхронный вызов async then.

Ответ 6

Это также отбрасывает информацию о клиенте.

var get = function(u){
    var x = new XMLHttpRequest;
    x.open('GET', u, false);
    x.send();
    return x.responseText;
}

JSON.parse(get('http://ifconfig.me/all.json'))

Ответ 7

Хорошо, если в HTML вы импортируете script...

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

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь автором script, который я сказал для импорта. script использует IP-адрес с помощью PHP. Исходный код script ниже.

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