Jawaban:
Saya akan menggunakan layanan web yang dapat mengembalikan JSON (bersama dengan jQuery untuk mempermudah). Di bawah ini adalah semua layanan pencarian IP aktif gratis yang dapat saya temukan dan informasi yang mereka kembalikan. Jika Anda tahu lagi, silakan tambahkan komentar dan saya akan memperbarui jawaban ini.
Cobalah: 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)
})
Pengembalian:
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
Keterbatasan:
Cobalah: http://api.db-ip.com/addrinfo?api_key= < kunci api Anda > & addr = < alamat ip >
Pengembalian:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Keterbatasan:
Cobalah: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
}
Keterbatasan:
Cobalah: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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
}
Keterbatasan:
Cobalah: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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
}
Keterbatasan:
Cobalah: https://api.hackertarget.com/geoip/?q= < alamat ip >
Pengembalian:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Keterbatasan:
Cobalah: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
}
Keterbatasan:
Cobalah: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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": ""
}
Keterbatasan:
Cobalah: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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
}
}
Keterbatasan:
Cobalah: https://ipfind.co/me?auth= < kunci api Anda >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
]
}
Keterbatasan:
Cobalah: https://api.ipgeolocation.io/ipgeo?apiKey= < kunci api Anda >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
}
}
Keterbatasan:
Cobalah: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"ip": "116.12.250.1"
}
Keterbatasan:
Cobalah: https://api.ipinfodb.com/v3/ip-city/?key= < kunci api Anda > & 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));
});
Pengembalian:
{
"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"
}
Keterbatasan:
Cobalah: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
}
Keterbatasan:
Cobalah: https://api.ipregistry.co/?key= < kunci api Anda >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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
}
}
Keterbatasan:
Cobalah: http://api.ipstack.com/ < ip address >? Access_key = <kunci api Anda>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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
}
}
Keterbatasan:
Cobalah: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Keterbatasan:
Cobalah: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"ip": "116.12.250.1"
}
Keterbatasan:
Cobalah: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Pengembalian:
{
"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"
}
Keterbatasan:
Ingatlah bahwa karena ini semua adalah layanan gratis, jarak tempuh Anda mungkin berbeda dalam hal melebihi kuota dan waktu aktif, dan siapa yang tahu kapan / apakah mereka akan offline di jalan (pameran A: Telize ). Sebagian besar layanan ini juga menawarkan tingkat pembayaran jika Anda menginginkan lebih banyak fitur seperti dukungan SSL.
Juga, seperti yang dicatat skobaljic dalam komentar di bawah ini, kuota permintaan sebagian besar bersifat akademis karena ini terjadi di sisi klien dan sebagian besar pengguna akhir tidak akan pernah melebihi kuota.
PEMBARUAN
Pembaruan Terakhir
Solusi ini tidak akan berfungsi lagi karena browser memperbaiki kebocoran webrtc: untuk info lebih lanjut tentang itu baca pertanyaan lain ini: RTCIceCandidate tidak lagi mengembalikan IP
Pembaruan : Saya selalu ingin membuat versi kode min / uglified, jadi di sini adalah kode 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))
Catatan: Kode minified baru ini hanya akan mengembalikan satu IP jika Anda ingin semua IP pengguna (yang mungkin lebih tergantung pada jaringannya), gunakan kode asli ...
berkat WebRTC , sangat mudah untuk mendapatkan IP lokal di browser yang didukung WebRTC (setidaknya untuk saat ini). Saya telah memodifikasi kode sumber, mengurangi garis, tidak membuat permintaan setrum karena Anda hanya menginginkan IP Lokal, bukan IP Publik, kode di bawah ini berfungsi di Firefox dan Chrome terbaru, cukup jalankan cuplikan dan periksa sendiri:
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>
apa yang terjadi di sini adalah, kami membuat koneksi peer dummy, dan untuk peer remote untuk menghubungi kami, kami biasanya bertukar kandidat es satu sama lain. Dan membaca kandidat es (dari deskripsi sesi lokal dan onIceCandidateEvent) kami dapat memberi tahu IP pengguna.
tempat saya mengambil kode dari -> Sumber
Anda bisa, menyampaikannya melalui sisi server dengan JSONP
Dan ketika mencari di Google, menemukannya di SO, bisakah saya melakukan pencarian DNS (nama host ke alamat IP) menggunakan Javascript sisi klien?
<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>
Catatan: API telize.com telah ditutup secara permanen pada 15 November 2015 .
Error Over Quota This application is temporarily over its serving quota. Please try again later.
Sebagian besar jawaban di sini "mengatasi" kebutuhan kode sisi server dengan ... Memukul server orang lain. Yang merupakan teknik yang benar-benar valid, kecuali jika Anda benar-benar perlu mendapatkan alamat IP tanpa memukul server.
Secara tradisional ini tidak mungkin tanpa semacam plugin (dan bahkan kemudian, Anda mungkin akan mendapatkan alamat IP yang salah jika Anda berada di belakang router NAT), tetapi dengan munculnya WebRTC sebenarnya mungkin untuk melakukan ini .. . Jika Anda menargetkan browser yang mendukung WebRTC (saat ini: Firefox, Chrome dan Opera).
Silakan baca jawaban mido untuk perincian tentang bagaimana Anda dapat mengambil alamat IP klien yang bermanfaat menggunakan WebRTC.
Anda dapat melakukan panggilan ajax ke hostip.info atau layanan serupa ...
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;
}
Sebagai bonus, informasi geolokalisasi dikembalikan dalam panggilan yang sama.
Coba ini
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
ATAU
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
Kamu tidak bisa Anda harus bertanya ke server.
Lihat http://www.ipify.org/
Menurut mereka:
- Anda dapat menggunakannya tanpa batas (bahkan jika Anda melakukan jutaan permintaan per menit).
- ipify sepenuhnya open source (lihat repositori GitHub ).
Berikut ini adalah contoh JS yang berfungsi (alih-alih bertanya-tanya mengapa jawaban ini memiliki begitu sedikit suara, cobalah sendiri untuk melihatnya beraksi):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Terlalu malas untuk menyalin / menempel? Saya suka itu. Ini demo 💻
Terlalu malas untuk mengklik? :O
Catatan : Matikan Adblock Plus / uBlock & co sebelum menjalankan demo .. jika tidak, itu tidak akan berfungsi.
Saya tidak ada hubungannya dengan tim IPify. Saya hanya berpikir itu sangat keren bahwa seseorang akan memberikan layanan seperti itu untuk kebaikan umum.
Anda dapat menggunakan layanan saya http://ipinfo.io untuk ini, yang akan memberi Anda IP klien, nama host, informasi geolokasi, dan pemilik jaringan. Berikut adalah contoh sederhana yang mencatat IP:
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
Berikut adalah contoh JSFiddle yang lebih terperinci yang juga mencetak informasi respons lengkap, sehingga Anda dapat melihat semua detail yang tersedia: http://jsfiddle.net/zK5FN/2/
http://ipinfo.io
ke //ipinfo.io
atau https
Sertakan kode ini di halaman Anda: <script type="text/javascript" src="http://l2.io/ip.js"></script>
lebih banyak dokumen di sini
Saya akan mengatakan Chad dan Malta memiliki jawaban yang bagus. Namun, mereka rumit. Jadi saya menyarankan kode ini yang saya temukan dari iklan dengan plugin negara
<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>
Tidak ajax. Javascript sederhana. : D
Jika Anda membuka http://j.maxmind.com/app/geoip.js Anda akan melihat bahwa isinya
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 ''; }
Itu belum benar-benar menjawab pertanyaan karena
http://j.maxmind.com/app/geoip.js tidak mengandung IP (meskipun saya yakin itu menggunakan IP untuk mendapatkan negara).
Tapi sangat mudah untuk membuat skrip PhP yang muncul seperti
function visitorsIP() { return '123.123.123.123'; }
Buat itu. Pakailah http://domainanda.com/anda web.php .
Lalu lakukan
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
Pertanyaannya secara spesifik menyebutkan TIDAK untuk menggunakan skrip pihak ketiga. Tidak ada jalan lain. Javascript tidak dapat mengetahui IP Anda. Tetapi server lain yang dapat diakses melalui javascript dapat berfungsi dengan baik tanpa masalah.
Ada dua interpretasi untuk pertanyaan ini. Kebanyakan orang menafsirkan "IP Klien" berarti Alamat IP Publik yang dilihat server Web di luar LAN dan keluar di Internet. Namun, ini bukan alamat IP komputer klien
Saya membutuhkan alamat IP asli dari komputer yang menjalankan browser yang menampung perangkat lunak JavaScript saya (yang hampir selalu merupakan alamat IP lokal pada LAN yang berada di belakang sesuatu yang lapisan NAT).
Mido memposting jawaban FANTASTIS, di atas, yang tampaknya menjadi satu-satunya jawaban yang benar-benar memberikan alamat IP klien.
Terima kasih untuk itu, Mido!
Namun, fungsi yang disajikan berjalan secara tidak sinkron. Saya harus benar-benar MENGGUNAKAN alamat IP dalam kode saya, dan dengan solusi asinkron, saya mungkin mencoba menggunakan alamat IP sebelum diambil / dipelajari / disimpan. Saya harus bisa menunggu hasil sampai tiba sebelum menggunakannya.
Ini adalah versi "Tunggu" dari fungsi Mido. Saya harap ini membantu orang lain:
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>
Ada pendekatan yang lebih mudah dan gratis yang tidak akan meminta izin pengunjung Anda.
Ini terdiri dari mengirimkan permintaan POST Ajax yang sangat sederhana ke http://freegeoip.net/json . Setelah Anda menerima informasi lokasi Anda, di JSON, Anda bereaksi sesuai dengan memperbarui halaman atau mengarahkan ke yang baru.
Inilah cara Anda mengirimkan permintaan Anda untuk informasi lokasi:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
Yah, saya ngelantur dari pertanyaan, tapi saya punya kebutuhan yang sama hari ini dan meskipun saya tidak dapat menemukan ID dari klien menggunakan Javascript, saya melakukan hal berikut.
Di sisi server: -
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
Menggunakan Javascript
var ip = $get("uip").innerHTML;
Saya menggunakan ASP.Net Ajax, tetapi Anda dapat menggunakan getElementById alih-alih $ get ().
Apa yang terjadi adalah, saya punya elemen div tersembunyi di halaman dengan IP pengguna yang diberikan dari server. Daripada di Javascript saya hanya memuat nilai itu.
Ini mungkin bermanfaat bagi beberapa orang dengan persyaratan yang sama seperti milik Anda (seperti saya sementara saya belum memikirkannya).
Bersulang!
<script>var uip='<%= Request.UserHostAddress %>';</script>
?
Dengan menggunakan Smart-IP.net Geo-IP API . Misalnya, dengan menggunakan jQuery:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Tidak mungkin secara umum kecuali jika Anda menggunakan semacam layanan eksternal.
Dapatkan IP Anda dengan jQuery
Anda bisa mendapatkan alamat IP publik Anda dengan satu baris JS? Ada layanan gratis yang menawarkan ini untuk Anda dan semua permintaan yang perlu Anda lakukan:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
Agar potongan di atas berfungsi, browser Anda harus mendukung CORS (berbagi permintaan lintas-asal). Kalau tidak, pengecualian keamanan akan dilemparkan. Di browser yang lebih lama, Anda dapat menggunakan versi ini, yang menggunakan permintaan JSON-P:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
Anda dapat menggunakan perpustakaan javascript 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
});
Anda juga dapat menggunakan requirejs untuk memuat skrip.
Ini akan memberi Anda alamat IP pengunjung Anda, serta beberapa data tentang lokasinya (negara, kota, dll.). Ini didasarkan pada database geoip maxmind.
Penafian: Saya menulis perpustakaan ini
Javascript / jQuery mendapatkan Alamat IP & Lokasi Klien (Negara, Kota)
Anda hanya perlu menyematkan tag dengan tautan "src" ke server. Server akan mengembalikan "codehelper_ip" sebagai Object / JSON, dan Anda dapat menggunakannya segera.
// 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>
Informasi lebih lanjut di Javascript Detect Real IP Address Plus Country
Jika Anda menggunakan jQUery, Anda dapat mencoba:
console.log(codehelper_ip);
Ini akan menunjukkan kepada Anda informasi lebih lanjut tentang objek yang dikembalikan.
Jika Anda ingin fungsi panggilan balik, silakan coba ini:
// 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>
Layanan panggilan balik Appspot.com tidak tersedia. ipinfo.io tampaknya berfungsi.
Saya melakukan langkah ekstra dan mengambil semua info geo menggunakan AngularJS. (Terima kasih kepada Ricardo) Coba lihat.
<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>
Halaman kerja di sini: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
Saya sangat suka api.ipify.org
karena mendukung HTTP dan HTTPS.
Berikut adalah beberapa contoh untuk mendapatkan IP api.ipify.org
menggunakan jQuery.
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>
Jika Anda tidak menginginkannya di JSON, ada juga respons plaintext atas HTTPS
https://api.ipify.org
Dan ada juga respons plaintext atas HTTP
http://api.ipify.org
Gunakan ipdata.co .
API juga menyediakan data geolokasi dan memiliki 10 titik akhir global yang masing-masing mampu menangani> 800 juta permintaan sehari!
Jawaban ini menggunakan Kunci API 'uji' yang sangat terbatas dan hanya dimaksudkan untuk menguji beberapa panggilan. Daftar untuk Kunci API Gratis Anda sendiri dan dapatkan hingga 1500 permintaan setiap hari untuk pengembangan.
$.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>
Sebenarnya tidak ada cara yang dapat diandalkan untuk mendapatkan alamat IP komputer klien.
Ini melewati beberapa kemungkinan. Kode yang menggunakan Java akan rusak jika pengguna memiliki banyak antarmuka.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Dari melihat jawaban lain di sini, sepertinya Anda mungkin ingin mendapatkan alamat IP publik klien, yang mungkin merupakan alamat router yang mereka gunakan untuk terhubung ke internet. Banyak jawaban lain di sini membicarakannya. Saya akan merekomendasikan membuat dan hosting halaman sisi server Anda sendiri untuk menerima permintaan dan merespons dengan alamat IP alih-alih bergantung pada layanan orang lain yang mungkin atau mungkin tidak terus bekerja.
Saya akan menawarkan metode yang banyak saya gunakan ketika saya ingin menyimpan informasi di halaman html, dan ingin javascript saya membaca informasi tanpa benar-benar harus meneruskan parameter ke javascript. Ini sangat berguna ketika skrip Anda dirujuk secara eksternal, bukan inline.
Namun, itu tidak memenuhi kriteria "tidak ada skrip sisi server". Tetapi jika Anda dapat memasukkan skrip sisi server dalam html Anda, lakukan ini:
Buat elemen label tersembunyi di bagian bawah halaman html Anda, tepat di atas tag badan akhir.
Label Anda akan terlihat seperti ini:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
Pastikan untuk membuat kelas yang dipanggil hiddenlabel
dan mengaturvisibility:hidden
sehingga tidak ada yang benar-benar melihat label. Anda dapat menyimpan banyak hal dengan cara ini, dalam label tersembunyi.
Sekarang, di javascript Anda, untuk mengambil informasi yang disimpan dalam label (dalam hal ini alamat ip klien), Anda dapat melakukan ini:
var ip = document.getElementById("ip").innerHTML;
Sekarang variabel "ip" Anda sama dengan alamat ip. Sekarang Anda dapat meneruskan ip ke permintaan API Anda.
* EDIT 2 TAHUN KEMUDIAN * Dua perbaikan kecil:
Saya rutin menggunakan metode ini, tetapi hubungi label class="data"
, karena, sebenarnya, ini adalah cara untuk menyimpan data. Nama kelas "hiddenlabel" adalah jenis nama yang bodoh.
Modifikasi kedua ada di style sheet, bukannya visibility:hidden
:
.data{
display:none;
}
... adalah cara yang lebih baik untuk melakukannya.
$.getJSON("http://jsonip.com?callback=?", function (data) {
alert("Your ip address: " + data.ip);
});
Coba ini: http://httpbin.org/ip (atau https://httpbin.org/ip )
Contoh dengan https:
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
Sumber: http://httpbin.org/
Pertama-tama jawaban aktual : Tidak mungkin untuk menggunakan kode yang dieksekusi murni sisi klien untuk mengetahui alamat IP Anda sendiri.
Namun Anda bisa melakukan GET ke arah https://api.muctool.de/whois dan menerima sesuatu seperti mendapatkan alamat IP klien
{
"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
}
Anda bisa melakukan ini sepenuhnya sisi klien dan sebagian besar dalam JavaScript dengan menggunakan objek Flash yang dapat dipanggil js. Flash dapat mengakses alamat IP mesin lokal yang mungkin tidak terlalu berguna.
var call_to = "http://smart-ip.net/geoip-json?callback=?";
$.getJSON(call_to, function(data){
alert(data.host);
});
data.host
adalah alamat ip. Cukup panggil ini dari browser Anda.
http://smart-ip.net/geoip-json?callback=?
[Tanpa tanda kutip] dan dapatkan ip.
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });