답변:
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
한계 :
시도해보십시오 : http://api.db-ip.com/addrinfo?api_key= < API 키 > & addr = < ip address >
보고:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : 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
}
한계 :
사용해보십시오 : 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": "$",
"geoplugin_currencySymbol_UTF8": "$",
"geoplugin_currencyConverter": 1.4239
}
한계 :
사용해보십시오 : 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
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : 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": ""
}
한계 :
사용해보십시오 : 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
}
}
한계 :
사용해보십시오 : 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"
]
}
한계 :
사용해보십시오 : 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"
}
}
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : 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
}
}
한계 :
시도해보십시오 : 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
}
}
한계 :
사용해보십시오 : 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"
}
한계 :
사용해보십시오 : http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
보고:
{
"ip": "116.12.250.1"
}
한계 :
사용해보십시오 : 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"
}
한계 :
이 서비스는 모두 무료 서비스이므로 마일리지는 쿼터 및 가동 시간을 초과하는 시점과 길에서 오프라인으로 언제 출발 하는지 알 수 있습니다 (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 일부터 영구적으로 종료되었습니다 .
Error Over Quota This application is temporarily over its serving quota. Please try again later.
여기에있는 대부분의 답변은 다음과 같은 방법으로 서버 측 코드의 필요성을 "해결"합니다. 실제로 서버에 충돌하지 않고 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);
});
});
당신은 할 수 없습니다. 서버를 요청해야합니다.
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 팀과 는 아무런 관련 이 없습니다 . 나는 누군가가 일반적인 재화를 위해 그러한 서비스를 제공한다는 것이 엄청나게 시원하다고 생각합니다.
내 서비스 http://ipinfo.io 를 사용 하면 클라이언트 IP, 호스트 이름, 지리적 위치 정보 및 네트워크 소유자가 제공됩니다. 다음은 IP를 기록하는 간단한 예입니다.
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
다음은 전체 응답 정보를 인쇄하여 사용 가능한 모든 세부 정보를 볼 수있는보다 자세한 JSFiddle 예제입니다. http://jsfiddle.net/zK5FN/2/
http://ipinfo.io
으로 변경 //ipinfo.io
하거나 https
이 코드를 페이지에 포함 시키십시오. <script type="text/javascript" src="http://l2.io/ip.js"></script>
여기 더 많은 의사
나는 차드와 몰타가 큰 답을 가지고 있다고 말할 것이다. 그러나 그것들은 복잡합니다. 국가 플러그인별로 광고에서 찾은이 코드를 제안합니다.
<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>
아약스가 없습니다. 평범한 자바 스크립트. :디
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>
이 질문에는 특히 타사 스크립트를 사용하지 말라고 언급되어 있습니다. 다른 방법은 없습니다. 자바 스크립트가 IP를 알 수 없습니다. 그러나 자바 스크립트를 통해 액세스 할 수있는 다른 서버는 아무런 문제없이 잘 작동 할 수 있습니다.
이 질문에 대한 두 가지 해석이 있습니다. 대부분의 사람들은 "클라이언트 IP"를 웹 서버가 LAN 외부와 인터넷에서 볼 수있는 공용 IP 주소로 해석했습니다. 그러나 대부분의 경우 클라이언트 컴퓨터의 IP 주소가 아닙니다.
JavaScript 소프트웨어를 호스팅하는 브라우저를 실행하는 컴퓨터의 실제 IP 주소가 필요했습니다 (NAT 계층 뒤에있는 LAN의 로컬 IP 주소).
Mido는 위의 FANTASTIC 답변을 게시했는데, 이는 실제로 클라이언트의 IP 주소를 제공 한 유일한 답변 인 것 같습니다.
미도!
그러나 제시된 기능은 비동기 적으로 실행됩니다. 실제로 코드에서 IP 주소를 사용해야하고 비동기 솔루션을 사용하여 IP 주소를 검색 / 학습 / 저장하기 전에 사용하려고 할 수 있습니다. 사용하기 전에 결과가 도착하기를 기다려야했습니다.
다음은 Mido 기능의 "대기 가능"버전입니다. 다른 사람에게 도움이되기를 바랍니다.
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var promise = new Promise(function (resolve, reject) {
try {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({ iceServers: [] }),
noop = function () { },
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function (sdp) {
sdp.sdp.split('\n').forEach(function (line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function (ice) { //listen for candidate events
if (ice && ice.candidate && ice.candidate.candidate && ice.candidate.candidate.match(ipRegex)) {
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
}
resolve("FindIPsDone");
return;
};
}
catch (ex) {
reject(Error(ex));
}
});// New Promise(...{ ... });
return promise;
};
//This is the callback that gets run for each IP address found
function foundNewIP(ip) {
if (typeof window.ipAddress === 'undefined')
{
window.ipAddress = ip;
}
else
{
window.ipAddress += " - " + ip;
}
}
//This is How to use the Waitable findIP function, and react to the
//results arriving
var ipWaitObject = findIP(foundNewIP); // Puts found IP(s) in window.ipAddress
ipWaitObject.then(
function (result) {
alert ("IP(s) Found. Result: '" + result + "'. You can use them now: " + window.ipAddress)
},
function (err) {
alert ("IP(s) NOT Found. FAILED! " + err)
}
);
<h1>Demo "Waitable" Client IP Retrieval using WebRTC </h1>
방문자에게 허가를 요청하지 않는보다 쉽고 무료 접근 방식이 있습니다.
매우 간단한 Ajax POST 요청을 http://freegeoip.net/json 에 제출하는 것으로 구성됩니다 . 위치 정보를 받으면 JSON에서 페이지를 업데이트하거나 새 페이지로 리디렉션하여 적절히 반응합니다.
위치 정보 요청을 제출하는 방법은 다음과 같습니다.
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
글쎄, 나는 질문에서 벗어나고 있지만 오늘도 비슷한 요구가 있었고 Javascript를 사용하여 클라이언트에서 ID를 찾을 수 없지만 다음을 수행했습니다.
서버 측에서 :-
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
자바 스크립트 사용
var ip = $get("uip").innerHTML;
ASP.Net Ajax를 사용하고 있지만 $ get () 대신 getElementById를 사용할 수 있습니다.
무슨 일이 일어나고 있는지, 서버에서 렌더링 된 사용자의 IP로 페이지에 숨겨진 div 요소가 있습니다. Javascript보다 그 값을로드합니다.
이것은 당신과 비슷한 요구 사항을 가진 일부 사람들에게 도움이 될 수 있습니다 (내가 이것을 이해하지 못하는 동안 나와 같은).
건배!
<script>var uip='<%= Request.UserHostAddress %>';</script>
않습니까?
Smart-IP.net 사용하여 지리적 IP API를 . 예를 들어, jQuery를 사용하여 :
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
외부 서비스를 사용하지 않으면 일반적으로 불가능합니다.
jQuery로 IP를 얻으십시오
한 줄의 JS로 공용 IP 주소를 얻을 수 있습니까? 이 서비스를 무료로 제공하는 서비스가 있으며 요청은 다음과 같습니다.
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
위 코드 조각이 작동하려면 브라우저가 CORS (원본 간 요청 공유)를 지원해야합니다. 그렇지 않으면 보안 예외가 발생합니다. 이전 브라우저에서는 JSON-P 요청을 사용하는이 버전을 사용할 수 있습니다.
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
userinfo.io 자바 스크립트 라이브러리를 사용할 수 있습니다 .
<script type="text/javascript" src="userinfo.0.0.1.min.js"></script>
UserInfo.getInfo(function(data) {
alert(data.ip_address);
}, function(err) {
// Do something with the error
});
requirejs를 사용하여 스크립트를로드 할 수도 있습니다.
방문자의 IP 주소와 위치 (국가, 도시 등)에 대한 몇 가지 데이터를 제공합니다. maxmind geoip 데이터베이스를 기반으로합니다.
면책 조항 : 나는이 도서관을 썼다.
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 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>
Appspot.com 콜백 서비스를 사용할 수 없습니다. ipinfo.io가 작동하는 것 같습니다.
추가 단계를 수행하고 AngularJS를 사용하여 모든 지리 정보를 검색했습니다. (Ricardo에게 감사합니다) 확인해보세요.
<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
api.ipify.org
HTTP와 HTTPS를 모두 지원하기 때문에 정말 좋아 합니다.
다음은 api.ipify.org
jQuery를 사용 하여 IP를 얻는 몇 가지 예입니다 .
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://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>
JSON에서 원하지 않으면 HTTPS를 통한 일반 텍스트 응답도 있습니다.
https://api.ipify.org
그리고 HTTP를 통한 평문 응답도 있습니다
http://api.ipify.org
ipdata.co 사용 .
이 API는 또한 지리적 위치 데이터를 제공하며 하루에 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>
클라이언트 컴퓨터의 IP 주소를 얻는 확실한 방법은 없습니다.
이것은 몇 가지 가능성을 겪습니다. 사용자에게 여러 인터페이스가 있으면 Java를 사용하는 코드가 작동하지 않습니다.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
다른 답변을 보면 클라이언트의 공용 IP 주소를 얻으려는 것처럼 들릴 것입니다.이 IP 주소는 아마도 인터넷에 연결하는 데 사용하는 라우터의 주소 일 것입니다. 여기에 다른 많은 답변이 그것에 대해 이야기합니다. 계속 작동하거나 작동하지 않을 수있는 다른 사람의 서비스에 의존하지 않고 요청을 수신하고 IP 주소로 응답하기 위해 자체 서버 쪽 페이지를 만들어 호스팅하는 것이 좋습니다.
html 페이지에 정보를 저장하고 실제로 자바 스크립트에 매개 변수를 전달하지 않고도 정보를 읽을 수 있기를 원할 때 많이 사용하는 방법을 제공하려고합니다. 스크립트가 인라인이 아닌 외부에서 참조 될 때 특히 유용합니다.
그러나 "서버 측 스크립트 없음"이라는 기준을 충족하지 않습니다. 그러나 HTML에 서버 측 스크립팅을 포함시킬 수 있다면 다음과 같이하십시오 :
HTML 페이지 하단의 엔드 본문 태그 바로 위에 숨겨진 라벨 요소를 만듭니다.
라벨은 다음과 같습니다.
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
클래스를 호출 hiddenlabel
하고 visibility:hidden
아무도 실제로 레이블을 볼 수 없도록 설정하십시오 . 숨겨진 레이블에 이런 식으로 많은 것을 저장할 수 있습니다.
이제 자바 스크립트에서 레이블에 저장된 정보 (이 경우 클라이언트의 IP 주소)를 검색하려면 다음을 수행하십시오.
var ip = document.getElementById("ip").innerHTML;
이제 변수 "ip"는 ip 주소와 같습니다. 이제 ip를 API 요청에 전달할 수 있습니다.
* 2 년 후 수정 * 두 가지 사소한 수정 :
class="data"
실제로이 방법을 사용하지만 실제로는 데이터를 저장하는 방법이므로 label을 호출합니다 . 클래스 이름 "hiddenlabel"은 멍청한 이름입니다.
두 번째 수정은 visibility:hidden
다음 대신 스타일 시트에 있습니다 .
.data{
display:none;
}
... 더 나은 방법입니다.
이것을 시도하십시오 : http://httpbin.org/ip (또는 https://httpbin.org/ip )
https를 사용한 예 :
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
출처 : http://httpbin.org/
우선 실제 답변 : 순수한 클라이언트 측 실행 코드를 사용하여 자신의 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
}
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });