[javascript] JavaScript를 사용하여 클라이언트의 IP 주소를 얻는 방법은 무엇입니까?

어떻게 든 JavaScript를 사용하여 클라이언트의 IP 주소를 검색해야합니다. 서버 측 코드도없고 SSI도 없습니다.

그러나 무료 타사 스크립트 / 서비스를 사용하는 것은 아닙니다.



답변

jQuery와 함께 JSON을 반환 할 수있는 웹 서비스를 사용하여 작업을 단순화합니다. 다음은 내가 찾을 수있는 모든 무료 활성 IP 조회 서비스와 이들이 반환하는 정보입니다. 더 이상 알고 있다면 의견을 추가하면이 답변을 업데이트하겠습니다.


구름 플레어

사용해보십시오 : https://www.cloudflare.com/cdn-cgi/trace

// If your site is on Cloudflare, then you can use '/cdn-cgi/trace' instead
$.get('https://www.cloudflare.com/cdn-cgi/trace', function(data) {
    console.log(data)
})

보고:

fl=4f422
h=www.cloudflare.com
ip=54.193.27.106
ts=1575967108.245
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 Hypothesis-Via
colo=SJC
http=http/1.1
loc=US
tls=TLSv1.3
sni=plaintext
warp=off

한계 :

  • 일반 텍스트를 반환

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

한계 :

  • 하루 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"
}

한계 :

  • 시간당 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
}

한계 :

  • 시간당 10,000 건의 요청
  • 무료 API는 비상업적 사용 만 허용합니다

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

한계 :

  • 하루 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,000 건의 요청
  • 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,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"
  ]
}

한계 :

  • 하루에 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"
  }
}

한계 :

  • 한달에 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= < 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"
}

한계 :

  • 초당 두 번의 요청
  • 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,000 건의 요청

임신

사용해보십시오 : https://api.ipregistry.co/?key= < API 키 >

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

보고:

{
  "ip" : "116.12.250.1",
  "type" : "IPv4",
  "hostname" : null,
  "carrier" : {
    "name" : null,
    "mcc" : null,
    "mnc" : null
  },
  "connection" : {
    "asn" : 3758,
    "domain" : "singnet.com.sg",
    "organization" : "SingNet Pte Ltd",
    "type" : "isp"
  },
  "currency" : {
    "code" : "SGD",
    "name" : "Singapore Dollar",
    "plural" : "Singapore dollars",
    "symbol" : "SGD",
    "symbol_native" : "SGD",
    "format" : {
      "negative" : {
        "prefix" : "-SGD",
        "suffix" : ""
      },
      "positive" : {
        "prefix" : "SGD",
        "suffix" : ""
      }
    }
  },
  "location" : {
    "continent" : {
      "code" : "AS",
      "name" : "Asia"
    },
    "country" : {
      "area" : 692.0,
      "borders" : [ ],
      "calling_code" : "65",
      "capital" : "Singapore",
      "code" : "SG",
      "name" : "Singapore",
      "population" : 5638676,
      "population_density" : 8148.38,
      "flag" : {
        "emoji" : "??",
        "emoji_unicode" : "U+1F1F8 U+1F1EC",
        "emojitwo" : "https://cdn.ipregistry.co/flags/emojitwo/sg.svg",
        "noto" : "https://cdn.ipregistry.co/flags/noto/sg.png",
        "twemoji" : "https://cdn.ipregistry.co/flags/twemoji/sg.svg",
        "wikimedia" : "https://cdn.ipregistry.co/flags/wikimedia/sg.svg"
      },
      "languages" : [ {
        "code" : "cmn",
        "name" : "cmn",
        "native" : "cmn"
      }, {
        "code" : "en",
        "name" : "English",
        "native" : "English"
      }, {
        "code" : "ms",
        "name" : "Malay",
        "native" : "Melayu"
      }, {
        "code" : "ta",
        "name" : "Tamil",
        "native" : "தமிழ்"
      }, {
        "code" : "zh",
        "name" : "Chinese",
        "native" : "中文"
      } ],
      "tld" : ".sg"
    },
    "region" : {
      "code" : null,
      "name" : "Singapore"
    },
    "city" : "Singapore",
    "postal" : "96534",
    "latitude" : 1.28967,
    "longitude" : 103.85007,
    "language" : {
      "code" : "cmn",
      "name" : "cmn",
      "native" : "cmn"
    },
    "in_eu" : false
  },
  "security" : {
    "is_bogon" : false,
    "is_cloud_provider" : false,
    "is_tor" : false,
    "is_tor_exit" : false,
    "is_proxy" : false,
    "is_anonymous" : false,
    "is_abuser" : false,
    "is_attacker" : false,
    "is_threat" : false
  },
  "time_zone" : {
    "id" : "Asia/Singapore",
    "abbreviation" : "SGT",
    "current_time" : "2019-09-29T23:13:32+08:00",
    "name" : "Singapore Standard Time",
    "offset" : 28800,
    "in_daylight_saving" : false
  }
}

한계 :

  • 무료 플랜에는 100,000 개의 요청이 포함됩니다.
  • API 키를 받으려면 등록이 필요합니다

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

한계 :

  • 한달에 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": "https://jsonip.com/about",
  "Pro!": "http://getjsonip.com",
  "Get Notifications": "https://jsonip.com/notify"
}

한계 :

  • 응답에는 상향 판매가 포함됩니다

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 목록을 사용하는 광고 차단자가 차단

이 서비스는 모두 무료 서비스이므로 마일리지는 쿼터 및 가동 시간을 초과하는 시점과 길에서 오프라인으로 언제 출발 하는지 알 수 있습니다 (A : Telize ). 이러한 서비스의 대부분은 SSL 지원과 같은 더 많은 기능을 원할 경우 유료 계층을 제공합니다.

또한 skobaljic이 아래 의견에서 언급했듯이 요청 할당량은 클라이언트 측에서 발생하기 때문에 대부분 학업 적이며 대부분의 최종 사용자는 할당량을 초과하지 않습니다.

업데이트


답변

최종 업데이트

브라우저가 webrtc 누출을 수정하기 때문에이 솔루션은 더 이상 작동하지 않습니다.에 대한 자세한 내용은 RTCIceCandidate가 더 이상 IP를 반환하지 않습니다.


업데이트 : 항상 코드의 최소 / 못생긴 버전을 만들고 싶었으므로 ES6 Promise 코드는 다음과 같습니다.

var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})

/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))

참고 : 이 새로운 축소 코드는 사용자의 모든 IP (네트워크에 따라 다를 수 있음)를 원할 경우 단일 IP 만 반환합니다. 원래 코드를 사용하십시오 …


WebRTC 덕분 에 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를 알 수 있습니다.

어디에서 코드를 가져 갔 습니까?


답변

JSONP로 서버 측을 통해 릴레이 할 수 있습니다.

인터넷 검색 중 하나를 찾으려면 여기에서 찾으십시오. 클라이언트 측 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>

참고 : telize.com API는 2015 년 11 월 15 일부터 영구적으로 종료되었습니다 .


답변

여기에있는 대부분의 답변은 다음과 같은 방법으로 서버 측 코드의 필요성을 “해결”합니다. 실제로 서버에 충돌하지 않고 IP 주소를 얻을 필요 가 없다면 완전히 유효한 기술 입니다.

전통적으로 이것은 일종의 플러그인 없이는 가능하지 않았으며 (그리고 NAT 라우터 뒤에 있다면 잘못된 IP 주소를 얻었을 것 입니다) WebRTC의 출현으로 실제로는 가능합니다. . 경우 당신은 타겟팅 브라우저를 지원하는 WebRTC가 (현재 : 파이어 폭스, 크롬과 오페라).

WebRTC를 사용하여 유용한 클라이언트 IP 주소를 검색하는 방법에 대한 자세한 내용은 mido의 답변 읽으십시오 .


답변

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

보너스로, 지역화 정보는 동일한 호출로 반환됩니다.


답변

이 시도

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

깡깡이


답변

당신은 할 수 없습니다. 서버를 요청해야합니다.