Antworten:
Ich würde einen Webdienst verwenden, der JSON zurückgeben kann (zusammen mit jQuery, um die Dinge einfacher zu machen). Nachfolgend finden Sie alle kostenlosen aktiven IP-Suchdienste, die ich finden konnte, und die Informationen, die sie zurückgeben. Wenn Sie mehr wissen, fügen Sie bitte einen Kommentar hinzu und ich werde diese Antwort aktualisieren.
Probieren Sie es aus: 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)
})
Kehrt zurück:
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
Einschränkungen:
Probieren Sie es aus: http://api.db-ip.com/addrinfo?api_key= < Ihr API-Schlüssel > & addr = < IP-Adresse >
Kehrt zurück:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Einschränkungen:
Probieren Sie es aus: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
}
Einschränkungen:
Probieren Sie es aus: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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
}
Einschränkungen:
Probieren Sie es aus: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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
}
Einschränkungen:
Probieren Sie es aus: https://api.hackertarget.com/geoip/?q= < IP-Adresse >
Kehrt zurück:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Einschränkungen:
Probieren Sie es aus: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
}
Einschränkungen:
Probieren Sie es aus: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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": ""
}
Einschränkungen:
Probieren Sie es aus: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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
}
}
Einschränkungen:
Probieren Sie es aus: https://ipfind.co/me?auth= < Ihr API-Schlüssel >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
]
}
Einschränkungen:
Probieren Sie es aus: https://api.ipgeolocation.io/ipgeo?apiKey= < Ihr API-Schlüssel >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
}
}
Einschränkungen:
Probieren Sie es aus: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"ip": "116.12.250.1"
}
Einschränkungen:
Probieren Sie es aus: https://api.ipinfodb.com/v3/ip-city/?key= < Ihr API-Schlüssel > & 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));
});
Kehrt zurück:
{
"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"
}
Einschränkungen:
Probieren Sie es aus: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
}
Einschränkungen:
Probieren Sie es aus: https://api.ipregistry.co/?key= < Ihr API-Schlüssel >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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
}
}
Einschränkungen:
Probieren Sie es aus: http://api.ipstack.com/ < IP-Adresse >? Access_key = <Ihr API-Schlüssel>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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
}
}
Einschränkungen:
Probieren Sie es aus: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Einschränkungen:
Probieren Sie es aus: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"ip": "116.12.250.1"
}
Einschränkungen:
Probieren Sie es aus: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Kehrt zurück:
{
"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"
}
Einschränkungen:
Da dies alles kostenlose Dienste sind, kann Ihr Kilometerstand in Bezug auf die Überschreitung von Kontingent und Betriebszeit variieren und wer weiß, wann / ob sie später offline geschaltet werden (Exponat A: Telize ). Die meisten dieser Dienste bieten auch eine kostenpflichtige Stufe, falls Sie weitere Funktionen wie SSL-Unterstützung wünschen.
Wie skobaljic in den Kommentaren unten feststellte, sind die Anforderungsquoten größtenteils akademisch, da dies clientseitig geschieht und die meisten Endbenutzer das Kontingent niemals überschreiten.
AKTUALISIERUNG
Letztes Update
Diese Lösung würde nicht mehr funktionieren, da Browser das Webrtc-Leck beheben: Weitere Informationen hierzu finden Sie in der folgenden Frage: RTCIceCandidate gibt keine IP mehr zurück
Update : Ich wollte immer eine min / uglified-Version des Codes erstellen, daher hier ein ES6-Promise-Code:
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))
Hinweis: Dieser neue minimierte Code gibt nur eine einzige IP zurück, wenn Sie alle IPs des Benutzers (die möglicherweise mehr von seinem Netzwerk abhängen) verwenden möchten. Verwenden Sie den Originalcode ...
Dank WebRTC ist es sehr einfach, lokale IP-Adressen in von WebRTC unterstützten Browsern abzurufen (zumindest vorerst). Ich habe den Quellcode geändert, die Zeilen reduziert und keine Betäubungsanforderungen gestellt, da Sie nur die lokale IP und nicht die öffentliche IP möchten. Der folgende Code funktioniert in den neuesten Versionen von Firefox und Chrome. Führen Sie einfach das Snippet aus und überprüfen Sie es selbst:
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>
Was hier passiert, ist, dass wir eine Dummy-Peer-Verbindung herstellen und dass der Remote-Peer uns kontaktiert, tauschen wir im Allgemeinen Eiskandidaten miteinander aus. Beim Lesen der Eiskandidaten (aus der lokalen Sitzungsbeschreibung und onIceCandidateEvent) können wir die IP des Benutzers ermitteln.
wo ich Code von -> Quelle genommen habe
Sie können es über die Serverseite mit JSONP weiterleiten
Und während ich googelte, um eine zu finden, fand ich sie hier auf SO Kann ich eine DNS-Suche (Hostname zu IP-Adresse) mit clientseitigem Javascript durchführen?
<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>
Hinweis: Die telize.com-API wurde zum 15. November 2015 endgültig heruntergefahren .
Error Over Quota This application is temporarily over its serving quota. Please try again later.
Die meisten Antworten hier "umgehen" die Notwendigkeit von serverseitigem Code, indem sie ... den Server eines anderen treffen. Dies ist eine absolut gültige Technik, es sei denn, Sie müssen die IP-Adresse tatsächlich abrufen , ohne einen Server zu treffen.
Traditionell war dies ohne ein Plugin nicht möglich (und selbst dann würden Sie wahrscheinlich die falsche IP-Adresse erhalten, wenn Sie sich hinter einem NAT-Router befinden), aber mit dem Aufkommen von WebRTC ist dies tatsächlich möglich. . Wenn Sie Targeting - Browser , dass die Unterstützung WebRTC (aktuell: Firefox, Chrome und Opera).
Bitte lesen Sie die Antwort von mido, um zu erfahren, wie Sie nützliche Web- IP-Adressen mit WebRTC abrufen können.
Sie können einen Ajax-Aufruf an hostip.info oder einen ähnlichen Dienst senden ...
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;
}
Als Bonus werden Geolokalisierungsinformationen im selben Anruf zurückgegeben.
Versuche dies
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
ODER
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
Das kannst du nicht. Sie müssten einen Server fragen.
Überprüfen Sie http://www.ipify.org/
Nach ihnen:
- Sie können es unbegrenzt verwenden (selbst wenn Sie Millionen von Anfragen pro Minute ausführen).
- ipify ist vollständig Open Source (siehe GitHub-Repository ).
Hier ist ein funktionierendes JS-Beispiel (anstatt sich zu fragen, warum diese Antwort so wenige Stimmen hat, versuchen Sie es selbst, um sie in Aktion zu sehen):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Zu faul zum Kopieren / Einfügen? Ich mag das. Hier ist eine 💻 Demo
Zu faul zum Klicken? :O
Hinweis : Schalten Sie Adblock Plus / uBlock & Co aus, bevor Sie die Demo ausführen. Andernfalls funktioniert es einfach nicht.
Ich habe nichts mit dem IPify-Team zu tun. Ich finde es einfach lächerlich cool, dass jemand einen solchen Service für das Allgemeinwohl anbietet.
Sie können hierfür meinen Dienst http://ipinfo.io verwenden , der Ihnen die Client-IP, den Hostnamen, die Geolocation-Informationen und den Netzwerkbesitzer angibt. Hier ist ein einfaches Beispiel, das die IP protokolliert:
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
Hier ist ein detaillierteres JSFiddle-Beispiel, in dem auch die vollständigen Antwortinformationen ausgedruckt werden, sodass Sie alle verfügbaren Details sehen können: http://jsfiddle.net/zK5FN/2/
http://ipinfo.io
zu //ipinfo.io
oder https
Fügen Sie diesen Code in Ihre Seite ein: <script type="text/javascript" src="http://l2.io/ip.js"></script>
mehr doc hier
Ich würde sagen, Tschad und Malta haben eine großartige Antwort. Ihre sind jedoch kompliziert. Daher schlage ich diesen Code vor, den ich aus Anzeigen nach Länder-Plugins gefunden habe
<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>
Kein Ajax. Einfach nur Javascripts. : D.
Wenn Sie zu http://j.maxmind.com/app/geoip.js gehen, werden Sie sehen, dass es enthält
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 ''; }
Es beantwortet die Frage noch nicht wirklich, weil
http://j.maxmind.com/app/geoip.js enthält keine IP (obwohl ich wette, dass es die IP verwendet, um das Land zu erhalten).
Aber es ist so einfach, ein PhP-Skript zu erstellen, das so etwas wie Pop enthält
function visitorsIP() { return '123.123.123.123'; }
Das machen. Setzen Sie auf http://yourdomain.com/yourip.php .
Dann mach
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
In der Frage wird ausdrücklich erwähnt, dass KEIN Skript von Drittanbietern verwendet werden darf. Es geht nicht anders. Javascript kann Ihre IP nicht kennen. Aber auch andere Server, auf die über Javascript zugegriffen werden kann, funktionieren problemlos.
Zu dieser Frage gibt es zwei Interpretationen. Die meisten Leute interpretierten "Client-IP" als die öffentliche IP-Adresse, die Webserver außerhalb des LAN und im Internet sehen. Dies ist jedoch in den meisten Fällen nicht die IP-Adresse des Client-Computers
Ich benötigte die tatsächliche IP-Adresse des Computers, auf dem der Browser ausgeführt wird, in dem meine JavaScript-Software gehostet wird (dies ist fast immer eine lokale IP-Adresse in einem LAN, das sich hinter einer NAT-Schicht befindet).
Mido hat oben eine FANTASTISCHE Antwort gepostet, die anscheinend die einzige Antwort ist, die wirklich die IP-Adresse des Clients angegeben hat.
Danke dafür, Mido!
Die dargestellte Funktion wird jedoch asynchron ausgeführt. Ich muss die IP-Adresse in meinem Code tatsächlich VERWENDEN. Bei einer asynchronen Lösung kann ich versuchen, die IP-Adresse zu verwenden, bevor sie abgerufen / gelernt / gespeichert wird. Ich musste warten können, bis die Ergebnisse eintrafen, bevor ich sie verwenden konnte.
Hier ist eine "Waitable" -Version von Midos Funktion. Ich hoffe es hilft jemand anderem:
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>
Es gibt einen einfacheren und kostenlosen Ansatz, bei dem Ihr Besucher nicht um Erlaubnis gebeten wird.
Es besteht darin, eine sehr einfache Ajax-POST-Anfrage an http://freegeoip.net/json zu senden . Sobald Sie Ihre Standortinformationen in JSON erhalten haben, reagieren Sie entsprechend, indem Sie die Seite aktualisieren oder auf eine neue umleiten.
So senden Sie Ihre Anfrage nach Standortinformationen:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
Nun, ich schweife von der Frage ab, aber ich hatte heute ein ähnliches Bedürfnis und obwohl ich die ID des Kunden mit Javascript nicht finden konnte, habe ich Folgendes getan.
Auf der Serverseite: -
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
Verwenden von Javascript
var ip = $get("uip").innerHTML;
Ich verwende ASP.Net Ajax, aber Sie können getElementById anstelle von $ get () verwenden.
Was passiert ist, ich habe ein verstecktes div-Element auf der Seite mit der vom Server gerenderten IP des Benutzers. Als in Javascript lade ich nur diesen Wert.
Dies könnte für einige Leute mit ähnlichen Anforderungen wie Ihre hilfreich sein (wie ich, obwohl ich das nicht herausgefunden hatte).
Prost!
<script>var uip='<%= Request.UserHostAddress %>';</script>
?
Bei Verwendung der Smart-IP.net Geo-IP-API . Beispiel: Verwenden von jQuery:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Im Allgemeinen nicht möglich, es sei denn, Sie nutzen einen externen Dienst.
Holen Sie sich Ihre IP mit jQuery
Sie können Ihre öffentliche IP-Adresse mit einer Zeile von JS erhalten? Es gibt einen kostenlosen Service, der dies für Sie anbietet, und eine Get-Anfrage ist alles, was Sie tun müssen:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
Damit das obige Snippet funktioniert, muss Ihr Browser CORS (Cross-Origin Request Sharing) unterstützen. Andernfalls würde eine Sicherheitsausnahme ausgelöst. In älteren Browsern können Sie diese Version verwenden, die eine JSON-P-Anforderung verwendet:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
Sie können die Javascript-Bibliothek userinfo.io verwenden.
<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
});
Sie können das Skript auch mit requirejs laden.
Sie erhalten die IP-Adresse Ihres Besuchers sowie einige Daten zu seinem Standort (Land, Stadt usw.). Es basiert auf der Maxmind Geoip Datenbank.
Haftungsausschluss: Ich habe diese Bibliothek geschrieben
Javascript / jQuery erhalten die IP-Adresse und den Standort des Kunden (Land, Stadt)
Sie müssen nur ein Tag mit dem Link "src" in den Server einbetten. Der Server gibt "codehelper_ip" als Objekt / JSON zurück und Sie können es sofort verwenden.
// 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>
Weitere Informationen finden Sie unter Javascript Detect Real IP Address Plus Country
Wenn Sie jQUery verwenden, können Sie Folgendes versuchen:
console.log(codehelper_ip);
Es werden Ihnen weitere Informationen zum zurückgegebenen Objekt angezeigt.
Wenn Sie eine Rückruffunktion wünschen, versuchen Sie Folgendes:
// 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>
Der Rückrufdienst von Appspot.com ist nicht verfügbar. ipinfo.io scheint zu funktionieren.
Ich habe einen zusätzlichen Schritt gemacht und alle Geoinformationen mit AngularJS abgerufen. (Danke an Ricardo) Schau es dir an.
<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>
Arbeitsseite hier: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
Ich mag api.ipify.org
es wirklich, weil es sowohl HTTP als auch HTTPS unterstützt.
Hier sind einige Beispiele für das Abrufen der IP mithilfe api.ipify.org
von 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>
Wenn Sie es in JSON nicht möchten, gibt es auch eine Klartextantwort über HTTPS
https://api.ipify.org
Und es gibt auch eine Klartextantwort über HTTP
http://api.ipify.org
Verwenden Sie ipdata.co .
Die API bietet auch Geolokalisierungsdaten und verfügt über 10 globale Endpunkte, die jeweils> 800 Millionen Anfragen pro Tag verarbeiten können!
Diese Antwort verwendet einen 'Test'-API-Schlüssel, der sehr begrenzt ist und nur zum Testen einiger Aufrufe gedacht ist. Melden Sie sich für Ihren eigenen kostenlosen API-Schlüssel an und erhalten Sie täglich bis zu 1500 Anfragen für die Entwicklung.
$.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>
Es gibt keine wirklich zuverlässige Möglichkeit, die IP-Adresse des Client-Computers abzurufen.
Dies geht durch einige der Möglichkeiten. Der Code, der Java verwendet, wird unterbrochen, wenn der Benutzer über mehrere Schnittstellen verfügt.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Wenn Sie sich die anderen Antworten hier ansehen, möchten Sie möglicherweise die öffentliche IP-Adresse des Clients abrufen, die wahrscheinlich die Adresse des Routers ist, mit dem er eine Verbindung zum Internet herstellt. Viele der anderen Antworten hier sprechen darüber. Ich würde empfehlen, eine eigene serverseitige Seite zu erstellen und zu hosten, um die Anfrage zu empfangen und mit der IP-Adresse zu antworten, anstatt von dem Dienst eines anderen abhängig zu sein, der möglicherweise weiterhin funktioniert oder nicht.
Ich werde eine Methode anbieten, die ich häufig verwende, wenn ich Informationen auf der HTML-Seite speichern möchte und mein Javascript Informationen lesen soll, ohne tatsächlich Parameter an das Javascript übergeben zu müssen. Dies ist besonders nützlich, wenn auf Ihr Skript extern und nicht inline verwiesen wird.
Es erfüllt jedoch nicht das Kriterium "kein serverseitiges Skript". Wenn Sie jedoch serverseitiges Scripting in Ihr HTML aufnehmen können, gehen Sie folgendermaßen vor:
Erstellen Sie versteckte Beschriftungselemente am unteren Rand Ihrer HTML-Seite direkt über dem Endkörper-Tag.
Ihr Etikett sieht folgendermaßen aus:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
Stellen Sie sicher, dass eine Klasse aufgerufen hiddenlabel
und so eingestellt wird, visibility:hidden
dass niemand das Etikett tatsächlich sieht. Auf diese Weise können Sie viele Dinge in versteckten Etiketten speichern.
In Ihrem Javascript können Sie nun die auf dem Etikett gespeicherten Informationen (in diesem Fall die IP-Adresse des Clients) abrufen:
var ip = document.getElementById("ip").innerHTML;
Jetzt entspricht Ihre Variable "ip" der IP-Adresse. Jetzt können Sie die IP an Ihre API-Anfrage übergeben.
* 2 JAHRE SPÄTER BEARBEITEN * Zwei kleinere Verbesserungen :
Ich verwende diese Methode routinemäßig, rufe aber das Label auf class="data"
, da es tatsächlich eine Möglichkeit ist, Daten zu speichern. Der Klassenname "hiddenlabel" ist eine Art dummer Name.
Die zweite Änderung befindet sich im Stylesheet anstelle von visibility:hidden
:
.data{
display:none;
}
... ist der bessere Weg, es zu tun.
$.getJSON("http://jsonip.com?callback=?", function (data) {
alert("Your ip address: " + data.ip);
});
Versuchen Sie Folgendes : http://httpbin.org/ip (oder https://httpbin.org/ip )
Beispiel mit https:
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
Quelle: http://httpbin.org/
Zuallererst die eigentliche Antwort : Es ist nicht möglich, rein clientseitig ausgeführten Code zu verwenden, um Ihre eigene IP-Adresse herauszufinden.
Sie können jedoch einfach ein GET in Richtung https://api.muctool.de/whois durchführen und so etwas wie die IP-Adresse eines Clients erhalten
{
"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
}
Sie können dies vollständig clientseitig und meistens in JavaScript tun, indem Sie ein Flash-Objekt verwenden, das die js aufrufen können. Flash kann auf die IP-Adresse des lokalen Computers zugreifen, was möglicherweise nicht sehr nützlich ist.
var call_to = "http://smart-ip.net/geoip-json?callback=?";
$.getJSON(call_to, function(data){
alert(data.host);
});
data.host
ist die IP-Adresse. Rufen Sie dies einfach über Ihren Browser auf.
http://smart-ip.net/geoip-json?callback=?
[Ohne Anführungszeichen] und bekomme die IP.
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });