Ich muss irgendwie die IP-Adresse des Clients mit JavaScript abrufen. Kein serverseitiger Code, nicht einmal SSI.
Ich bin jedoch nicht gegen die Verwendung eines kostenlosen Skripts / Dienstes von Drittanbietern.
quelle
Ich muss irgendwie die IP-Adresse des Clients mit JavaScript abrufen. Kein serverseitiger Code, nicht einmal SSI.
Ich bin jedoch nicht gegen die Verwendung eines kostenlosen Skripts / Dienstes von Drittanbietern.
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
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });
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:
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:
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
quelle
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?
quelle
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.
quelle
Sie können einen Ajax-Aufruf an hostip.info oder einen ähnlichen Dienst senden ...
Als Bonus werden Geolokalisierungsinformationen im selben Anruf zurückgegeben.
quelle
ODER
Geige
quelle
Das kannst du nicht. Sie müssten einen Server fragen.
quelle
Suchen Sie nicht weiter
Überprüfen Sie http://www.ipify.org/
Nach ihnen:
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):
Zu faul zum Kopieren / Einfügen? Ich mag das. Hier ist eine 💻 Demo
Zu faul zum Klicken?
:O
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.
quelle
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:
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/
quelle
http://ipinfo.io
zu//ipinfo.io
oder httpsFügen Sie diesen Code in Ihre Seite ein:
<script type="text/javascript" src="http://l2.io/ip.js"></script>
mehr doc hier
quelle
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
Kein Ajax. Einfach nur Javascripts. : D.
Wenn Sie zu http://j.maxmind.com/app/geoip.js gehen, werden Sie sehen, dass es enthält
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
Das machen. Setzen Sie auf http://yourdomain.com/yourip.php .
Dann mach
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.
quelle
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:
quelle
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:
quelle
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: -
Verwenden von Javascript
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!
quelle
<script>var uip='<%= Request.UserHostAddress %>';</script>
?Bei Verwendung der Smart-IP.net Geo-IP-API . Beispiel: Verwenden von jQuery:
quelle
Im Allgemeinen nicht möglich, es sei denn, Sie nutzen einen externen Dienst.
quelle
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:
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:
quelle
Sie können die Javascript-Bibliothek userinfo.io verwenden.
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
quelle
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.
Weitere Informationen finden Sie unter Javascript Detect Real IP Address Plus Country
Wenn Sie jQUery verwenden, können Sie Folgendes versuchen:
Es werden Ihnen weitere Informationen zum zurückgegebenen Objekt angezeigt.
Wenn Sie eine Rückruffunktion wünschen, versuchen Sie Folgendes:
quelle
language
Attribut,type="text/javascript"
sondern stattdessen mehr auf MDNDer 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.
Arbeitsseite hier: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
quelle
Wenn Sie immer eine Datei einfügen, können Sie einen einfachen Ajax-Vorgang ausführen:
Und
ajax.getIp.php
wäre das:quelle
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.JSON-Format über HTTPS
JSON-Format über HTTP
Textformat über HTTPS
Wenn Sie es in JSON nicht möchten, gibt es auch eine Klartextantwort über HTTPS
Textformat über HTTP
Und es gibt auch eine Klartextantwort über HTTP
quelle
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!
quelle
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.
quelle
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:
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:
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
:... ist der bessere Weg, es zu tun.
quelle
quelle
Versuchen Sie Folgendes : http://httpbin.org/ip (oder https://httpbin.org/ip )
Beispiel mit https:
Quelle: http://httpbin.org/
quelle
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
quelle
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.
quelle
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.quelle