Как получить IP-адрес клиента с помощью JavaScript?
Мне нужно каким-то образом получить IP-адрес клиента с помощью JavaScript; никакого кода на стороне сервера, даже SSI. Однако я не против использования бесплатного стороннего скрипта / сервиса.
29 ответов
Последнее обновление
Это решение больше не будет работать, потому что браузеры исправляют утечку webrtc: для получения дополнительной информации об этом прочитайте этот другой вопрос: RTCIceCandidate больше не возвращает IP
Обновление : я всегда хотел создать минимальную / утерянную версию кода, поэтому вот код ES6 Promise:
Примечание. Этот новый минимизированный код будет возвращать только один IP-адрес, если вы хотите, чтобы все IP-адреса пользователя (которые могут быть больше в зависимости от его сети), используйте исходный код .
Благодаря WebRTC очень легко получить локальный IP-адрес в браузерах, поддерживающих WebRTC (по крайней мере, на данный момент). Я изменил исходный код, уменьшил количество строк, не делая никаких запросов на оглушение, поскольку вам нужен только локальный IP-адрес, а не общедоступный IP-адрес, приведенный ниже код работает в последних версиях Firefox и Chrome, просто запустите фрагмент и проверьте себя:
Что здесь происходит, мы создаем фиктивное одноранговое соединение, и чтобы удаленный одноранговый узел мог связаться с нами, мы обычно обмениваемся ледяными кандидатами друг с другом. И читая ледяных кандидатов (из локального описания сеанса и onIceCandidateEvent), мы можем определить IP-адрес пользователя.
Откуда я взял код -> Источник
Вы можете, ретранслируя его через серверную часть с помощью JSONP.
И в то время как поиск в Google, чтобы найти один, нашел его здесь на SO Могу ли я выполнить поиск DNS (имя хоста по IP-адресу) с помощью клиентского Javascript?
Примечание. API telize.com постоянно имеет закрыт 15 ноября 2015 г..
Большинство ответов здесь «обходят» необходимость в коде на стороне сервера… Ударяя по чужому серверу. Это вполне допустимый метод, если вам действительно не нужно получить IP-адрес, не обращаясь к серверу.
Традиционно это было невозможно без какого-либо плагина (и даже тогда вы могли бы получить неправильный IP-адрес, если бы находились за маршрутизатором NAT), но с появлением WebRTC это стало возможным. это реально возможно . Если вы нацеливаетесь на браузеры, поддерживающие WebRTC (в настоящее время: Firefox, Chrome и Opera).
Прочтите ответ mido для подробнее о том, как получить полезные IP-адреса клиентов с помощью WebRTC.
Вы можете сделать ajax вызов на hostip.info или аналогичный сервис .
В качестве бонуса информация о геолокации возвращается в том же вызове.
Вы не можете. Вам нужно будет спросить у сервера.
Не смотри дальше
- Вы можете использовать его без ограничений (даже если вы выполняете миллионы запросов в минуту).
- ipify — это полностью открытый исходный код (посетите репозиторий GitHub).
Вот рабочий пример JS (вместо того, чтобы задаваться вопросом, почему у этого ответа так мало голосов, попробуйте сами, чтобы увидеть его в действии):
Лень копировать / вставлять? Мне это нравится. Вот демонстрация
Лень нажимать? :O
Примечание . Отключите Adblock Plus / uBlock & co перед запуском демонстрации. В противном случае это просто не сработает.
Я не имею ничего общего с командой IPify. Я просто думаю, что это до смешного круто, что кто-то предоставляет такую услугу для всеобщего блага.
Для этого вы можете использовать мою службу http://ipinfo.io, которая предоставит вам IP-адрес клиента, имя хоста и информацию о геолокации. и владелец сети. Вот простой пример регистрации IP:
Вот более подробный пример JSFiddle, который также распечатывает полную информацию об ответе, чтобы вы могли видеть все доступные сведения: http : //jsfiddle.net/zK5FN/2/
Включите этот код на свою страницу: <script type=»text/javascript» src=»http://l2.io/ip.js»></script>
Я бы сказал, что у Чада и Мальты есть отличный ответ. Однако они сложны. Поэтому я предлагаю этот код, который я нашел в рекламе плагина по странам.
Нет ajax. Просто простые javascripts. : D
Если вы перейдете на http://j.maxmind.com/app/geoip.js вы увидите, что он содержит
На самом деле это еще не ответ на вопрос, потому что
http://j.maxmind.com/app/geoip.js не содержит IP (хотя я уверен, что он использует IP для получения страны).
Но так легко сделать скрипт PhP, который выдавал бы что-то вроде
В вопросе конкретно упоминается НЕ использовать сторонний скрипт. Другого пути нет. Javascript не может узнать ваш IP. Но другие серверы, к которым можно получить доступ через javascript, могут работать так же без проблем.
Есть две интерпретации этого вопроса. Большинство людей интерпретировало «IP-адрес клиента» как общедоступный IP-адрес, который веб-сервер видит за пределами локальной сети и в Интернете. Однако в большинстве случаев это не IP-адрес клиентского компьютера.
Мне нужен был реальный IP-адрес компьютера, на котором запущен браузер, на котором размещено мое программное обеспечение JavaScript (который почти всегда является локальным IP-адресом в локальной сети, который находится за чем-то, что находится за слоем NAT).
Mido опубликовал ФАНТАСТИЧЕСКИЙ ответ выше, который кажется единственным ответом, который действительно предоставил IP-адрес клиента.
Спасибо за это, Мидо!
Однако представленная функция работает асинхронно. Мне действительно нужно ИСПОЛЬЗОВАТЬ IP-адрес в моем коде, и с помощью асинхронного решения я мог бы попытаться использовать IP-адрес до того, как он будет извлечен / изучен / сохранен. Я должен был дождаться результатов, прежде чем использовать их.
Вот «ожидающая» версия функции Mido. Надеюсь, это поможет кому-то другому:
Есть более простой и бесплатный подход, при котором у посетителя не будет спрашиваться разрешения.
Он заключается в отправке очень простого запроса Ajax POST на http://freegeoip.net/json. Получив информацию о своем местоположении в формате JSON, вы соответствующим образом отреагируете, обновив страницу или перенаправив на новую.
Вот как вы отправляете запрос на получение информации о местоположении:
Что ж, я отвлекся от вопроса, но сегодня у меня была аналогичная потребность, и хотя я не смог найти идентификатор от клиента с помощью Javascript, я сделал следующее.
На стороне сервера: —
Я использую ASP.Net Ajax, но вы можете использовать getElementById вместо $ get ().
Что происходит, у меня есть скрытый элемент div на странице с IP-адресом пользователя, отображаемым с сервера. Затем в Javascript я просто загружаю это значение.
Это может быть полезно для некоторых людей с похожими требованиями, такими как ваше (например, я, пока я этого не понял).
С использованием Smart-IP.net Geo-IP API. Например, используя jQuery:
В общем случае это невозможно, если вы не используете какую-либо внешнюю службу.
Получите свой IP-адрес с помощью jQuery
Вы можете получить свой публичный IP-адрес с одной линией JS? Существует бесплатный сервис, который предлагает это для вас, и запрос на получение — это все, что вам нужно сделать:
Для работы приведенного выше фрагмента ваш браузер должен поддерживать CORS (обмен запросами между источниками). В противном случае возникнет исключение безопасности. В старых браузерах вы можете использовать эту версию, которая использует запрос JSON-P:
Вы можете использовать библиотеку javascript userinfo.io.
Вы также можете использовать requirejs для загрузки скрипта.
Он предоставит вам IP-адрес вашего посетителя, а также некоторые данные о его местонахождении (страна, город и т. Д.). Он основан на базе данных maxmind geoip.
Отказ от ответственности: я написал эту библиотеку
Вам нужно только встроить тег со ссылкой «src» на сервер. Сервер вернет codehelper_ip в виде объекта / JSON, и вы можете сразу же его использовать.
Если вы используете jQUery, вы можете попробовать:
Он покажет вам больше информации о возвращенном объекте.
Если вам нужна функция обратного вызова, попробуйте следующее:
Если вы всегда включаете файл, вы можете сделать простой ajax get:
И ajax.getIp.php будет таким:
Мне очень нравится api.ipify.org , потому что он поддерживает как HTTP, так и HTTPS.
Вот несколько примеров получения IP-адреса с помощью api.ipify.org с помощью jQuery.
Формат JSON через HTTPS
Формат JSON через HTTP
Текстовый формат через HTTPS
Если вы не хотите, чтобы он был в JSON, есть также текстовый ответ по HTTPS.
Текстовый формат через HTTP
И есть также ответ в виде открытого текста по HTTP
API также предоставляет данные геолокации и имеет 10 глобальных конечных точек, каждая из которых может обрабатывать> 800 миллионов запросов в день!
В этом ответе используется «тестовый» API-ключ, который очень ограничен и предназначен только для тестирования нескольких вызовов. Зарегистрируйтесь для получения собственного бесплатного ключа API и получать до 1500 запросов в день на разработку.
На самом деле нет надежного способа получить IP-адрес клиентского компьютера.
Это проходит через некоторые из возможностей. Код, использующий Java, сломается, если у пользователя несколько интерфейсов.
Глядя на другие ответы здесь, похоже, что вы можете захотеть получить общедоступный IP-адрес клиента, который, вероятно, является адресом маршрутизатора, который они используют для подключения к Интернету. Многие другие ответы здесь говорят об этом. Я бы рекомендовал создать и разместить свою собственную страницу на стороне сервера для получения запроса и ответа с IP-адресом вместо того, чтобы зависеть от чьей-либо услуги, которая может продолжать работать или не работать.
Я собираюсь предложить метод, который я часто использую, когда хочу хранить информацию на странице html и хочу, чтобы мой javascript читал информацию без фактической передачи параметров в javascript. Это особенно полезно, когда на ваш скрипт ссылаются извне, а не внутри него.
Однако он не соответствует критерию «отсутствие сценария на стороне сервера». Но если вы можете включить сценарии на стороне сервера в свой html, сделайте следующее:
Сделайте скрытые элементы меток внизу вашей html-страницы, чуть выше конечного тега тела.
Ваш ярлык будет выглядеть так:
Обязательно создайте класс с именем hiddenlabel и установите visibility:hidden , чтобы никто не видел ярлык. Таким образом вы можете хранить множество вещей в скрытых ярлыках.
Теперь в вашем javascript, чтобы получить информацию, хранящуюся в метке (в данном случае IP-адрес клиента), вы можете сделать следующее:
Теперь ваша переменная «ip» равна IP-адресу. Теперь вы можете передать ip в свой запрос API.
* ИЗМЕНИТЬ НА 2 ГОДА СПУСТЯ * Два незначительных уточнения:
Я обычно использую этот метод, но вызываю метку class=»data» , потому что на самом деле это способ хранения данных. Название класса «hiddenlabel» — глупое название.
Как с помощью JavaScript определить IP адрес пользователя?
Мы расскажем вам как при помощи JavaScript можно узнать всю информацию про пользователя, его IP и другую полезную информацию.
Больше интересных новостей
НЕЙРОСЕТЬ: просто о сложном! Создание нейронной сети на Python
Эффективность и надежность виртуальных серверов для Linux
Лучшие VS Code расширения / ТОП-10 крутых плагинов для Visual Studio
Как развивать логическое мышление?
How to Get the IP Address in JavaScript
To most people, an IP address is just that—the address of a device on the internet. But for application developers, it is an incredibly valuable piece of information. Over the years, countless bytes of information have been collected and cataloged about almost every device that has accessed the internet, and by using ipdata’s API, application developers can access a tremendous amount of location-oriented data to enhance their users’ experience.
But of course, you need an IP address before you can use the wealth of information provided by ipdata. In this article, you will learn how to retrieve an IP addresses with JavaScript—both from within the browser and in your server application.
Retrieving Your User’s IP in the Browser
The browser is the OS of the web, and with more processing being handled within the browser, it makes some sense to retrieve the user’s IP address so that you can use it in your client-side code. The problem, however, is that the browser doesn’t expose any network-oriented information about the device.
1. Using ipdata
You must therefore rely upon a web service to provide that information for you. You could write your own service as part of your server-side application, or you can use a third-party solution to retrieve your user’s IP address. ipdata’s web service is a perfect solution for this problem. All you need is an API key (go ahead and sign up for free). For example:
This code defines a helper function called json() . It simplifies the process of using fetch() with resources that return a JSON structure, as most APIs do. Next, the json() function is used to send a GET request to ipdata’s default endpoint: http://api.ipdata.co. You can use this endpoint to query any IP address, but if you do not provide one with the request, the web service uses the address of the device that issued the request: the browser in this case.
The web service returns a JSON payload that contains a wealth of information—not just the user’s IP address, but all the locational data that ipdata has about that address. For example: the ISP, city, state, country, continent, etc are provided in the payload. Because of this, you do not need to issue any other HTTP requests because you already have the information you need.
Sometimes, however, you do not need all the extraneous locational information, and ipdata’s API lets you filter the results by including the fields query parameter. For example:
The JSON payload contains only the fields specified by the fields query parameter. So, in this code, the resulting JavaScript object (named data ) has a single property called ip .
2. Using Cloudflare
ipdata’s web service is very easy to use. However, another (albeit limited) option is CloudFlare’s trace utility found at https://www.cloudflare.com/cdn-cgi/trace. It returns a plain-text set of key/value pairs, and the following shows a condensed example of the format:
As you can see, the output contains an ip key with its associated value, and you can parse it out with a regular expression like this:
This code defines a text() helper function that is similar to json() , but of course, it reads the response stream as text instead of a JSON structure.
Inside the callback function, you define a regular expression that matches an IPv4 address, and you use that regex to find a match within the response payload. The result gives you the user’s IP address that you can then use in your client-side code.
3. Using Amazon
A similar utility provided by AWS provides another reliable option to query your user’s IP address.
This will give you
Retrieving the Client’s IP in the Server (NodeJS)
IP stands for Internet Protocol, and it implements a type of networking called packet switching. It has the concept of hosts (machines), and it defines how data, in the form of packets, are sent between the hosts. In the case of HTTP, there are two hosts: client and server.
When a browser issues an HTTP request to a server, the request is transmitted from the client to the server in the form of IP packets. These packets contain a variety of information, but there are two particularly important things that every packet has: the source host address and the destination host address. Because every packet contains the client address, your server application can retrieve the client’s IP address from the packet.
Every framework, regardless of language and/or platform, has some mechanism for retrieving the client’s IP address. For Node.js applications, there are two such mechanisms:
- the x-forwarded-for header.
- the request.connection.remoteAddress property.
There is a slight issue, however; the x-forwarded-for header can contain multiple, comma-separated IP addresses. Thankfully, the first IP address in the x-forwarded-for header is typically the correct IP address. With that in mind, consider the following code:
A lot of this code is boilerplate, so let’s focus on the requestListener() function. The first line of the function retrieves the value of the x-forwarded-for header. It is not always guaranteed to be present. So, in the second line, you check if there is a value, and if so, you split it on a comma ( , ) and use the first item in the resulting array. If the x-forwarded-for header doesn’t exist, then you use req.connection.remoteAddress as a fallback.
Viola! You have the client’s IP address. It may not be 100% accurate (the end-user could be using a VPN to mask their true IP), but it is more reliable than getting the client’s address through the browser.
Customize Your Content with IPs
As you can see, using JavaScript to find an IP address is relatively simple, and it’s likely that you’ll want to do something with that address. Maybe you’ll want to show different promotions or ads to your users based upon their region, or you may need to convert currency on the fly. Regardless of your needs, ipdata’s web service provides comprehensive locational information based upon your user’s IP address. Go ahead and setup an account for free. It only takes a couple of minutes to get an API key, and you can use it experiment with the API to see what it can do for you.