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

561

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

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

Теги:
ip-address

50 ответов

488

Я бы использовал веб-сервис, который может вернуть JSON (вместе с jQuery, чтобы упростить работу). Ниже приведены все бесплатные активные поисковые службы IP, которые я могу найти, и информацию, которую они возвращают. Если вы знаете больше, то, пожалуйста, добавьте комментарий, и я обновлю этот ответ.


DB-IP

Попробуйте: http://api.db-ip.com/addrinfo?api_key=<your api key> & addr = <ip address>

Возвращает:

{
  "address": "116.12.250.1",
  "country": "SG",
  "stateprov": "Central Singapore",
  "city": "Singapore"
}

Ограничения:

  • 2500 запросов в день
  • Не поддерживает обратные вызовы JSONP
  • Требуется параметр IP-адреса
  • Требуется адрес электронной почты, чтобы получить ключ API
  • Нет SSL (https) со свободным планом

Geobytes

Попробуйте: http://gd.geobytes.com/GetCityDetails

$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "geobytesforwarderfor": "",
  "geobytesremoteip": "116.12.250.1",
  "geobytesipaddress": "116.12.250.1",
  "geobytescertainty": "99",
  "geobytesinternet": "SA",
  "geobytescountry": "Saudi Arabia",
  "geobytesregionlocationcode": "SASH",
  "geobytesregion": "Ash Sharqiyah",
  "geobytescode": "SH",
  "geobyteslocationcode": "SASHJUBA",
  "geobytescity": "Jubail",
  "geobytescityid": "13793",
  "geobytesfqcn": "Jubail, SH, Saudi Arabia",
  "geobyteslatitude": "27.004999",
  "geobyteslongitude": "49.660999",
  "geobytescapital": "Riyadh ",
  "geobytestimezone": "+03:00",
  "geobytesnationalitysingular": "Saudi Arabian ",
  "geobytespopulation": "22757092",
  "geobytesnationalityplural": "Saudis",
  "geobytesmapreference": "Middle East ",
  "geobytescurrency": "Saudi Riyal",
  "geobytescurrencycode": "SAR",
  "geobytestitle": "Saudi Arabia"
}

Ограничения:

  • 16 384 запросов в час
  • Нет SSL (https) со свободным планом
  • Может вернуть неправильное место (я в Сингапуре, а не в Саудовской Аравии)

GeoIPLookup.io

Попробуйте: https://json.geoiplookup.io/api

$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
    "ip": "116.12.250.1",
    "isp": "SGPOST",
    "org": "Singapore Post Ltd",
    "hostname": "116.12.250.1",
    "longitude": "103.807",
    "latitude": "1.29209",
    "postal_code": "",
    "city": "Singapore",
    "country_code": "SG",
    "country_name": "Singapore",
    "continent_code": "AS",
    "region": "Central Singapore",
    "district": "",
    "timezone_name": "Asia\/Singapore",
    "connection_type": "",
    "asn": "AS3758 SingNet",
    "currency_code": "SGD",
    "currency_name": "Singapore Dollar",
    "success": true
}

Ограничения:

  • неизвестный

geoPlugin

Попробуйте: http://www.geoplugin.net/json.gp

$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "geoplugin_request": "116.12.250.1",
  "geoplugin_status": 200,
  "geoplugin_credit": "Some of the returned data includes GeoLite data created by MaxMind, available from <a href=\\'http://www.maxmind.com\\'>http://www.maxmind.com</a>.",
  "geoplugin_city": "Singapore",
  "geoplugin_region": "Singapore (general)",
  "geoplugin_areaCode": "0",
  "geoplugin_dmaCode": "0",
  "geoplugin_countryCode": "SG",
  "geoplugin_countryName": "Singapore",
  "geoplugin_continentCode": "AS",
  "geoplugin_latitude": "1.2931",
  "geoplugin_longitude": "103.855797",
  "geoplugin_regionCode": "00",
  "geoplugin_regionName": "Singapore (general)",
  "geoplugin_currencyCode": "SGD",
  "geoplugin_currencySymbol": "&#36;",
  "geoplugin_currencySymbol_UTF8": "$",
  "geoplugin_currencyConverter": 1.4239
}

Ограничения:

  • 120 запросов в минуту
  • Нет SSL (https) со свободным планом

Хакерская цель

Попробуйте: https://api.hackertarget.com/geoip/?q=<ip адрес>

Возвращает:

IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797

Ограничения:

  • 50 запросов в день
  • Не поддерживает обратные вызовы JSONP
  • Требуется параметр IP-адреса
  • Возвращает обычный текст

ipapi.co

Попробуйте: https://ipapi.co/json/

$.getJSON('https://ipapi.co/json/', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "country": "SG",
  "country_name": "Singapore",
  "postal": null,
  "latitude": 1.2855,
  "longitude": 103.8565,
  "timezone": "Asia/Singapore"
}

Ограничения:

  • 1000 запросов в день
  • Требуется SSL (https)

IP-API.com

Попробуйте: http://ip-api.com/json

$.getJSON('http://ip-api.com/json?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "as": "AS3758 SingNet",
  "city": "Singapore",
  "country": "Singapore",
  "countryCode": "SG",
  "isp": "SingNet Pte Ltd",
  "lat": 1.2931,
  "lon": 103.8558,
  "org": "Singapore Telecommunications",
  "query": "116.12.250.1",
  "region": "01",
  "regionName": "Central Singapore Community Development Council",
  "status": "success",
  "timezone": "Asia/Singapore",
  "zip": ""
}

Ограничения:

  • 150 запросов в минуту
  • Нет SSL (https) со свободным планом

Ipdata.co

Попробуйте: https://api.ipdata.co

$.getJSON('https://api.ipdata.co', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "region_code": "01",
  "country_name": "Singapore",
  "country_code": "SG",
  "continent_name": "Asia",
  "continent_code": "AS",
  "latitude": 1.2931,
  "longitude": 103.8558,
  "asn": "AS3758",
  "organisation": "SingNet",
  "postal": "",
  "calling_code": "65",
  "flag": "https://ipdata.co/flags/sg.png",
  "emoji_flag": "\ud83c\uddf8\ud83c\uddec",
  "emoji_unicode": "U+1F1F8 U+1F1EC",
  "is_eu": false,
  "languages": [
    {
      "name": "English",
      "native": "English"
    },
    {
      "name": "Malay",
      "native": "Bahasa Melayu"
    },
    {
      "name": "Tamil",
      "native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
    },
    {
      "name": "Chinese",
      "native": "\u4e2d\u6587"
    }
  ],
  "currency": {
    "name": "Singapore Dollar",
    "code": "SGD",
    "symbol": "S$",
    "native": "$",
    "plural": "Singapore dollars"
  },
  "time_zone": {
    "name": "Asia/Singapore",
    "abbr": "+08",
    "offset": "+0800",
    "is_dst": false,
    "current_time": "2018-05-09T12:28:49.183674+08:00"
  },
  "threat": {
    "is_tor": false,
    "is_proxy": false,
    "is_anonymous": false,
    "is_known_attacker": false,
    "is_known_abuser": false,
    "is_threat": false,
    "is_bogon": false
  }
}

Ограничения:

  • 1500 запросов в день
  • Требуется SSL (https)

Поиск IP

Попробуйте: https://ipfind.co/me?auth=<your api key>

$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip_address": "116.12.250.1",
  "country": "Singapore",
  "country_code": "SG",
  "continent": "Asia",
  "continent_code": "AS",
  "city": "Singapore",
  "county": null,
  "region": "Central Singapore",
  "region_code": "01",
  "timezone": "Asia/Singapore",
  "owner": null,
  "longitude": 103.8565,
  "latitude": 1.2855,
  "currency": "SGD",
  "languages": [
    "cmn",
    "en-SG",
    "ms-SG",
    "ta-SG",
    "zh-SG"
  ]
}

Ограничения:

  • 300 запросов в день
  • Требуется регистрация, чтобы получить ключ API

ipgeolocation

Попробуйте: https://api.ipgeolocation.io/ipgeo?apiKey=<your api key>

$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1",
  "continent_code": "AS",
  "continent_name": "Asia",
  "country_code2": "SG",
  "country_code3": "SGP",
  "country_name": "Singapore",
  "country_capital": "Singapore",
  "state_prov": "Central Singapore",
  "district": "",
  "city": "Singapore",
  "zipcode": "",
  "latitude": "1.29209",
  "longitude": "103.807",
  "is_eu": false,
  "calling_code": "+65",
  "country_tld": ".sg",
  "languages": "cmn,en-SG,ms-SG,ta-SG,zh-SG",
  "country_flag": "https://ipgeolocation.io/static/flags/sg_64.png",
  "isp": "SGPOST",
  "connection_type": "",
  "organization": "Singapore Post Ltd",
  "geoname_id": "1880252",
  "currency": {
    "name": "Dollar",
    "code": "SGD"
  },
  "time_zone": {
    "name": "Asia/Singapore",
    "offset": 8,
    "is_dst": false,
    "current_time": "2018-06-12 09:06:49.028+0800"
  }
}

Ограничения:

  • 50 000 запросов в месяц
  • Требуется регистрация, чтобы получить ключ API

ipify

Попробуйте: https://api.ipify.org/?format=json

$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1"
}

Ограничения:

  • Никто

IPInfoDB

Попробуйте: https://api.ipinfodb.com/v3/ip-city/?key=<your api key> & format = json

$.getJSON('https://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "statusCode": "OK",
  "statusMessage": "",
  "ipAddress": "116.12.250.1",
  "countryCode": "SG",
  "countryName": "Singapore",
  "regionName": "Singapore",
  "cityName": "Singapore",
  "zipCode": "048941",
  "latitude": "1.28967",
  "longitude": "103.85",
  "timeZone": "+08:00"
}

Ограничения:

  • Два запроса в секунду
  • Требуется регистрация, чтобы получить ключ API

ipinfo.io

Попробуйте: https://ipinfo.io/json

$.getJSON('https://ipinfo.io/json', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1",
  "hostname": "No Hostname",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "country": "SG",
  "loc": "1.2931,103.8558",
  "org": "AS3758 SingNet"
}

Ограничения:

  • 1000 запросов в день

ipstack (ранее freegeoip.net)

Попробуйте: http://api.ipstack.com/<ip адрес>? Access_key = <ваш ключ api>

$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
    "ip": "116.12.250.1",
    "type": "ipv4",
    "continent_code": "AS",
    "continent_name": "Asia",
    "country_code": "SG",
    "country_name": "Singapore",
    "region_code": "01",
    "region_name": "Central Singapore Community Development Council",
    "city": "Singapore",
    "zip": null,
    "latitude": 1.2931,
    "longitude": 103.8558,
    "location": {
        "geoname_id": 1880252,
        "capital": "Singapore",
        "languages": [{
            "code": "en",
            "name": "English",
            "native": "English"
        },
        {
            "code": "ms",
            "name": "Malay",
            "native": "Bahasa Melayu"
        },
        {
            "code": "ta",
            "name": "Tamil",
            "native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
        },
        {
            "code": "zh",
            "name": "Chinese",
            "native": "\u4e2d\u6587"
        }],
        "country_flag": "http:\/\/assets.ipstack.com\/flags\/sg.svg",
        "country_flag_emoji": "\ud83c\uddf8\ud83c\uddec",
        "country_flag_emoji_unicode": "U+1F1F8 U+1F1EC",
        "calling_code": "65",
        "is_eu": false
    }
}

Ограничения:

  • 10 000 запросов в месяц
  • Требуется параметр IP-адреса
  • Требуется регистрация, чтобы получить ключ API
  • Нет SSL (https) со свободным планом

jsonip.com

Попробуйте: https://jsonip.com

$.getJSON('https://jsonip.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1",
  "about": "/about",
  "Pro!": "http://getjsonip.com",
  "reject-fascism": "Liberal America will prevail"
}

Ограничения:

  • Ответ включает upsell и политику

Тест JSON

Попробуйте: http://ip.jsontest.com/

$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "ip": "116.12.250.1"
}

Ограничения:

  • Нет SSL (https)
  • Уходит много (над квотой), поэтому я не буду использовать его для производства
  • Возвращает адрес IPv6, если он у вас есть, что может быть не таким, каким вы хотите

Nekudo

Попробуйте: https://geoip.nekudo.com/api

$.getJSON('https://geoip.nekudo.com/api', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "city": "Singapore",
  "country": {
    "name": "Singapore",
    "code": "SG"
  },
  "location": {
    "accuracy_radius": 50,
    "latitude": 1.2855,
    "longitude": 103.8565,
    "time_zone": "Asia/Singapore"
  },
  "ip": "116.12.250.1"
}

Ограничения:

  • Заблокировано блоками рекламы с помощью списка EasyPrivacy.

Глупые веб-инструменты

Попробуйте: http://www.stupidwebtools.com/api/my_ip.json

$.getJSON('http://www.stupidwebtools.com/api/my_ip.json', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Возвращает:

{
  "my_ip": {
    "ip": "116.12.250.1",
    "others": []
  }
}

Ограничения:

  • Нет SSL (https)

Имейте в виду, что, поскольку это все бесплатные услуги, ваш пробег может варьироваться в зависимости от превышения квоты и времени безотказной работы, и кто знает, когда/если они будут отключены по дороге (экспонат A: Telize). Большинство этих услуг также предлагают платный уровень, если вы хотите больше функций, таких как поддержка SSL.

Кроме того, как указано в комментариях к skobaljic, квоты запросов в основном являются академическими, так как это происходит на стороне клиента, и большинство пользователей никогда не превысят квоту.

ОБНОВЛЕНИЕ

  • 2/1/2016: Удалено Telize (больше не предлагает бесплатный план)
  • 4/18/2016: Удалено freegeoip.net (не работает)
  • 4/26/2016: Добавлен DB-IP
  • 26.04.2006: добавлена цель хакера
  • 7/6/2016: Обновлено freegeoip.net
  • 7/6/2016: Удалено ip-json.rhcloud.com (мертвая ссылка)
  • 12/21/2016: Удалена цель хакера (не работает)
  • 10/10/2017: Добавлено Nekudo
  • 20.04.2017: Добавлен ipapi.co (спасибо Ахмад Awais)
  • 4/24/2017: восстановленная цель хакера
  • 4/24/2017: Удалено Snoopi.io (не работает)
  • 7/16/2017: Добавлен IP-адрес (спасибо JordanC)
  • 7/16/2017: Обновлено ограничение для бесплатных планов, которые не поддерживают SSL
  • 25.09.2017: Добавлен Stupid Web Tools (спасибо Cœur)
  • 16/16/2018: Добавлен Ipdata.co (спасибо Джонатан)
  • 4/14/2018: переименован freegeoip.net в ipstack (спасибо MA-Maddin)
  • 16.04.2008: Добавлен GeoIPLookup.io (спасибо Роба Ваа)
  • 6/11/2018: Добавлен ipgeolocation (спасибо Ejaz Ahmed)
  • 0
    Я хотел бы отметить, что для jsonip.com он вернет только ваш IPv6-адрес, если он у вас есть, что может быть нежелательно в зависимости от того, как вы используете информацию. Но +1 за отличные примеры.
  • 0
    Есть ли эти HTTPS?
Показать ещё 30 комментариев
213

Обновление: я всегда хотел сделать минимальную/углеродистую версию кода, так что вот код 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.log('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-адрес пользователя.

где я взял код из → Источник

  • 0
    Я получил сообщение «Ошибка: конструктор RTCPeerConnection передал недопустимую RTCConfiguration - неверный URI: не определен» в Firefox 26
  • 0
    @BeniBela обновил код для работы с Firefox 26, проверил в Windows Machine, вы можете проверить и подтвердить?
Показать ещё 12 комментариев
185

Вы можете, ретранслируя его с сервера с помощью 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>

Примечание. API telize.com на постоянной основе закрыт с 15 ноября 2015 г.. p >

  • 40
    Хотя я ценю этот фрагмент, я думаю, что загрузка текстового содержимого JavaScript и оценка его с помощью функции представляет серьезную угрозу безопасности. Что, если содержание ответа изменится, и все более 100 человек, которые проголосовали за этот ответ и, возможно, использовали этот фрагмент, в итоге вызовут функцию с возможным небезопасным контентом. Я бы использовал это только если бы это была строка JSON.
  • 31
    Error Over Quota This application is temporarily over its serving quota. Please try again later.
Показать ещё 7 комментариев
91

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

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

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

  • 2
    Я думаю, что вы можете: hashemian.com/tools/visitor-IP.htm
  • 23
    @oscar: это похоже на тот же метод (возвращаемый JSONP-серверный IP-адрес), который Чад упомянул в своем ответе. Который не соответствует требованию OP "нет кода на стороне сервера". Но да, это один из способов сделать это, если вы игнорируете это требование.
Показать ещё 2 комментария
85

Вы можете выполнить вызов 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;
}

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

  • 6
    Вы также можете получить представление JSON, используя api.hostip.info/get_json.php , а затем проанализировать JSON с помощью функции браузера, jQuery или Prototype.
  • 2
    есть ли какие-либо ограничения для запросов на " api.hostip.info/get_html.php "? где я могу увидеть детали этого API
Показать ещё 3 комментария
72
Попробуйте
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

ИЛИ

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

Fiddle

  • 0
    это работает $ .get (" ipinfo.io ", function (response) {alert (response.ip);}, "jsonp"); но как мне сохранить значение в переменной? кажется, что он исчезает за пределами этого цикла запроса get
  • 1
    Список всех бесплатных служб поиска IP-адресов вы можете найти в моем ответе на stackoverflow.com/questions/391979/…
Показать ещё 1 комментарий
45

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

Ознакомьтесь с http://www.ipify.org/

Согласно им:

  • Вы можете использовать его без ограничений (даже если вы делаете миллионы запросов в минуту).
  • ipify полностью открыт (проверьте репозиторий GitHub).

Здесь рабочий пример 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

Примечание. Перед запуском демонстрации отключите Adblock Plus/uBlock & co. В противном случае он просто не сработает.

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

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

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

  • 3
    Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий под своим постом.
  • 19
    Но это вроде как, верно? Я имею в виду, что если ответ просто «нет, вы не можете», то я бы сказал, что это более правильный ответ, чем тот, который проголосовал в данный момент «здесь, используйте это случайное приложение appspot», которое кажется опасным ответом на верхняя часть списка.
Показать ещё 4 комментария
24

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

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

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

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

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

больше документов здесь

  • 1
    Гектометр Это выглядит интересно ... Есть ли у них ограничения?
  • 1
    автономная библиотека
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 script, что поп что-то вроде

function visitorsIP()   { return '123.123.123.123'; }

Сделайте это. Положите http://yourdomain.com/yourip.php.

Тогда do

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

В вопросе конкретно указывается НЕ использовать сторонний script. Другого пути нет. Javascript не может знать ваш IP-адрес. Но другие серверы, к которым можно получить доступ через javascript, могут работать так же, как без проблем.

  • 7
    загрузка JavaScript с удаленного сервера и вызов функций с неизвестным содержимым кажется мне огромной угрозой безопасности (что, если содержимое функции изменится?). Я предпочел бы разобрать ответ JSON.
  • 3
    Ошибка 404: объект не найден
Показать ещё 3 комментария
14

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

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

Mido опубликовал ответ FANTASTIC, выше, который, кажется, единственный ответ, который действительно предоставил IP-адрес клиента.

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

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

Вот "Минута" версии "Ожидаемая". Я надеюсь, что это поможет кому-то еще:

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

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

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.host);
        }
    );
});
  • 13
    «Сервис временно недоступен».
  • 0
    написал простой API [ geoip.immanuel.co/myip], чтобы получить IP-адрес клиента, SSL включен и без ограничений
13

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

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

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

jQuery.ajax( { 
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) {
     console.log(location)
  }
} );
  • 0
    Кажется, у них отключение 1 июля 2018 года
12

Ну, я отвлекаюсь от вопроса, но сегодня у меня была такая же потребность, и хотя я не мог найти идентификатор от клиента с помощью 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 я просто загружаю это значение.

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

Ура!

  • 19
    -1: в OP специально упоминается «нет кода на стороне сервера», но вы используете C #.
  • 3
    Только Javascript ...
Показать ещё 2 комментария
9

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

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

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

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

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

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

8

Вы можете использовать java-библиотеку 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 для загрузки script.

Он предоставит вам IP-адрес вашего посетителя, а также несколько данных о его местоположении (стране, городе и т.д.). Он основан на базе данных maxmind geoip.

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

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

8

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 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>
  • 1
    не используйте атрибут language , вместо этого используйте type="text/javascript" , подробнее о MDN
  • 0
    как уже упоминалось @Alex, язык устарел и используется только в устаревшем коде. Вместо этого используйте 'type = "text / javascript"' для максимальной совместимости.
Показать ещё 2 комментария
8

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

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

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

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

7

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

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

И ajax.getIp.php будет следующим:

<?=$_SERVER['REMOTE_ADDR']?>
  • 1
    Я не могу использовать php
6

Я предлагаю метод, который я использую много, когда хочу хранить информацию на странице html, и хочу, чтобы мой javascript читал информацию, не имея необходимости передавать параметры в javascript. Это особенно полезно, если ваш script ссылается на внешний, а не на встроенный.

Однако он не соответствует критерию "без серверной стороны script". Но если вы можете включить скрипты на стороне сервера в свой 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;
}

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

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

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

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

$.get("https://api.ipdata.co", 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>
5

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

Вот несколько примеров получения IP- api.ipify.org с помощью 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
5

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

4
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });
  • 0
    Это работает, спасибо.
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    
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.

3

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

Пример с https:

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

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

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

  • 0
    Сервис больше не доступен, я думаю.
3

Здесь вы идете:

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.host);
});
  • 0
    Сервис больше не доступен, я думаю.
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) { }
3
<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>
3
<!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>
2

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

Однако, с этим аддоном для 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;   //while 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

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

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

Изменить: это не работает из-за безопасности перекрестного домена.

  • 3
    Может захотеть попробовать это, прежде чем принять. Я думал, что это приведет к ошибке «отказано в доступе» из-за нарушения правил междоменных сценариев.
  • 0
    Не в фрейме. Проблема в том, что вам придется передавать переменные туда-сюда между iframe и вашим основным документом. IFrame не сможет получить информацию из родительского документа, поэтому убедитесь, что вы управляете им наоборот.
Показать ещё 3 комментария
1

Прежде всего, фактический ответ: невозможно использовать чисто исполняемый код на стороне клиента, чтобы узнать свой собственный 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
}
1

Попробуйте это

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

Вы можете использовать наш 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, public proxy и spammer и также предоставляет эту информацию.

Пример ответа:

{
  "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
  }
}
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-адрес при загрузке страницы.

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

1

У меня есть свой собственный api back end с laravel, поэтому я обычно просто следующее:

$(document).ready( function() {

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

});

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

1
$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});
1
<script type="application/javascript">
  function getip(json)
  {
     alert(json.ip); 
  }

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

Выполнить над script Clik here

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

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

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

Java Script, чтобы найти IP

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

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

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

0

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

0

Хорошо, если в 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 . "';"; 
?>
-3

Вы можете использовать службу api из telize

Если вам нужен только открытый 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});

ПРИМЕЧАНИЕ. Публичный API telize будет окончательно закрыт 15 ноября 2015 года.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню