web-dev-qa-db-ja.com

JavaScriptを使用してクライアントのIPアドレスを取得する方法

私はどういうわけかJavaScriptを使ってクライアントのIPアドレスを取得する必要があります。サーバー側のコードはなく、SSIもありません。

しかし、私は無料のサードパーティスクリプト/サービスを使用することに反対していません。

560
FlySwat

私は(物事を簡単にするためにjQueryと共に)JSONを返すことができるWebサービスを使用します。以下は私が見つけることができるすべてのfree active IP検索サービスとそれらが返す情報です。あなたがもうこれ以上知っているならば、それからコメントを加えてください、そして、私はこの答えを更新します。


DB-IP

試してみてくださいhttp://api.db-ip.com/addrinfo?api_key=<あなたのapiキー>&addr = <ip address>

戻り値:

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

制限:

  • 1日あたりの2,500の要求
  • JSONPコールバックをサポートしません
  • IPアドレスパラメータが必要
  • APIキーを取得するにはメールアドレスが必要です
  • 無料プランでSSLなし(https)

ジオバイト

試してみてください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"
}

制限:

  • 1時間あたり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 address>

戻り値:

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

制限:

  • 1日あたり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"
}

制限:

  • 1日あたり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
  }
}

制限:

  • 1日あたり1,500の要求
  • APIキーを取得するにはメールアドレスが必要です
  • SSLが必要(https)

IP検索

試してみてくださいhttps://ipfind.co/me?auth=<あなたのapiキー>

$.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"
  ]
}

制限:

  • 1日300リクエスト
  • APIキーを取得するには登録が必要です

ipgeolocation

試してみてくださいhttps://api.ipgeolocation.io/ipgeo?apiKey=<あなたのAPIキー>

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

制限:

  • 1ヶ月あたりの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"
}

制限:

  • None

IPInfoDB

試してみてくださいhttps://api.ipinfodb.com/v3/ip-city/?key=<あなたのapiキー>&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"
}

制限:

  • 1秒あたり2要求
  • 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"
}

制限:

  • 1日あたり1000リクエスト

ipstack (以前はfreegeoip.net)

試してみてくださいhttp://api.ipstack.com/<ip address>?access_key = <your api key>

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

制限:

  • 1ヶ月あたりの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"
}

制限:

  • この反応には、アップセルと政治が含まれています。

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アドレスがある場合はそれを返します。

ねくどう

試してみてください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リストを使用して広告ブロッカーによってブロックされている

愚かなWebツール

試してみてください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が以下のコメントで指摘したように、これはクライアントサイドで行われており、ほとんどのエンドユーザーは決してクォータを超えることはないので、リクエストクォータはほとんど学術的です。

更新

  • 2016/02/1:削除された Telize (無料プランは提供されていません)
  • 2016/04/18: freegeoip.net (サービス停止中)を削除しました
  • 2016/04/26: DB-IP を追加)
  • 4/26/2016: ハッカーターゲット を追加)
  • 2016/07/06:復元された freegeoip.net
  • 2016/07/06: ip-json.rhcloud.com (デッドリンク)を削除しました
  • 2016/12/21: ハッカーターゲット (サービス停止中))を削除しました
  • 2/10/2017: Nekudo を追加)
  • 2017/04/20: ipapi.co (Ahmad Awaisに感謝))を追加しました。
  • 4/24/2017:修復された ハッカーターゲット
  • 4/24/2017: Snoopi.io (サービス停止中)を削除しました
  • 2017/07/16: IP Find (Thanks JordanC)を追加しました。
  • 7/16/2017:SSLをサポートしない無料プランの制限を更新しました
  • 2017/09/25: 愚かなWebツール (ThanksCœur)を追加しました。
  • 3/16/2018: Ipdata.co (Jonathanに感謝)を追加しました
  • 4/14/2018:freegeoip.netを ipstack に改名)(MA-Maddinに感謝)
  • 4/16/2018: GeoIPLookup.io (Rob Robaに感謝)を追加しました
  • 6/11/2018: ipgeolocation (Thanks Ejaz Ahmed)を追加しました。
577
thdoan

更新 :私は常にコードの最小化された/醜いバージョンを作りたかったので、ここに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 のおかげで、(少なくとも今のところ)WebRTC対応ブラウザでローカルIPを取得するのはとても簡単です。パブリック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アドレスを知ることができます。

私がどこからコードを取ったところ - > ソース

249
mido

JSONPを使ってサーバーサイドで中継することができます

そしてグーグルで検索しながら、ここでそれを見つけたSO クライアントサイドのJavascriptを使ってDNSルックアップ(ホスト名からIPアドレス)を実行することはできますか?

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

注: 2015年11月15日現在、telize.com APIは永久に シャットダウンしています

175
Chad Grant

ここでの答えのほとんどは、サーバー側のコードの必要性を「回避」します。誰かのサーバーを攻撃します。 実際にサーバーにアクセスせずにIPアドレスを取得する必要がある場合を除き、これは完全に有効な手法です。

伝統的に、これはある種のプラグインなしでは不可能でした(そしてそれでも、NATの背後にいる場合はwrongIPアドレスを取得するでしょう。ルーター)、しかし、WebRTCの出現により、実際にこれを行うことができます...Ifあなたがターゲットにしている場合 WebRTCをサポートするブラウザ (現在: Firefox、ChromeおよびOpera)。

midoの答えを読んでくださいWebRTCを使用して有用なクライアントIPアドレスを取得する方法の詳細について。

102
Shog9

あなたはhostip.infoまたは類似のサービスへのajax呼び出しをすることができます...

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

ボーナスとして、地理位置情報が同じ呼び出しで返されます。

81
Malta
これを試して
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

OR

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

Fiddle

73
Sridhar R

これ以上探さない

チェックアウト 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チームと関係がある{nothing}を持っています。誰かがそのようなサービスを一般的な利益のために提供するのはばかげてクールだと思います。

52
FloatingRock

できません。あなたはサーバーに依頼する必要があるでしょう。

48
SteveShaffer

これには、私のサービス http://ipinfo.io を使用できます。これにより、クライアントIP、ホスト名、位置情報、およびネットワーク所有者がわかります。これはIPを記録する簡単な例です:

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

完全な応答情報も出力する、より詳細なJSFiddleの例を次に示します。利用可能なすべての詳細を見ることができます。 http://jsfiddle.net/zK5FN/2/

25
Ben Dowling

このコードをあなたのページに含めてください:<script type="text/javascript" src="http://l2.io/ip.js"></script>

もっとdoc ここ

19
L2.IO

私はチャドとマルタが素晴らしい答えを持っていると言うでしょう。しかし、それらは複雑です。だから私は国のプラグインによる広告から見つけたこのコードを提案する

<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はありません。ただのジャバスクリプト。 :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を介してアクセスできる他のサーバーでも問題なく動作します。

16
user4951

この質問には2つの解釈があります。ほとんどの人は、「クライアントIP」を、WebサーバーがLANの外やインターネット上で見るパブリックIPアドレスを意味すると解釈しました。ほとんどの場合、これはクライアントコンピュータのIPアドレスではありません。

私のJavaScriptソフトウェアをホストしているブラウザを実行しているコンピュータの実際のIPアドレス(ほとんどの場合、LAN上のローカルIPアドレスはNATレイヤの背後にあるものです)が必要でした。

Midoが上記のFANTASTIC回答を投稿しました。それが実際にクライアントのIPアドレスを提供した唯一の回答のようです。

どうもありがとう、ミドー!

ただし、提示された機能は非同期的に実行されます。私は実際に自分のコードでIPアドレスを使用する必要があります、そして非同期の解決策で、私はそれが検索/学習/保存される前にIPアドレスを使用しようとするかもしれません。結果を使用する前に、結果が到着するのを待つことができなければなりませんでした。

これがMidoの機能の "Waitable"バージョンです。私はそれが他の誰かに役立つことを願っています:

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

Smart-IP.netを使って Geo-IP API 。たとえば、jQueryを使用して:

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

あなたの訪問者に許可を求めないような、もっと簡単で自由な方法があります。

それは http://freegeoip.net/json に非常に単純なAjax POSTリクエストを送信することから成ります。自分の位置情報を受け取ったら、JSONで、それに応じてページを更新するか新しいものにリダイレクトします。

位置情報のリクエストを送信する方法は次のとおりです。

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

さて、私はその質問から脱却しています、しかし私は今日同様のニーズを持っていました、そして私はJavascriptを使っているクライアントからIDを見つけることができませんでしたが、私は以下をしました。

サーバーサイド: -

<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>

Javascriptを使う

var ip = $get("uip").innerHTML;

私はASP.NET Ajaxを使用していますが、$ get()の代わりにgetElementByIdを使用できます。

何が起きているのかというと、私はページ上に隠されたdiv要素を持っていて、ユーザーのIPがサーバーからレンダリングされています。 Javascriptよりもその値をロードするだけです。

これはあなたと同じような要件を持っている人には役に立つかもしれません(私がこれを理解していない間は私のように)。

乾杯!

12
Cyril Gupta

何らかの外部サービスを利用しない限り、一般的には不可能です。

10
Eugene Lazutkin

jQueryであなたのIPを取得してください

1行のJSでパブリックIPアドレスを取得できますか?あなたにこれを提供する無料サービスがあります、そして、getリクエストはあなたがする必要があるすべてです:

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

クライアントコンピュータのIPアドレスを取得するための本当に信頼できる方法はありません。

これはいくつかの可能性を通り抜ける。ユーザーが複数のインターフェースを持っていると、Javaを使用するコードは壊れます。

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

ここで他の答えを見てみると、クライアントのパブリックIPアドレスを取得したいと思うかもしれません。これはおそらくインターネットに接続するために使用しているルーターのアドレスです。ここで他の多くの答えはそれについて話します。他の人のサービスに依存するのではなく、リクエストを受信し、IPアドレスで応答するための独自のサーバーサイドページを作成してホストすることをお勧めします。

8
Sarel Botha

userinfo.io javascriptライブラリを使用できます。

<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データベースに基づいています。

免責事項:私はこのライブラリを書きました

8
Vincent Durmont

Javascript/jQueryがクライアントのIPアドレスと場所を取得 (国、都市)

サーバーへの "src"リンクを持つタグを埋め込むだけです。サーバーは "codehelper_ip"をObject/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.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>
8
Ken Le

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
Yamenator

api.ipify.org はHTTPとHTTPSの両方をサポートしているので、私は本当に好きです。

以下はjQueryを使ってapi.ipify.orgを使ってIPを取得する例です。

HTTPSを介したJSON形式

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>

HTTP上のJSONフォーマット

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

ファイルを別の場所に含める場合は、単純なajaxのgetを実行します。

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

そしてajax.getIp.phpはこれでしょう:

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

ipdata.co を使用してください。

このAPIは、地理位置情報データも提供し、それぞれが1日に800Mを超える要求を処理できる10個のグローバルエンドポイントを持っています。

この回答では、「テスト」APIキーを使用していますが、これは非常に限られており、数回の呼び出しをテストするためのものです。 サインアップ あなた自身の無料APIキーのために、そして開発のために毎日1500リクエストまで得てください。

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

Htmlページに情報を格納し、実際にはJavaScriptにパラメータを渡さなくてもJavaScriptで情報を読みたい場合によく使用する方法を提供します。これは、スクリプトがインラインではなく外部で参照されている場合に特に便利です。

ただし、「サーバー側スクリプトがありません」という基準を満たしていません。あなたのHTMLにサーバーサイドのスクリプトを含めることができるなら、これをしてください:

Htmlページの下部、end bodyタグのすぐ上に非表示のラベル要素を作成します。

あなたのラベルはこのようになります:

<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>

hiddenlabelというクラスを作成し、visibility:hiddenを設定して、実際にラベルが見えないようにしてください。このようにして、たくさんのものを隠しラベルに格納できます。

さて、あなたのJavascriptで、ラベル(この場合はクライアントのIPアドレス)に格納されている情報を検索するために、これを行うことができます。

var ip = document.getElementById("ip").innerHTML;

これであなたの変数 "ip"はipアドレスに等しくなります。今すぐあなたのAPIリクエストにIPアドレスを渡すことができます。

* 2年後の編集* / 2つのマイナーな改良点:

私は日常的にこの方法を使用していますが、実際にはデータを保存する方法であるため、ラベルclass="data"を呼び出します。クラス名 "hiddenlabel"はバカな名前のようなものです。

2番目の変更はvisibility:hiddenの代わりにスタイルシートにあります。

.data{
    display:none;
}

...それをするのがより良い方法です。

6
TARKUS

Jsが呼び出すことができるFlashオブジェクトを使用することによって、これを完全にクライアント側で、そしてほとんどJavaScriptで行うことができます。 Flash can ローカルマシンのIPアドレスにアクセスすることはあまり役に立ちません。

5
nic ferrier
<!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>
4
Ricardo Olvera
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を取得します。

4
Jawwad Ahmed
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });
4
Atif Hussain

あなたはのようなWebサービスを使用することができます: 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
user3463375

これを試してください: http://httpbin.org/ip (または https://httpbin.org/ip

Httpsの例:

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

出典: http://httpbin.org/ /

3
SimC

どうぞ:

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.Host);
});
3
Liam Healy

ジャバスクリプトを試す

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

3
user8392362

システムローカル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
RandyMohan

上記のすべての回答には、純粋なクライアント部分ではなく、サーバー部分があります。これはウェブブラウザによって提供されるべきです。現在のところ、Webブラウザはこれをサポートしていません。

しかし、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

2
user1462586

私はJavascriptの達人ではありませんが、可能であれば http://www.whatismyip.com/automation/n09230945.asp をソースとしてiframeを開き、フレームの内容を読むことができます。

編集:これはクロスドメインセキュリティのために動作しません。

2
UnkwnTech
<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>
2
Rajan Mandanka

あなたは私たちの 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、パブリックプロキシ、スパマーデータベースをチェックし、この情報も提供します。

応答の例:

{
  "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
  }
}
2
Andrey E

まず最初に実際の答え 純粋にクライアントサイドで実行されたコードを使ってあなた自身のIPアドレスを見つけることは不可能です。

しかし、 https://api.muctool.de/whois に向けてGETを実行するだけで、クライアントの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
}
2
Alex

どこかでNGINXを使っているのであれば、このスニペットを追加してAJAXツールを使って自分のサーバーに問い合わせることができます。

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

私がここで見た他のサービスのいくつかに関する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
Michael Hampton
<script type="application/javascript">
  function getip(json)
  {
     alert(json.ip); 
  }
 <script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>

上のスクリプトを実行します ここをクリック

1
Prateek

私はlaravelで私自身のapiバックエンドを持っているので、私はたいてい以下の通りです:

$(document).ready( function() {

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

});

セキュリティを高めるために、結果を得るために必要なAPIキーを提供しています。

1
xaoseric

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

これを試して

$.get("http://ipinfo.io", function(response) {
   alert(response.ip);
}, "jsonp");
1
$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});
1
Sagar Bhosale

IPを見つけるためのJavaスクリプト

IPアドレスを取得するには、私は無料のWebサービスへの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レスポンス code

WebRTC これはサーバーのサポートを必要としません。

0
Yash

Javascriptだけではできません(上記のようにクライアントにブラウザプラグインがない限り)。クライアント上のFlashでもできません。しかし、Javaアプレットを使用してクライアント上で実行することもできます(そしてjavascriptがそれと通信することもできます)。ただし、完全なアクセス権を要求されます。例えば http://www.findmyrouter.net を参照してください。

0
Trevor Cox