Как получить IP-адрес клиента с помощью JavaScript?

Мне нужно каким-то образом получить IP-адрес клиента с помощью JavaScript; никакого кода на стороне сервера, даже SSI.

Однако я не против использования бесплатного стороннего скрипта / сервиса.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
560
0
1 304 523
47

Ответы 47

Большинство ответов здесь «обходят» необходимость в коде на стороне сервера… Ударяя по чужому серверу. Это полностью допустимый метод, если только вы не на самом деле нужно, чтобы получить IP-адрес, не обращаясь к серверу.

Традиционно это было невозможно без какого-либо плагина (и даже тогда вы, вероятно, получили бы IP-адрес неправильный, если бы находились за NAT-маршрутизатором), но с появлением WebRTC это действительно возможно. . Если вы нацеливаетесь на браузеры, поддерживающие WebRTC (в настоящее время: Firefox, Chrome и Opera).

Пожалуйста, прочтите ответ Мидо для получения подробной информации о том, как можно получить полезные IP-адреса клиентов с помощью WebRTC.

@oscar: похоже, это тот же метод (IP-адрес, видимый сервером, возвращенный JSONP), который Чад упомянул в своем ответе. Что не соответствует требованию OP «без кода на стороне сервера». Но да, это один из способов добиться этого, если вы проигнорируете это требование.

Shog9 24.03.2011 07:40

Этот ответ устарел из-за WebRTC: stackoverflow.com/questions/20194722/…

Akam 11.02.2016 13:32

Обновлено, @Akam. Вам следует дать мидо некоторый реквизит за указание на это несколько месяцев назад (после ГОДА людей, отправляющих досадно неправильные ответы, которые по-прежнему требовали поддержки сервера).

Shog9 11.02.2016 22:24

стал ли WebRTC более широко поддерживаться ?!

oldboy 25.07.2019 23:22

Согласно этой ссылке "CanIUse" это @BugWhisperer. Если вам не нужен IE.

Shog9 25.07.2019 23:25

В общем случае это невозможно, если вы не используете какую-либо внешнюю службу.

Действительно, это возможно с помощью Javascript, полагаясь на стороннюю службу, такую ​​как Ipregistry (отказ от ответственности: я запускаю службу): ipregistry.co/docs/getting-location-from-ip-address#javascri‌ pt Вы можете получить IP-адрес и много связанной информации, включая данные об угрозах, за один вызов.

Laurent 29.09.2019 18:06

На самом деле нет надежного способа получить IP-адрес клиентского компьютера.

Это проходит через некоторые из возможностей. Код, использующий Java, сломается, если у пользователя несколько интерфейсов.

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

Глядя на другие ответы здесь, похоже, что вы можете получить общедоступный IP-адрес клиента, который, вероятно, является адресом маршрутизатора, который они используют для подключения к Интернету. Об этом говорят многие другие ответы здесь. Я бы рекомендовал создать и разместить свою собственную страницу на стороне сервера для получения запроса и ответа с IP-адресом вместо того, чтобы зависеть от чьей-либо услуги, которая может продолжать работать или не работать.

Я не гуру javascript, но, если это возможно, вы можете открыть iframe с http://www.whatismyip.com/automation/n09230945.asp в качестве источника и прочитать содержимое кадра.

Обновлено: это не сработает из-за междоменной безопасности.

Возможно, вы захотите попробовать это перед тем, как принять. Я думал, что это приведет к ошибке «Доступ запрещен» из-за нарушения правил междоменного сценария.

Triptych 24.12.2008 21:42

Не в iframe. Проблема в том, что вам придется передавать переменные туда и обратно между iframe и вашим основным документом. IFrame не сможет получить информацию из родительского документа, поэтому убедитесь, что вы используете его наоборот.

Jason Jackson 24.12.2008 22:10

Почему этого не голосуют? + !. Отличная идея. Где-то внизу есть лучший ответ, но этот хороший.

user4951 07.09.2012 12:31

@JimThio, потому что, как указано в ответе, он не будет работать из-за ограничений междоменной безопасности.

UnkwnTech 08.09.2012 05:01

о, тогда не используйте iframe. Воспользуйтесь моим решением ниже.

user4951 09.09.2012 12:43

Что ж, я отвлекся от вопроса, но сегодня у меня была аналогичная потребность, и хотя я не смог найти идентификатор от клиента с помощью Javascript, я сделал следующее.

На стороне сервера: -

<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 я просто загружаю это значение.

Это может быть полезно для некоторых людей с похожими требованиями, такими как ваше (например, я, пока я этого не понял).

Ваше здоровье!

-1: OP специально упоминает «без кода на стороне сервера», но вы используете некоторый C#.

Bruno Reis 07.05.2011 12:36

Не лучше ли просто выводить <script>var uip='<%= Request.UserHostAddress %>';</script>?

Chris Haines 17.03.2014 13:54

Помимо использования кода на стороне сервера, никогда не следует использовать DOM для хранения данных. Это просто плохо во всем. У Хейнси есть лучшая идея просто назначить JS var.

coblr 19.02.2015 03:37

Вы можете, ретранслируя его через сервер с помощью JSONP

И пока искал в Google, нашел его здесь, на SO Могу ли я выполнить поиск в DNS (от имени хоста до IP-адреса) с помощью клиентского 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>

Note : The telize.com API has permanently shut down as of November 15th, 2015.

Хотя я ценю этот фрагмент, я считаю, что загрузка текстового содержимого JavaScript и его оценка с помощью функции представляет собой серьезную угрозу безопасности. Что, если содержимое ответа изменится и все 100+ человек здесь, проголосовавших за этот ответ и, возможно, использовавших этот фрагмент, в конечном итоге вызовут функцию с возможным небезопасным содержимым. Я бы использовал это, только если бы это была строка JSON.

auco 25.11.2013 19:26
Error Over Quota This application is temporarily over its serving quota. Please try again later.
Brad M 18.12.2013 19:06

Это не лучший ответ, поскольку он связан с запросом на стороне сервера. В вопросе четко сказано "чистый javascript".

Micah 16.10.2014 01:56

Мика, невозможно получить IP-адрес с помощью чистого javascript. Я предлагаю вам почитать о NAT и о том, как это работает. Вам нужен сервер, чтобы передать вам ваш IP-адрес в Интернете.

Chad Grant 17.10.2014 04:54

Служба сейчас не работает.

Cyril N. 14.08.2015 13:00

@CyrilN. да, создатель службы отключил ее, потому что ею злоупотребляли спам / вредоносное ПО. см. его пост: cambus.net/adventures-in-running-a-free-public-api

nelsonic 03.12.2015 02:14

Этот интернет-скрипт сейчас постоянно нефункционален. Удаление мертвого кода превращает этот ответ в ответ «вы можете найти что-нибудь в Google». Так что это больше не ответ по определению Stack Overflow. Извините @ChadGrant, но я предлагаю вам удалить его, чтобы увидеть рабочие ответы.

Cœur 18.09.2017 15:52

Вы можете сделать ajax-вызов hostip.info или аналогичной службой ...

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

В качестве бонуса информация о геолокации возвращается в том же вызове.

Вы также можете получить представление JSON с помощью api.hostip.info/get_json.php, а затем проанализировать JSON с помощью функции браузера, jQuery или Prototype.

Brad Folkens 26.04.2012 21:44

есть ли ограничение на количество запросов на "api.hostip.info/get_html.php"? где я могу увидеть детали этого API

Navin Leon 20.06.2012 11:29

Он возвращает IP-адрес сетевого брандмауэра. не фактический IP-адрес клиента. Есть ли способ получить реальный IP-адрес клиента?

Leela Addagulla 30.04.2015 22:39

С использованием Smart-IP.net Geo-IP API. Например, используя jQuery:

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

«Служба временно недоступна».

Iago 19.11.2014 05:45

написал простой api [geoip.immanuel.co/myip], чтобы получить IP-адрес клиента, ssl включен и без ограничений

Immanuel 14.01.2018 09:45

Включите этот код на свою страницу: <script type = "text/javascript" src = "http://l2.io/ip.js"></script>

другой документ здесь

Хм. Смотрится интересно ... Есть ли у них ограничения?

indapublic 17.09.2014 10:34

библиотека офлайн

riccardo.tasso 23.08.2018 10:29

Существует некоторая степень всплывающих окон спама, связанных с l2.io ref: hybrid-analysis.com/sample/… позволяет встраивать ссылки, как в примере 117.254.84.212:3000/getjs?nadipdata= "{" url ":" / ip.js? Var = myip‌ "," host ":" l2. io "," re‌ ferer ":" website.com/‌…} "& screenheight = 768‌ & screenwidth = 1366 & tm‌ = 1557565256073 & lib = t‌ rue & fingerprint = c2Vw‌ LW5vLXJlZGlyZWN0

Wayne DSouza 11.05.2019 13:15

Я собираюсь предложить метод, который я часто использую, когда хочу хранить информацию на странице 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;
}

... это лучший способ сделать это.

Не храните данные в DOM. Почему кто-то мог предположить это даже через 2 года? Если вы можете вставить что-либо в HTML-файл, просто вставьте это значение в переменную JS вот так. <script> var ip = <? php echo $ _SERVER ['REMOTE_ADDR']; ?> </script>. По крайней мере, тогда программы чтения с экрана его пропустят, а getElementById или $ ('# stupidname') не потребуется.

coblr 19.02.2015 03:42

@fractalspawn, по той причине, что нельзя вставить php код в .js файл. Не думал об ЭТОМ, да ты умные штаны! ;)

TARKUS 19.02.2015 04:21

Что ж, вы могли бы, если бы вы сделали <script type = "text / javascript" src = "path / to / fancy / javascript.php"> </script>, хотя я не уверен, зачем вам это делать. Я хочу сказать, что если PHP может вставлять что-либо в HTML, который он отображает, лучше всего было бы, чтобы он вставлял значение в переменную JS во встроенном теге скрипта, а не в элемент DOM, который вам затем пришлось бы анализировать. для использования и потенциально может быть прочитан программами чтения с экрана, если вы не примете дополнительных мер для предотвращения этого.

coblr 24.02.2015 02:07

Нет абсолютно никакой веской причины, по которой вы не можете или не должны добавлять элементы хранения данных в DOM, и есть много веских причин для этого. Фактически, эти причины есть в моем ответе, если вы захотите прочитать его еще раз. Он надежен, прост в управлении и особенно полезен, когда ваш файл javascript находится на удаленном сайте. Говоря об удаленном скрипте, ваш пример "javascript.php" - ужасная идея и, вероятно, все равно не сработает. Подумайте об удаленных сценариях, таких как DISQUS.

TARKUS 25.02.2015 00:57

Наткнулся на этот вопрос, и мне пришлось здесь поддержать @fractalspawn: вы не должны хранить данные в DOM. На самом деле его фрагмент <script>var ip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script> работает безупречно, и вы можете получить доступ к переменной ip в javascript, даже не проходя через dom с помощью вызова getElementByID. И, по его словам, это намного лучше для программ чтения с экрана (или даже для браузеров, отображающих текст).

Benjamin C. 25.05.2015 23:42

@ Benjamin C. - Еще один читатель полностью упускает из виду проблему, заключающуюся в том, что файл Javascript, особенно файл библиотеки Javascript, размещенный удаленно, НЕ ОБРАБАТЫВАЕТ КОД СТОРОНЫ СЕРВЕРА. Предложение использовать "javascript.php" - абсурдно грубая уловка. Некоторые люди говорят, что данные не должны храниться в модели DOM, но никто из них не объяснил почему. Фактически, элементы TABLE являются элементами хранения данных, а также элементами LABEL. Описанный мной метод особенно хорошо работает для удаленных скриптов и html-объектов. Постарайтесь обдумать свой ответ, прежде чем голосовать против лучшего ответа.

TARKUS 26.05.2015 01:29

@ Грегори Льюис: кажется, мы оба не понимаем друг друга. Я просто согласен не согласиться. Удачного кодирования! :)

coblr 26.05.2015 23:28

@fractalspawn - Если бы я писал скрипт .js, это мгновенно аннулировало бы ваше предложение. Никто здесь толком не объяснил, почему <label><?php echo $_SERVER['remote_addr']; ?></label> - плохая идея.

TARKUS 28.05.2015 01:16

Исходная проблема, на мой взгляд, заключается в том, что мы пытаемся получить IP-адрес с сервера. Предполагая, что разработчик хочет использовать эту информацию в коде JS; помещать его в DOM, а затем скрывать, является избыточным. Использование DOM для хранения произвольных данных с сервера для использования в коде JS - это то, что здесь не подходит. Если вы хотите только показать его пользователю, тогда ваш ответ в порядке (за исключением стилей скрытия). Вдобавок PHP не заботится о том, кому вы повторяете. Это могут быть данные .jpg, код .js или правила .css. IIRC, пока браузер получает то, что ожидает, источник и средства не имеют значения.

coblr 29.05.2015 02:05

К вашему другому комментарию о том, почему хранилище данных DOM плохо ... ну, вы все еще можете остановить машину, осторожно ударившись о стену в пункте назначения, но сейчас есть более эффективные инструменты для этой работы. Теперь мы знаем лучше, и у нас есть отличные инструменты для решения этой проблемы. Я работал в месте, где DOM был просто огромным файлом конфигурации для JS, и после рестайлинга это был кошмар. Если вы чувствуете, что использование <script src = "something.php"> - это "грубый взлом", а хранение данных в DOM, которые имеют значение только внутри Javascript, - нет, тогда я действительно рад, что мы не работаем вместе и снова с радостью соглашаемся не соглашаться. :)

coblr 29.05.2015 02:20

Да я согласен. Я действительно рад, что не работаю с кем-то, кто мог бы рассматривать сценарий на стороне сервера, такой как "javascript.php", как разумное решение для языка сценариев на стороне клиента, особенно когда мы создаем библиотеки сценариев, которые могут находиться на совершенно другом domain: / И мне кажется, я все еще не вижу недостатков использования элементов DOM для хранения данных, особенно в свете того факта, что у вас не всегда есть возможность написать библиотеку javascript типа «javascript.php».

TARKUS 29.05.2015 05:07

@TARKUS Он помещает этот сценарий в html файл ... так же, как вы делаете свой лейбл. Конечно, нет веских причин помещать данные в HTML. Сделайте это просто в переменной js.

Totty.js 15.12.2017 03:01

@ Totty.js он связывает файл php, а не файл javascript. Что, если это был кросс-домен? Должен быть файл .js.

TARKUS 16.12.2017 05:21

В смысле это лучше: <script>var ip = <?php echo $_SERVER['REMOTE_ADDR']; ?></script>, чем ставить <label><?php echo $_SERVER['remote_addr']; ?></label>. Не нужно разбирать html в первом, это простой js.

Totty.js 17.12.2017 19:27

@ Totty.js прочтите вопрос еще раз. Вы делаете предположение, что это ссылка на удаленный скрипт. Это вообще не вопрос. OP хочет получить доступ к удаленному IP. Это все.

TARKUS 18.12.2017 20:23

Я бы сказал, что у Чада и Мальты есть отличный ответ. Однако они сложны. Поэтому я предлагаю этот код, который я нашел в рекламе плагинов по странам.

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

Нет аякса. Просто простые 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, могут работать так же без проблем.

загрузка JavaScript с удаленного сервера и вызов функций с неизвестным содержимым кажутся мне огромной угрозой безопасности (что, если содержимое функции изменится?). Я бы предпочел разобрать ответ JSON.

auco 25.11.2013 19:35

Ошибка 404: объект не найден

trejder 17.06.2015 09:58

Это было очень давно. Ответ на самом деле совершенно ложный. Я не знал, что javascript не может знать IP.

user4951 19.01.2017 13:02

о, это правильно, функция Посетители IP не предназначена для кода PHP. Это код javacript, созданный кодом php

user4951 19.01.2017 13:03

вы можете просто использовать свой собственный сервер, чтобы распечатать код javascript, который назначает IP посетителей.

user4951 19.01.2017 13:04

Во всех приведенных выше ответах есть серверная часть, а не чисто клиентская часть. Это должно быть предоставлено веб-браузером. В настоящее время ни один веб-браузер не поддерживает это.

Однако с этим дополнением для 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 - это 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

Ужасный совет. Итак, вы просите пользователей загрузить расширение (которое, кстати, давно было удалено), которое может работать только в определенном браузере и может быть отключено в любое время, просто чтобы получить их IP-адрес? Это неэффективно, потому что есть те, кто не выдержит всего этого и просто уйдет. Лучшим способом по-прежнему остается серверный способ.

Boy pro 17.11.2018 11:01

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 определяет реальный IP-адрес плюс страну

Если вы используете jQUery, вы можете попробовать:

console.info(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>

не используйте атрибут language, используйте вместо него type = "text/javascript", подробнее о MDN

Alex K 31.10.2013 19:29

как уже упоминалось в @Alex, язык устарел и используется только в устаревшем коде. Вместо этого используйте 'type = "text / javascript"' для максимальной совместимости.

Gautham C. 09.05.2014 21:28

просто FYI - поле типа не требуется для HTML5 (по умолчанию JS). w3schools.com/tags/att_script_type.asp

pmont 05.09.2014 04:22

На всякий случай, если вы пропустили эти другие комментарии, вы должны использовать тип вместо языка

Mike 07.07.2015 04:49

Для этого вы можете использовать мою службу http://ipinfo.io, которая предоставит вам IP-адрес клиента, имя хоста, информацию о геолокации и владельца сети. Вот простой пример, который регистрирует IP:

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

Вот более подробный пример JSFiddle, который также распечатывает полную информацию об ответе, чтобы вы могли видеть все доступные сведения: http://jsfiddle.net/zK5FN/2/

Чтобы избежать проблем с политикой смешанного содержимого, измените http://ipinfo.io на //ipinfo.io или https

Ismail 29.04.2018 19:53

Мы хотим воспользоваться вашим сервисом, есть ли у вас какие-либо скидки для пользователей Stackoverflow?

Mehdi Dehghani 23.12.2019 10:40

@MehdiDehghani мы бесплатны до 50 тысяч запросов в месяц, за 100 тысяч с обратной ссылкой - см. ipinfo.io/contact/creditlink

Ben Dowling 23.12.2019 18:06
Try this
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

ИЛИ ЖЕ

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

Скрипка

это работает $ .get ("ipinfo.io", function (response) {alert (response.ip);}, "jsonp"); но как мне сохранить значение в переменной? кажется, что он исчезает за пределами этого цикла запроса на получение

user1920216 24.09.2014 21:31

Список всех бесплатных сервисов поиска IP-адресов можно найти в моем ответе на stackoverflow.com/questions/391979/….

thdoan 01.02.2016 07:55

Как отправить эту функцию, чтобы вернуть значение ip?

Neftali Acosta 21.01.2018 01:43

Если вы всегда включаете файл, вы можете сделать простой ajax get:

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

А ajax.getIp.php будет такой:

<?=$_SERVER['REMOTE_ADDR']?>
<script type = "application/javascript">
  function getip(json)
  {
     alert(json.ip); 
  }

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

Запускаем выше скрипт Нажмите здесь

«Эта корзина была создана анонимно, и время ее бесплатного просмотра истекло.». ИСПОЛЬЗУЙТЕ jsFiddle в следующий раз, чтобы ваши прекрасные примеры не ... истекли.

trejder 17.06.2015 09:44

Сторонняя служба, которую рекомендует этот ответ, больше не существует, что делает ее бесполезной.

Quentin 07.02.2020 16:10
<!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>

Услуга обратного вызова 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

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.

извините, что означает $ в javascript?

GHOST 15.04.2020 00:09

Получите свой IP с помощью jQuery

вы можете получить свой публичный IP-адрес с помощью одной строчки JS? Существует бесплатная услуга, которая предлагает это для вас, и все, что вам нужно сделать, - это запрос на получение:

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

Чтобы приведенный выше фрагмент работал, ваш браузер должен поддерживать CORS (совместное использование запросов из разных источников). Иначе будет выброшено исключение безопасности. В старых браузерах вы можете использовать эту версию, которая использует запрос JSON-P:

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

Вы можете использовать такие веб-службы, как: 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    
$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});

Вы можете сделать это полностью на стороне клиента и в основном на JavaScript, используя объект Flash, который может вызывать js. Flash может обращается к IP-адресу локального компьютера, что может быть не очень полезно.

У меня есть собственный API-интерфейс с laravel, поэтому я обычно делаю следующее:

$(document).ready( function() {

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

});

Для дополнительной безопасности я предоставляю ключ api, который необходим для получения результатов.

Вы можете использовать библиотеку javascript userinfo.io.

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

Отказ от ответственности: я написал эту библиотеку

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

Не смотри дальше

Проверить http://www.ipify.org/

Согласно им:

  • You can use it without limit (even if you're doing millions of requests per minute).
  • ipify is completely open source (check out the 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>

Лень копировать / вставлять? Мне это нравится. Вот демонстрация ?

Лень нажимать? :O

Note: Turn off Adblock Plus / uBlock & co before running the demo .. otherwise, it just won't work.

У меня ничего такого связан с командой IPify. Я просто думаю, что это до смешного круто, что кто-то предоставляет такую ​​услугу для всеобщего блага.

Самое приятное то, что это исходит от «https», тогда как мои вызовы к помощникам по http IP блокировались, потому что они «небезопасны».

Tessa 13.03.2017 16:41

эй, он показывает мне ошибку CORS, что мне делать?

saberprashant 01.11.2019 13:58

@saberprashant вы используете "HTTPS"?

FloatingRock 03.11.2019 19:26

@FloatingRock, нет, я использую HTTP

saberprashant 04.11.2019 12:19

Есть ли в этом подвох?

Peppa 22.09.2020 02:54

Ну, если в 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);

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

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

Вы не можете. Вам нужно будет спросить у сервера.

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.

Himanshu 09.04.2015 07:09

Но вроде как, правда? Я имею в виду, что если ответ просто «нет, ты не можешь», то я бы сказал, что это более правильный ответ, чем тот, за который в настоящее время проголосовали «здесь, используйте это случайное приложение appspot», что кажется опасным ответом для вверху списка.

SteveShaffer 13.04.2015 18:14

ИМО Это правильный ответ, и его следует принять. В вопросе конкретно говорится «нет кода на стороне сервера».

matthewwithanm 14.05.2015 18:28
stackoverflow.com/questions/20194722/…
Akam 11.02.2016 13:33

Не могли бы вы уточнить? Все ответы предполагают, что вы отправляете запрос на другой сервер, но как этот сервер получает IP-адрес из запроса, который вы делаете, и почему браузер не может этого сделать?

protasovams 05.07.2017 12:15

@matthewwithanm Я не могу с этим согласиться. Я просматривал все ответы, чтобы узнать, сказал ли кто-нибудь именно это, и сам был готов предложить это в качестве ответа. Все ответы, получившие большое количество голосов, хотя и информативны, но все же отвечают на разные вопросы. Цитата на вопрос: «Мне нужно каким-то образом получить IP-адрес клиента, используя чистый JavaScript; никакого кода на стороне сервера, даже SSI». Фактически, это правильный ответ. Javascript в песочнице браузера не может этого сделать (независимо от NAT или прокси). Если нужно принять один из других ответов, вопрос следует изменить.

wally 07.08.2017 14:01

Это невозможно сделать только с помощью Javascript (если у клиентов нет плагина для браузера, как описано выше). Это также невозможно сделать с помощью Flash на клиенте. Но это можно сделать на клиенте с помощью Java-апплета (и javascript может с ним разговаривать), хотя он запросит полные разрешения. например См. http://www.findmyrouter.net

Вы можете использовать службу 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});

NOTE : The public API of telize will permanently shut down on November 15th, 2015.

Java Script для поиска IP

Чтобы получить IP-адрес, я вызываю JSON в бесплатную веб-службу.. нравиться

[jsonip.com/json, ipinfo.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>

для xml-ответа код

WebRTC, который не требует поддержки сервера.

ОБНОВЛЕНИЕ 2021:

Как недавно показал новый репозиторий Github, webrtc-ip, теперь вы можете получить утечку IP-адреса пользователя общественный с помощью WebRTC. К сожалению, эта утечка не работает для частных IP-адресов из-за постепенного перехода на mDNS (по крайней мере, для WebRTC), полностью объяснил здесь. Однако вот рабочая демонстрация:

getIPs().then(res => document.write(res.join('\n')))
<script src = "https://cdn.jsdelivr.net/gh/joeymalvinni/webrtc-ip/dist/bundle.dev.js"></script>

Скомпилированный исходный код для этого репозитория можно найти здесь.




(Ранее) Окончательное обновление

Это решение больше не будет работать, потому что браузеры исправляют утечку webrtc: для получения дополнительной информации прочитайте другой вопрос: RTCIceCandidate больше не возвращает IP


Обновлять: Я всегда хотел сделать минимальную / неуплицированную версию кода, поэтому вот код 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 очень легко получить локальный IP-адрес в браузерах, поддерживающих WebRTC (по крайней мере, на данный момент). Я изменил исходный код, уменьшил строки, не делая никаких запросов на оглушение, так как вам нужен только локальный 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.info('got ip: ', ip);
  var li = document.createElement('li');
  li.textContent = ip;
  ul.appendChild(li);
}

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

Что здесь происходит, мы создаем фиктивное одноранговое соединение, и чтобы удаленный одноранговый узел мог связаться с нами, мы обычно обмениваемся ледяными кандидатами друг с другом. И читая ледяных кандидатов (из локального описания сеанса и onIceCandidateEvent), мы можем определить IP-адрес пользователя.

откуда я взял код -> Источник

Я получил сообщение «Ошибка: конструктор RTCPeerConnection передал недопустимый RTCConfiguration - неверный URI: undefined» в Firefox 26

BeniBela 24.11.2015 16:37

@BeniBela обновил код для работы с firefox 26, проверил на машине с Windows, вы можете проверить и подтвердить?

mido 25.11.2015 04:11

Голосуйте за, потому что здесь лучший ответ, а также спасибо за отличное репо на GitHub!

kano 16.05.2016 13:49

С его помощью я могу получить свой IP-адрес во внутренней сети, это здорово!

rocky qi 13.09.2016 10:25

Не работает с com.android.chrome на мобильных устройствах Samsung - возвращается mac-адрес.

Dominic Cerisano 24.09.2016 03:28

Предупреждение: здесь отображается не ваш общедоступный IP-адрес, а только локальный сетевой. Вы не можете использовать его для определения страны пользователей, например, если они находятся в локальной сети.

FloatingRock 23.11.2016 11:20

@FloatingRock, вы также можете получить общедоступный IP-адрес, используя сервер STUN (и настроить его при создании однорангового узла), и опять же, это потребует от вас обслуживания / использования сервера STUN, отображения кода сервера.

mido 23.11.2016 14:00

Это известно как утечка WebRTC. Должно быть исправлено всеми браузерами мэра, но это не так. Дополнительная информация здесь: privacytools.io/webrtc.html Возможно, это связано с утечкой вашего реального IP-адреса браузером Tor.

Kapitein Witbaard 30.11.2016 13:25

Это точно ответ 2017 года! Спасибо.

felipekm 24.01.2017 17:05

Это показывает мой личный адрес, а не мой публичный адрес.

Rob Welan 03.08.2017 07:17

Я думаю, что это решение больше не работает с Firefox. (Проверено с v56.0.2 (64-бит))

Below the Radar 30.10.2017 20:27

@mido, не могли бы вы указать на рабочий пример сервера STUN, который вы упомянули в своем ответе на @FloatingRock?

Highdown 03.01.2018 00:32

@mido Отличный лидер, однако этот код не работает в Safari ... есть предложения?

Shlomi Schwartz 23.12.2018 17:43

какова цель отслеживания локальных IP-адресов по сравнению с общедоступными IP-адресами?

oldboy 26.07.2019 00:01

Это можно легко обойти, включив экспериментальный флаг Chrome: Anonymize local IPs exposed by WebRTC..

Steven Stark 17.08.2019 00:35

Хотя ответ мне понравился, клиент может пропустить этот процесс, отключив WebRTC -restoreprivacy.com/webrtc-leaks

ni8mr 28.10.2019 13:55

Можно ли получить имя пользователя, используя этот IP-адрес?

ArrchanaMohan 28.01.2020 21:26

@FloatingRock Я только что отредактировал пост. Теперь, как показывает связанный репозиторий github, общедоступный IP-адрес - это единственный IP-адрес, который вы можете получить.

divinelemon 10.02.2021 23:16

Одна проблема с некоторыми другими службами, которые я видел здесь, заключается в том, что они либо не поддерживают IPv6, либо действуют непредсказуемо при наличии IPv6.

Поскольку мне самому нужна была эта возможность в среде с двойным стеком, я собрал свою собственную службу IP-адресов, которую вы можете найти на http://myip.addr.space/. Также есть краткая справка на /помощь.

Чтобы использовать его с 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).

Есть более простой и бесплатный подход, при котором у посетителя не будет спрашиваться разрешения.

Он заключается в отправке очень простого запроса Ajax POST в http://freegeoip.net/json. Получив информацию о своем местоположении в формате JSON, вы соответствующим образом отреагируете, обновив страницу или перенаправив на новую.

Вот как вы отправляете запрос на получение информации о местоположении:

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

Кажется, они закрылись 1 июля 2018 года.

Nithin P.H 28.09.2018 15:24

Мне очень нравится api.ipify.org, потому что он поддерживает как HTTP, так и HTTPS.

Вот несколько примеров получения IP с помощью api.ipify.org с помощью jQuery.

Формат JSON через HTTPS

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>

Формат JSON через HTTP

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

Есть две интерпретации этого вопроса. Большинство людей интерпретировало «IP-адрес клиента» как общедоступный IP-адрес, который веб-сервер видит за пределами локальной сети и в Интернете. Однако в большинстве случаев это не IP-адрес клиентского компьютера.

Мне нужен был реальный IP-адрес компьютера, на котором запущен браузер, на котором размещено мое программное обеспечение JavaScript (который почти всегда является локальным IP-адресом в локальной сети, который находится за чем-то, что находится за уровнем NAT).

Mido опубликовал ФАНТАСТИЧЕСКИЙ ответ выше, который кажется единственным ответом, который действительно предоставил IP-адрес клиента.

Спасибо за это, Мидо!

Однако представленная функция работает асинхронно. Мне действительно нужно ИСПОЛЬЗОВАТЬ IP-адрес в моем коде, и с помощью асинхронного решения я мог бы попытаться использовать IP-адрес до того, как он будет получен / изучен / сохранен. Я должен был дождаться результатов, прежде чем использовать их.

Вот «ожидающая» версия функции Mido. Надеюсь, это поможет кому-то другому:

function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
    var promise = new Promise(function (resolve, reject) {
        try {
            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)) {
                    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
                }
                resolve("FindIPsDone");
                return;
            };
        }
        catch (ex) {
            reject(Error(ex));
        }
    });// New Promise(...{ ... });
    return promise;
};

//This is the callback that gets run for each IP address found
function foundNewIP(ip) {
    if (typeof window.ipAddress === 'undefined')
    {
        window.ipAddress = ip;
    }
    else
    {
        window.ipAddress += " - " + ip;
    }
}

//This is How to use the Waitable findIP function, and react to the
//results arriving
var ipWaitObject = findIP(foundNewIP);        // Puts found IP(s) in window.ipAddress
ipWaitObject.then(
    function (result) {
        alert ("IP(s) Found.  Result: '" + result + "'. You can use them now: " + window.ipAddress)
    },
    function (err) {
        alert ("IP(s) NOT Found.  FAILED!  " + err)
    }
);


 

   
<h1>Demo "Waitable" Client IP Retrieval using WebRTC </h1>

Получить локальный 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) { }

Если вы где-то используете NGINX, вы можете добавить этот фрагмент и запросить свой собственный сервер с помощью любого инструмента AJAX.

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

Простое решение для получения IP-адреса - добавить в файл следующий код.

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

   // Your callback functions like   

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

  });

Он получит IP-адрес при загрузке страницы.

Вы можете попробовать использовать наш https://ip-api.io geo ip API. Например, с jQuery:

$(document).ready( function() {
    $.getJSON("http://ip-api.io/api/json",
        function(data){
            console.info(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
  }
}
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });

Попробуй это

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

Используйте ipdata.co.

API также предоставляет данные о геолокации и имеет 10 глобальных конечных точек, каждая из которых может обрабатывать> 800 миллионов запросов в день!

This answer uses a 'test' API Key that is very limited and only meant for testing a few calls. Signup for your own Free API Key and get up to 1500 requests daily for development.

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

Попробуйте это: http://httpbin.org/ip (или https://httpbin.org/ip)

Пример с https:

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

Источник: http://httpbin.org/

Прежде всего фактический ответ: Невозможно использовать код, выполняемый исключительно на стороне клиента, для определения вашего собственного IP-адреса.

Однако вы можете просто выполнить GET в направлении https://api.muctool.de/whois и получить что-то вроде получения 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
}

Другие вопросы по теме