Yanıtlar:
JSON (işler daha basit hale getirmek için jQuery ile birlikte) dönebilir bir web hizmeti kullanırsınız. Aşağıda bulabildiğim tüm ücretsiz aktif IP arama hizmetleri ve geri döndükleri bilgiler bulunmaktadır. Başka bir şey biliyorsanız, lütfen bir yorum ekleyin, bu yanıtı güncelleyeceğim.
Deneyin: 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)
})
İadeler:
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
Sınırlamalar:
Deneyin: http://api.db-ip.com/addrinfo?api_key= < api anahtarınız > & addr = < ip adresi >
İadeler:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Sınırlamalar:
Deneyin: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
}
Sınırlamalar:
Deneyin: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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
}
Sınırlamalar:
Deneyin: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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
}
Sınırlamalar:
Deneyin: https://api.hackertarget.com/geoip/?q= < ip adresi >
İadeler:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Sınırlamalar:
Deneyin: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
}
Sınırlamalar:
Deneyin: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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": ""
}
Sınırlamalar:
Deneyin: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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
}
}
Sınırlamalar:
Deneyin: https://ipfind.co/me?auth= < api anahtarınız >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
]
}
Sınırlamalar:
Deneyin: https://api.ipgeolocation.io/ipgeo?apiKey= < api anahtarınız >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
}
}
Sınırlamalar:
Deneyin: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"ip": "116.12.250.1"
}
Sınırlamalar:
Deneyin: https://api.ipinfodb.com/v3/ip-city/?key= < api anahtarınız > & 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));
});
İadeler:
{
"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"
}
Sınırlamalar:
Deneyin: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
}
Sınırlamalar:
Deneyin: https://api.ipregistry.co/?key= < api anahtarınız >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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
}
}
Sınırlamalar:
Deneyin: http://api.ipstack.com/ < ip adresi >? Access_key = <api anahtarınız>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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
}
}
Sınırlamalar:
Deneyin: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Sınırlamalar:
Deneyin: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"ip": "116.12.250.1"
}
Sınırlamalar:
Deneyin: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
İadeler:
{
"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"
}
Sınırlamalar:
Bunların tümü ücretsiz hizmetler olduğundan, kilometrenizin kotanın ve çalışma süresinin aşılması bakımından değişebileceğini ve yolun ne zaman çevrimdışı olup olmayacağını kimin bilip bilmediğini unutmayın (sergi A: Telize) ). SSL hizmetleri gibi daha fazla özellik istiyorsanız, bu hizmetlerin çoğu ücretli bir katman sunar.
Ayrıca, aşağıdaki yorumlarda belirtildiği gibi, skobaljiç'in belirttiği gibi, istek kotaları çoğunlukla akademiktir, çünkü bu müşteri tarafında gerçekleşmektedir ve çoğu son kullanıcı asla kotayı aşmayacaktır.
GÜNCEL
Son Güncelleme
Tarayıcılar webrtc sızıntısını düzelttiği için bu çözüm artık çalışmaz: bu diğer soru hakkında daha fazla bilgi için: RTCIceCandidate artık IP döndürmüyor
Güncelleme : Ben her zaman kodun bir min / uglified sürümü yapmak istedim, işte bir ES6 Promise kodu:
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))
Not: Kullanıcının tüm IP'lerini (ağına bağlı olarak daha fazla olabilir) istiyorsanız, bu yeni küçültülmüş kod yalnızca tek bir IP döndürür, orijinal kodu kullanın ...
WebRTC sayesinde , WebRTC destekli tarayıcılarda yerel IP almak çok kolaydır (en azından şimdilik). Kaynak kodunu değiştirdim, satırları azalttım, yalnızca Genel IP'yi değil, sadece IP'yi değil, herhangi bir sersemletme isteği yapmıyorum, aşağıdaki kod en son Firefox ve Chrome'da çalışıyor, sadece snippet'i çalıştırın ve kendiniz kontrol edin:
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>
burada olan şu, kukla bir akran bağlantısı yaratıyoruz ve uzaktan akranın bizimle iletişime geçmesi için genellikle buz adaylarını birbirimizle değiştiriyoruz. Ve buz adaylarını (yerel oturum tanımından ve onIceCandidateEvent'ten) okuyarak kullanıcının IP'sini söyleyebiliriz.
kodu nereden aldım -> Kaynak
JSONP ile sunucu tarafı üzerinden geçirebilirsiniz
Ve birini bulmak için googling, burada buldum SO üzerinde İstemci tarafı Javascript kullanarak bir DNS arama (ana bilgisayar adı IP adresine) yapabilir miyim?
<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>
Not: telize.com API, 15 Kasım 2015 itibarıyla kalıcı olarak kapanmıştır .
Error Over Quota This application is temporarily over its serving quota. Please try again later.
Buradaki cevapların çoğu, başkalarının sunucusuna vurarak sunucu tarafı kod ihtiyacını "çözer". Bir sunucuya çarpmadan IP adresini almanız gerekmedikçe , tamamen geçerli bir tekniktir .
Geleneksel olarak bu bir çeşit eklenti olmadan mümkün değildi (ve hatta bir NAT yönlendiricisinin arkasında olsaydınız muhtemelen yanlış IP adresini alırdınız), ancak WebRTC'nin ortaya çıkmasıyla bunu yapmak gerçekten mümkün. . Eğer hedeflediğiniz tarayıcıları desteğin WebRTC (şu anda: Firefox, Chrome ve Opera).
Lütfen mido'nun cevabını okuyunWebRTC'yi kullanarak yararlı istemci IP adreslerini nasıl alabileceğinize ilişkin ayrıntılar için .
Hostip.info ya da benzeri bir servis için ajax çağrısı yapabilirsiniz ...
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;
}
Bonus olarak, coğrafi çağrı bilgileri aynı çağrıda döndürülür.
Bunu dene
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
VEYA
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
Yapamazsın. Bir sunucu istemelisin.
Check out http://www.ipify.org/
Onlara göre:
- Sınırsız kullanabilirsiniz (dakikada milyonlarca istek yapsanız bile).
- ipify tamamen açık kaynak kodludur ( GitHub deposuna bakın ).
İşte çalışan bir JS örneği (bu cevabın neden bu kadar az oyu olduğunu merak etmek yerine, onu çalışırken görmek için kendiniz deneyin):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Kopyalamak / yapıştırmak için çok tembel misiniz? Bunu sevdim. İşte bir demo
Tıklamak çok tembel mi? :O
Not : Demoyu çalıştırmadan önce Adblock Plus / uBlock & co'yu kapatın .. Aksi takdirde, çalışmaz.
Ben hiçbir şey IPify takımı ile yapacak. Ben sadece birinin genel iyilik için böyle bir hizmet sağlayacak gülünç serin olduğunu düşünüyorum.
Bunun için istemcinizin IP'sini, ana makine adını, coğrafi konum bilgilerini ve ağ sahibini verecek olan http://ipinfo.io hizmetimi kullanabilirsiniz . İşte IP'yi kaydeden basit bir örnek:
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
Aşağıda, tüm yanıt bilgilerini de yazdıran daha ayrıntılı bir JSFiddle örneği verilmiştir, böylece mevcut tüm ayrıntıları görebilirsiniz: http://jsfiddle.net/zK5FN/2/
http://ipinfo.io
için //ipinfo.io
veya https
Bu kodu sayfanıza ekleyin: <script type="text/javascript" src="http://l2.io/ip.js"></script>
burada daha fazla doktor
Çad ve Malta'nın harika bir cevabı olduğunu söyleyebilirim. Ancak, onların karmaşık. Ülke eklentisine göre reklamlardan bulduğum bu kodu öneriyorum
<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 yok. Sadece düz javascripts. : D
Http://j.maxmind.com/app/geoip.js adresine giderseniz, içerdiğini göreceksiniz
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 ''; }
Henüz soruyu gerçekten cevaplamıyor çünkü
http://j.maxmind.com/app/geoip.js IP içermiyor (ülkeyi almak için IP'yi kullanıyor olmasına rağmen).
Ama böyle bir şey açan bir PhP betiği yapmak çok kolay
function visitorsIP() { return '123.123.123.123'; }
Şunu yap. Http://alanadiniz.com/alanadiniz.php'yi ekleyin .
Sonra yap
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
Soru, üçüncü taraf komut dosyası kullanmama özelliğinden bahsediyor. Başka yolu yok. Javascript IP'nizi bilemez. Ancak, javascript ile erişilebilen diğer sunucular da sorunsuz bir şekilde çalışabilir.
Bu sorunun iki yorumu vardır. Çoğu kişi, "İstemci IP" yi, Web sunucusunun LAN dışında ve İnternet'te gördüğü Genel IP Adresi anlamına gelir. Bu çoğu durumda istemci bilgisayarın IP adresi değildir.
JavaScript yazılımımı barındıran tarayıcıyı çalıştıran bilgisayarın gerçek IP adresine ihtiyacım vardı (bu neredeyse her zaman NAT katmanının arkasında olan bir LAN üzerindeki yerel IP adresidir).
Mido, FANTASTİK bir cevap gönderdi, bu istemcinin IP adresini gerçekten sağlayan tek cevap gibi görünüyor.
Bunun için teşekkürler, Mido!
Ancak, sunulan işlev zaman uyumsuz olarak çalışır. Aslında kodumda IP adresini KULLANMAK gerekiyor ve zaman uyumsuz bir çözüm ile, alınmadan / öğrenilen / saklanan önce IP adresini kullanmaya çalışabilirsiniz. Onları kullanmadan önce sonuçları beklemek zorunda kaldım.
İşte Mido'nun fonksiyonunun "Beklenebilir" versiyonu. Umarım başka birine yardımcı olur:
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>
Ziyaretçinizden herhangi bir izin istemeyecek daha kolay ve ücretsiz bir yaklaşım var.
Bu çok basit Ajax POST isteği göndererek oluşur http://freegeoip.net/json . Konum bilgilerinizi aldıktan sonra, JSON'da, sayfayı güncelleyerek veya yenisine yönlendirerek buna göre tepki verirsiniz.
Konum bilgisi isteğinizi şu şekilde gönderirsiniz:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
Peki, ben sorudan ayrılıyorum, ama bugün benzer bir ihtiyaç vardı ve Javascript kullanarak istemciden kimliği bulamadı, ancak aşağıdakileri yaptım.
Sunucu tarafında: -
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
Javascript Kullanımı
var ip = $get("uip").innerHTML;
ASP.Net Ajax kullanıyorum, ancak $ get () yerine getElementById kullanabilirsiniz.
Neler oluyor, sayfada kullanıcının IP'sinin sunucudan oluşturulduğu gizli bir div öğesi var. Javascript'te olduğundan sadece bu değeri yüklüyorum.
Bu sizinki gibi benzer bir şartı olan bazı insanlar için yararlı olabilir (bunu çözememişken benim gibi).
Şerefe!
<script>var uip='<%= Request.UserHostAddress %>';</script>
?
Smart-IP.net Geo-IP API kullanarak . Örneğin, jQuery kullanarak:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Bir çeşit harici hizmet kullanmadığınız sürece genel olarak mümkün değildir.
IP'nizi jQuery ile alın
IP adresinizi bir JS satırı ile alabilirsiniz? Bunu sizin için sunan ücretsiz bir hizmet var ve yapmanız gereken tek şey bir alma isteği:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
Yukarıdaki snippet'in çalışması için tarayıcınızın CORS'ı (çapraz menşe istek paylaşımı) desteklemesi gerekir. Aksi takdirde bir güvenlik istisnası atılır. Daha eski tarayıcılarda, JSON-P isteği kullanan bu sürümü kullanabilirsiniz:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
Userinfo.io javascript kütüphanesini kullanabilirsiniz .
<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
});
Ayrıca betiği yüklemek için requirjs kullanabilirsiniz.
Ziyaretçinizin IP adresini ve bulunduğu yerle ilgili birkaç veriyi (ülke, şehir vb.) Verecektir. Maxmind geoip veritabanını temel alır.
Feragatname: Bu kütüphaneyi yazdım
Javascript / jQuery Müşterinin IP Adresini ve Konumunu al (Ülke, Şehir)
Yalnızca sunucuya "src" bağlantısı olan bir etiket yerleştirmeniz gerekir. Sunucu Object / JSON olarak "codehelper_ip" i döndürür ve hemen kullanabilirsiniz.
// 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 hakkında daha fazla bilgi
JQUery kullanıyorsanız şunları deneyebilirsiniz:
console.log(codehelper_ip);
Size döndürülen nesne hakkında daha fazla bilgi gösterecektir.
Geri arama işlevi istiyorsanız, lütfen şunu deneyin:
// 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 geri arama hizmeti kullanılamıyor. ipinfo.io çalışıyor.
Fazladan bir adım attım ve AngularJS kullanarak tüm coğrafi bilgileri aldım. (Ricardo sayesinde) Şuna bir bak.
<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>
Burada çalışma sayfası: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
api.ipify.org
Hem HTTP hem de HTTPS'yi desteklediğinden gerçekten hoşlanıyorum .
Aşağıda, api.ipify.org
jQuery kullanarak IP almanın bazı örnekleri verilmiştir .
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'da istemiyorsanız HTTPS üzerinden düz metin yanıtı da vardır
https://api.ipify.org
Ve HTTP üzerinden düz metin yanıtı da var
http://api.ipify.org
İpdata.co kullanın .
API ayrıca coğrafi konum verileri sağlar ve her biri günde 800 milyondan fazla isteği işleyebilen 10 global uç noktaya sahiptir!
Bu cevap, çok sınırlı olan ve yalnızca birkaç çağrıyı test etmek için kullanılan bir 'test' API Anahtarı kullanır. Aboneliği Kendi ücretsiz API Key ve geliştirme için her gün 1500 isteklerine kalk.
$.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>
İstemci bilgisayarın IP adresini almanın güvenilir bir yolu yoktur.
Bu bazı olasılıklardan geçer. Kullanıcının birden fazla arabirimi varsa, Java kullanan kod bozulur.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Buradaki diğer yanıtlara bakıldığında, müşterinin genel IP adresini almak isteyebileceğiniz gibi görünüyor, bu da muhtemelen internete bağlanmak için kullandıkları yönlendiricinin adresi. Buradaki diğer cevapların çoğu bunun hakkında konuşuyor. Çalışmayı devam ettirebilecek veya etmeyebilecek başka birinin hizmetine bağlı olarak, isteği almak ve IP adresi ile yanıt vermek için kendi sunucu tarafı sayfanızı oluşturup barındırmanızı öneririm.
Ben html sayfasında bilgi saklamak istediğinizde çok kullandığım bir yöntem sunacak ve benim javascript aslında javascript parametreleri geçirmek zorunda kalmadan bilgi okumak istiyorum. Bu, özellikle komut dosyanızın satır içi yerine harici olarak başvurulması durumunda yararlıdır.
Ancak, "sunucu tarafı komut dosyası yok" ölçütünü karşılamıyor. Ancak, html'nize sunucu tarafı komut dosyası ekleyebiliyorsanız şunları yapın:
HTML sayfanızın alt kısmında, son gövde etiketinin hemen üstünde gizli etiket öğeleri oluşturun.
Etiketiniz şöyle görünecek:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
Bir sınıfı çağırdığınızdan hiddenlabel
ve visibility:hidden
etiketi gerçekten görmeyecek şekilde ayarladığınızdan emin olun . Bu şekilde birçok şeyi gizli etiketlerde saklayabilirsiniz.
Şimdi, javascript'inizde, etikette saklanan bilgileri (bu durumda istemcinin ip adresi) almak için şunları yapabilirsiniz:
var ip = document.getElementById("ip").innerHTML;
Şimdi "ip" değişkeniniz ip adresine eşittir. Şimdi ip'i API isteğinize aktarabilirsiniz.
* 2 YIL SONRA DÜZENLEYİN * İki küçük ayrıntılandırma:
Bu yöntemi rutin olarak kullanıyorum, ancak etiketi çağırıyorum class="data"
, çünkü aslında, veri depolamanın bir yoludur. Sınıf adı "hiddenlabel" biraz aptalca bir isim.
İkinci değişiklik, stil sayfasında visibility:hidden
:
.data{
display:none;
}
... bunu yapmanın daha iyi bir yoludur.
$.getJSON("http://jsonip.com?callback=?", function (data) {
alert("Your ip address: " + data.ip);
});
Bunu deneyin: http://httpbin.org/ip (veya https://httpbin.org/ip )
Https ile örnek:
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
Kaynak: http://httpbin.org/
Her şeyden önce asıl cevap : Kendi IP adresinizi bulmak için tamamen istemci tarafında yürütülen kodu kullanmak mümkün değildir.
Ancak https://api.muctool.de/whois adresine bir GET yapabilir ve bir müşterinin IP adresini almak gibi bir şey alabilirsiniz
{
"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
}
Bunu tamamen istemci tarafında ve çoğunlukla JavaScript'te js çağırabileceği bir Flash nesnesi kullanarak yapabilirsiniz. Flaş olabilir çok faydalı olmayabilir yerel makinenin IP adresini erişin.
var call_to = "http://smart-ip.net/geoip-json?callback=?";
$.getJSON(call_to, function(data){
alert(data.host);
});
data.host
ip adresidir. Bunu tarayıcınızdan aramanız yeterlidir.
http://smart-ip.net/geoip-json?callback=?
[Tırnaklar olmadan] ve ip olsun.
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });