<p>πρέπει να ανακτήσω κάπως τη διεύθυνση ip του πελάτη χρησιμοποιώντας javascript. κανένας κώδικας πλευράς διακομιστή, ούτε καν ssi.</p><p>ωστόσο, δεν είμαι ενάντια στη χρήση ενός δωρεάν script/υπηρεσίας τρίτου μέρους.</p>
πώς να αποκτήσετε τη διεύθυνση ip του πελάτη χρησιμοποιώντας το javascript;
<p>θα χρησιμοποιούσα μια υπηρεσία web που μπορεί να επιστρέψει το json (μαζί με το jquery για να κάνει τα πράγματα απλούστερα). παρακάτω είναι όλες οι δωρεάν <em> ενεργές </em> υπηρεσίες αναζήτησης ip που θα μπορούσα να βρω και τις πληροφορίες που επιστρέφουν. αν γνωρίζετε πια, παρακαλώ προσθέστε ένα σχόλιο και θα ενημερώσω αυτήν την απάντηση.</p><hr><h2> <a href="https://db-ip.com">db-ιρ</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://api.db-ip.com/addrinfo?api\_key=bc2ab711d740d7cfa6fcb0ca8822cb327e38844f&amp;addr=116.12.250.1">http://api.db-ip.com/addrinfo?api\_key=&lt;<em> το κλειδί api </em>&gt; &amp; addr = &lt;<em> διεύθυνση ip </em>&gt;</a> </p><p>επιστροφές:</p><pre><code>{ "address": "116.12.250.1", "country": "sg", "stateprov": "central singapore", "city": "singapore" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>2.500 αιτήσεις ανά ημέρα</li> <li>δεν υποστηρίζει επανάκλησεις jsonp</li> <li>απαιτεί παράμετρο διεύθυνσης ip</li> <li>απαιτεί μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να πάρει το κλειδί api</li> <li>δεν υπάρχει ssl (https) με το δωρεάν σχέδιο</li> </ul><hr><h2> <a href="http://geobytes.com">geobytes</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://gd.geobytes.com/getcitydetails">http://gd.geobytes.com/getcitydetails</a> </p><pre><code>$.getjson('http://gd.geobytes.com/getcitydetails?callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>16.384 αιτήσεις ανά ώρα</li> <li>δεν υπάρχει ssl (https) με το δωρεάν σχέδιο</li> <li>μπορεί να επιστρέψει σε λάθος θέση (είμαι στη σιγκαπούρη, όχι στη σαουδική αραβία)</li> </ul><hr><h2> <a href="https://geoiplookup.io">geoiplookup.io</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://json.geoiplookup.io/api">https://json.geoiplookup.io/api</a> </p><pre><code>$.getjson('https://json.geoiplookup.io/api?callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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 } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>αγνωστος</li> </ul><hr><h2> <a href="http://www.geoplugin.com">geoplugin</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://www.geoplugin.net/json.gp">http://www.geoplugin.net/json.gp</a> </p><pre><code>$.getjson('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "geoplugin\_request": "116.12.250.1", "geoplugin\_status": 200, "geoplugin\_credit": "some of the returned data includes geolite data created by maxmind, available from &lt;a href=\\'http://www.maxmind.com\\'&gt;http://www.maxmind.com&lt;/a&gt;.", "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": "&amp;#36;", "geoplugin\_currencysymbol\_utf8": "$", "geoplugin\_currencyconverter": 1.4239 } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>120 αιτήσεις ανά λεπτό</li> <li>δεν υπάρχει ssl (https) με το δωρεάν σχέδιο</li> </ul><hr><h2> <a href="https://hackertarget.com/geoip-ip-location-lookup/">στόχος χάκερ</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://api.hackertarget.com/geoip/?q=116.12.250.1">https://api.hackertarget.com/geoip/?q=&lt;<em>ip διεύθυνση </em>&gt;</a> </p><p>επιστροφές:</p><pre class="lang-none prettyprint-override"><code>ip address: 116.12.250.1 country: sg state: n/a city: singapore latitude: 1.293100 longitude: 103.855797 </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>50 αιτήσεις ανά ημέρα</li> <li>δεν υποστηρίζει επανάκλησεις jsonp</li> <li>απαιτεί παράμετρο διεύθυνσης ip</li> <li>επιστρέφει απλό κείμενο</li> </ul><hr><h2> <a href="https://ipapi.co">ipapi.co</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://ipapi.co/json/">https://ipapi.co/json/</a> </p><pre><code>$.getjson('https://ipapi.co/json/', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>1.000 αιτήσεις ανά ημέρα</li> <li>απαιτεί ssl (https)</li> </ul><hr><h2> <a href="http://ip-api.com">ip-api.com</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://ip-api.com/json">http://ip-api.com/json</a> </p><pre><code>$.getjson('http://ip-api.com/json?callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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": "" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>150 αιτήσεις ανά λεπτό</li> <li>δεν υπάρχει ssl (https) με το δωρεάν σχέδιο</li> </ul><hr><h2> <a href="https://ipdata.co">ipdata.co</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://api.ipdata.co">https://api.ipdata.co</a> </p><pre><code>$.getjson('https://api.ipdata.co', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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 } } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>1.500 αιτήσεις ανά ημέρα</li> <li>απαιτεί μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να πάρει το κλειδί api</li> <li>απαιτεί ssl (https)</li> </ul><hr><h2> <a href="https://ipfind.co">ip εύρεση</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://ipfind.co/me?auth=50e887ce-e3bb-4f00-a9b9-667597db5539">https://ipfind.co/me?auth=&lt;<em> το κλειδί api </em>&gt;</a> </p><pre><code>$.getjson('https://ipfind.co/me?auth=&lt;your\_api\_key&gt;', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" ] } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>300 αιτήσεις ανά ημέρα</li> <li>απαιτεί εγγραφή για να πάρει το κλειδί api</li> </ul><hr><h2> <a href="https://ipgeolocation.io">ipgeolocation</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://api.ipgeolocation.io/ipgeo?apikey=a759dab4af1f462496dda90b3575f7c7">https://api.ipgeolocation.io/ipgeo?apikey=&lt;<em> το κλειδί api </em>&gt;</a> </p><pre><code>$.getjson('https://api.ipgeolocation.io/ipgeo?apikey=&lt;your\_api\_key&gt;', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>50.000 αιτήσεις ανά μήνα</li> <li>απαιτεί εγγραφή για να πάρει το κλειδί api</li> </ul><hr><h2> <a href="https://www.ipify.org">ipify</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://api.ipify.org/?format=json">https://api.ipify.org/?format=json</a> </p><pre><code>$.getjson('https://api.ipify.org?format=jsonp&amp;callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "ip": "116.12.250.1" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>none</li> </ul><hr><h2> <a href="http://ipinfodb.com">ipinfodb</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://api.ipinfodb.com/v3/ip-city/?key=25864308b6a77fd90f8bf04b3021a48c1f2fb302a676dd3809054bc1b07f5b42&amp;format=json">https://api.ipinfodb.com/v3/ip-city/?key=&lt;<em> το κλειδί api </em> &gt; &amp; format = json</a> </p><pre><code>$.getjson('https://api.ipinfodb.com/v3/ip-city/?key=&lt;your\_api\_key&gt;&amp;format=json&amp;callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>δύο αιτήσεις ανά δευτερόλεπτο</li> <li>απαιτεί εγγραφή για να πάρει το κλειδί api</li> </ul><hr><h2> <a href="https://ipinfo.io">ipinfo.io</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://ipinfo.io/json">https://ipinfo.io/json</a> </p><pre><code>$.getjson('https://ipinfo.io/json', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>1.000 αιτήσεις ανά ημέρα</li> </ul><hr><h2> <a href="https://ipstack.com">ipstack</a> (πρώην freegeoip.net)</h2><p><strong> δοκιμάστε το: </strong> <a href="http://api.ipstack.com/116.12.250.1?access\_key=7d558868069cc34f545d822af056be3c">http://api.ipstack.com/&lt;<em>ip διεύθυνση </em>&gt;? access\_key = <em> &lt; το κλειδί api&gt; </em></a> </p><pre><code>$.getjson('http://api.ipstack.com/&lt;ip\_address&gt;?access\_key=&lt;your\_api\_key&gt;', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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 } } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>10.000 αιτήσεις ανά μήνα</li> <li>απαιτεί παράμετρο διεύθυνσης ip</li> <li>απαιτεί εγγραφή για να πάρει το κλειδί api</li> <li>δεν υπάρχει ssl (https) με το δωρεάν σχέδιο</li> </ul><hr><h2> <a href="http://getjsonip.com">jsonip.com</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://jsonip.com">https://jsonip.com</a> </p><pre><code>$.getjson('https://jsonip.com/?callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "ip": "116.12.250.1", "about": "/about", "pro!": "http://getjsonip.com", "reject-fascism": "liberal america will prevail" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>η απάντηση περιλαμβάνει upsell και πολιτική</li> </ul><hr><h2> <a href="http://www.jsontest.com">δοκιμή json</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://ip.jsontest.com/">http://ip.jsontest.com/</a> </p><pre><code>$.getjson('http://ip.jsontest.com/?callback=?', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "ip": "116.12.250.1" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>δεν υπάρχει ssl (https)</li> <li>πηγαίνει πολύ (πάνω από την ποσόστωση), οπότε δεν θα το χρησιμοποιούσα για παραγωγή</li> <li>επιστρέφει τη διεύθυνση ipv6 αν έχετε ένα, το οποίο μπορεί να μην είναι αυτό που θέλετε</li> </ul><hr><h2> <a href="http://geoip.nekudo.com">nekudo</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="https://geoip.nekudo.com/api">https://geoip.nekudo.com/api</a> </p><pre><code>$.getjson('https://geoip.nekudo.com/api', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "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" } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>αποκλεισμένοι από αποκλειστές διαφημίσεων χρησιμοποιώντας τη λίστα easyprivacy</li> </ul><hr><h2> <a href="http://www.stupidwebtools.com">ηλίθιες εργαλεία ιστού</a> </h2><p><strong> δοκιμάστε το: </strong> <a href="http://www.stupidwebtools.com/api/my\_ip.json">http://www.stupidwebtools.com/api/my\_ip.json</a> </p><pre><code>$.getjson('http://www.stupidwebtools.com/api/my\_ip.json', function(data) { console.log(json.stringify(data, null, 2)); }); </code></pre><p>επιστροφές:</p><pre><code>{ "my\_ip": { "ip": "116.12.250.1", "others": [] } } </code></pre><p><strong> περιορισμοί: </strong></p><ul> <li>δεν υπάρχει ssl (https)</li> </ul><hr><p>λάβετε υπόψη ότι, δεδομένου ότι όλες αυτές οι υπηρεσίες είναι δωρεάν, η διανυόμενη απόσταση μπορεί να διαφέρει ως προς την υπέρβαση της ποσόστωσης και του χρόνου λειτουργίας, και ποιος ξέρει πότε/εάν θα μετακινηθεί εκτός δρόμου (έκθεση a: <a href="http://www.telize.com/">telize</a> ). οι περισσότερες από αυτές τις υπηρεσίες προσφέρουν επίσης μια πληρωμένη βαθμίδα σε περίπτωση που θέλετε περισσότερες λειτουργίες όπως υποστήριξη ssl.</p><p>επίσης, όπως επεσήμανε το skobaljic στα σχόλια που ακολουθούν, οι ποσοστώσεις αιτήσεων είναι ως επί το πλείστον ακαδημαϊκές διότι αυτό συμβαίνει στην πλευρά του πελάτη και οι περισσότεροι τελικοί χρήστες δεν θα υπερβούν ποτέ την ποσόστωση.</p><p><strong>ενημερώσεις</strong></p><ul> <li>2/1/2016: αφαίρεσε <a href="http://www.telize.com">τελείωσε</a> (δεν προσφέρει πλέον δωρεάν σχέδιο)</li> <li>4/18/2016: αφαίρεση <a href="http://freegeoip.net">freegeoip.net</a> (εκτός λειτουργίας)</li> <li>4/26/2016: προστέθηκε <a href="https://db-ip.com">db-ip</a> </li> <li>4/26/2016: προστέθηκε <a href="https://hackertarget.com/geoip-ip-location-lookup/">στόχος χάκερ</a> </li> <li>7/6/2016: επαναφορά <a href="http://freegeoip.net">freegeoip.net</a> </li> <li>7/6/2016: αφαίρεση <a href="http://ip-json.rhcloud.com">ip-json.rhcloud.com</a> (νεκρός σύνδεσμος)</li> <li>12/21/2016: αφαίρεση <a href="https://hackertarget.com/geoip-ip-location-lookup/">στόχος χάκερ</a> (εκτός λειτουργίας)</li> <li>2/10/2017: προστέθηκε <a href="http://geoip.nekudo.com">nekudo</a> </li> <li>4/20/2017: προστέθηκε <a href="https://ipapi.co">ipapi.co</a> (χάρη ahmad awais)</li> <li>4/24/2017: επαναφορά <a href="https://hackertarget.com/geoip-ip-location-lookup/">στόχος χάκερ</a> </li> <li>4/24/2017: καταργήθηκε <a href="https://www.snoopi.io">snoopi.io</a> (εκτός λειτουργίας)</li> <li>16/16/2017: προστέθηκε <a href="https://ipfind.co">ip find</a> (χάρη στην jordanc)</li> <li>16/16/2017: ενημερωμένος περιορισμός για δωρεάν σχέδια που δεν υποστηρίζουν ssl</li> <li>9/25/2017: προστέθηκε <a href="http://www.stupidwebtools.com">stupid εργαλεία ιστού</a> (thanks cœur)</li> <li>3/16/2018: προστέθηκε <a href="https://ipdata.co">ipdata.co</a> (χάρη jonathan)</li> <li>4/14/2018: μετονομάσαμε freegeoip.net στο <a href="https://ipstack.com">ipstack</a> (ευχαριστίες ma-maddin)</li> <li>4/16/2018: προστέθηκε <a href="https://geoiplookup.io">geoiplookup.io</a> (χάρη rob waa)</li> <li>6/11/2018: προστέθηκε <a href="https://ipgeolocation.io">ipgeolocation</a> (ευχαριστίες ejaz ahmed)</li> </ul>
<p><strong>ενημέρωση</strong>: πάντα ήθελα να κάνω μια min/uglified έκδοση του κώδικα, οπότε εδώ είναι ένας κώδικας es6 promise:</p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>var findip = new promise(r=&gt;{var w=window,a=new (w.rtcpeerconnection||w.mozrtcpeerconnection||w.webkitrtcpeerconnection)({iceservers:[]}),b=()=&gt;{};a.createdatachannel("");a.createoffer(c=&gt;a.setlocaldescription(c,b,b),b);a.onicecandidate=c=&gt;{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 =&gt; document.write('your ip: ', ip)).catch(e =&gt; console.error(e))</code></pre></div> </div><p><strong>σημείωση:</strong> αυτός ο νέος κωδικοποιημένος κώδικας θα επέστρεφε μόνο μία ip, αν θέλετε όλες τις διευθύνσεις ip του χρήστη (που μπορεί να εξαρτώνται περισσότερο από το δίκτυό του), χρησιμοποιήστε τον αρχικό κώδικα ...</p><hr><p>χάρη στο <strong>webrtc</strong>, είναι πολύ εύκολο να αποκτήσετε τοπική ip σε browsers που υποστηρίζονται από webrtc (τουλάχιστον για τώρα). έχω τροποποιήσει τον πηγαίο κώδικα, μείωσε τις γραμμές, δεν έκανα αιτήματα αναισθητοποίησης, αφού θέλεις μόνο την τοπική ιρ, όχι την δημόσια ip, ο παρακάτω κώδικας λειτουργεί στα πιο πρόσφατα firefox και chrome, απλά εκτελέστε το απόσπασμα και ελέγξτε μόνοι σας:</p><div class="snippet" data-lang="js" data-hide="false" data-console="false" data-babel="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>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') &lt; 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);</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;h1&gt; demo retrieving client ip using webrtc &lt;/h1&gt;</code></pre></div> </div><p>αυτό που συμβαίνει εδώ είναι ότι δημιουργούμε μια ψεύτικη σύνδεση από ομοτίμους και για να μας έρθει η επαφή με τον απομακρυσμένο συνομηδότη, γενικά ανταλλάσσουμε υποψήφιοι πάγου μεταξύ τους. και διαβάζοντας τους υποψήφιους πάγου (από την τοπική περιγραφή συνόδου και onicecandidateevent) μπορούμε να πούμε την ip του χρήστη.</p><p>όπου πήρα κώδικα από -&gt; <a href="https://github.com/diafygi/webrtc-ips">πηγή</a> </p>
<p>μπορείτε να το μεταφέρετε μέσω διακομιστή με το jsonp</p><p>και ενώ πηγαίνω για να βρω ένα, το βρήκε εδώ στοso <a href="https://stackoverflow.com/questions/102605/can-i-lookup-the-ip-address-of-a-hostname-from-javascript">μπορώ να εκτελέσω μια αναζήτηση dns (όνομα κεντρικού υπολογιστή στη διεύθυνση ip) χρησιμοποιώντας javascript από την πλευρά του πελάτη;</a> </p><pre><code>&lt;script type="application/javascript"&gt; function getip(json){ alert(json.ip); // alerts the ip address } &lt;/script&gt; &lt;script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"&gt;&lt;/script&gt; </code></pre><blockquote> <p><strong> σημείωση: </strong> το api του telize.com έχει μόνιμα <a href="http://www.cambus.net/adventures-in-running-a-free-public-api/">έκλεισε στις 15 νοεμβρίου 2015</a> .</p> </blockquote>
<p>οι περισσότερες απαντήσεις εδώ "δουλεύουν" γύρω από την ανάγκη για κώδικα από την πλευρά του διακομιστή με ... χτύπημα διακομιστή κάποιου άλλου. ποια είναι μια εντελώς έγκυρη τεχνική, εκτός εάν <em> πραγματικά χρειάζεστε </em> για να αποκτήσετε τη διεύθυνση ip χωρίς να χτυπήσετε έναν διακομιστή.</p><p>παραδοσιακά, αυτό δεν ήταν εφικτό χωρίς κάποιο είδος plugin (και έπειτα, πιθανότατα θα λάβατε τη διεύθυνση ip <em> λάθος </em> εάν βρισκόσαστε πίσω από έναnat <em> αν </em> στοχεύετε <a href="http://caniuse.com/#feat=rtcpeerconnection">προγράμματα περιήγησης που υποστηρίζουν webrtc</a> (επί του παρόντος: firefox, chrome και opera).</p><p><strong> <a href="https://stackoverflow.com/questions/391979/get-client-ip-using-just-javascript/32841164#32841164">παρακαλούμε διαβάστε την απάντηση του mido</a> </strong> για λεπτομέρειες σχετικά με τον τρόπο με τον οποίο μπορείτε να ανακτήσετε χρήσιμες διευθύνσεις ip πελάτη χρησιμοποιώντας το webrtc.</p>
<p>μπορείτε να κάνετε μια κλήση ajax στο hostp.info ή μια παρόμοια υπηρεσία ...</p><pre><code>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 &gt;= i; i++) { ipaddress = hostipinfo[i].split(":"); if ( ipaddress[0] == "ip" ) return ipaddress[1]; } return false; } </code></pre><p>ως μπόνους, επιστρέφονται πληροφορίες στην γεωλογική κατανομή στην ίδια κλήση.</p>
<blockquote>δοκιμάστε αυτό</blockquote><pre><code>$.get("http://ipinfo.io", function(response) { alert(response.ip); }, "jsonp"); </code></pre><p>or</p><pre><code>$(document).ready(function () { $.getjson("http://jsonip.com/?callback=?", function (data) { console.log(data); alert(data.ip); }); }); </code></pre><p> <a href="http://jsfiddle.net/rbl3d/79/">fiddle</a> </p>
<h1>κοιτάξτε πάλι</h1><p>ελέγξτε έξω <a href="http://www.ipify.org/">http: //www.ipify.org/</a> </p><p>σύμφωνα με αυτούς:</p><blockquote> <ul> <li>μπορείτε να το χρησιμοποιήσετε <strong>χωρίς όριο</strong> (ακόμα κι αν κάνετε εκατομμύρια αιτήματα ανά λεπτό).</li> <li>το ipify είναι εντελώς ανοιχτό (δείτε το <a href="https://github.com/rdegges/ipify-api">github repository</a> ).</li> </ul> </blockquote><p>ακολουθεί ένα παράδειγμα εργασίας js (αντί να αναρωτιέστε γιατί αυτή η απάντηση έχει τόσο λίγες ψηφοφορίες, δοκιμάστε τον εαυτό σας να το δείτε σε δράση):</p><pre><code>&lt;script&gt; function getip(json) { alert("my public ip address is: " + json.ip); } &lt;/script&gt; &lt;script src="https://api.ipify.org?format=jsonp&amp;callback=getip"&gt;&lt;/script&gt; </code></pre><p>πολύ τεμπέλης για αντιγραφή/επικόλληση; μου αρέσει. <a href="http://jsbin.com/bajubacaju/edit?html,output"><strong>εδώ είναι ένα demo</strong></a> </p><p>πάρα πολύ τεμπέλης για κλικ; <code>:o</code></p><blockquote> <p><strong>σημείωση</strong>: <em> απενεργοποιήστε το adblock plus/ublock &amp; co πριν εκτελέσετε το demo .. διαφορετικά, απλά δεν θα λειτουργήσει. </em></p> </blockquote><p>έχω <em> τίποτα </em> να κάνει με την ομάδα ipify. απλώς πιστεύω ότι είναι γελοία δροσερό ότι κάποιος θα παρέχει μια τέτοια υπηρεσία για το γενικό καλό.</p>
<p>δεν μπορείτε. θα πρέπει να ρωτήσετε έναν διακομιστή.</p>
<p>μπορείτε να χρησιμοποιήσετε την υπηρεσία <a href="http://ipinfo.io">http://ipinfo.io</a> γι 'αυτό, η οποία θα σας δώσει τον πελάτη ip, όνομα κεντρικού υπολογιστή, πληροφορίες γεωγραφικής κατανομής και ιδιοκτήτη δικτύου. εδώ είναι ένα απλό παράδειγμα που καταγράφει την ip:</p><pre><code>$.get("http://ipinfo.io", function(response) { console.log(response.ip); }, "jsonp"); </code></pre><p>εδώ είναι ένα πιο λεπτομερές παράδειγμα jsfiddle που εκτυπώνει επίσης τις πλήρεις πληροφορίες απάντησης, ώστε να μπορείτε να δείτε όλες τις διαθέσιμες λεπτομέρειες: <a href="http://jsfiddle.net/zk5fn/2/">http://jsfiddle.net/zk5fn/2/</a> </p>
<p>συμπεριλάβετε αυτόν τον κώδικα στη σελίδα σας: <code>&lt;script type="text/javascript" src="http://l2.io/ip.js"&gt;&lt;/script&gt;</code></p><p>περισσότερο doc <a href="http://l2.io">εδώ</a> </p>
<p>θα έλεγα ότι το τσαντ και η μάλτα έχουν μεγάλη απάντηση. ωστόσο, η δική τους είναι περίπλοκη. επομένως προτείνω αυτόν τον κώδικα που βρήκα από τις διαφημίσεις ανά χώρα plugin</p><pre><code>&lt;script&gt; &lt;script language="javascript" src="http://j.maxmind.com/app/geoip.js"&gt;&lt;/script&gt; &lt;script language="javascript"&gt; mmjscountrycode = geoip\_country\_code(); mmjscountryname = geoip\_country\_name(); &lt;/script&gt; </code></pre><p><strong> όχι ajax. απλά javascripts. : d </strong></p><p>εάν πηγαίνετε στο <a href="http://j.maxmind.com/app/geoip.js">http://j.maxmind.com/app/geoip.js</a> θα δείτε ότι περιέχει</p><pre><code>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 ''; } </code></pre><p>δεν απαντάει πραγματικά στην ερώτηση ακόμα επειδή</p><p> <a href="http://j.maxmind.com/app/geoip.js">http://j.maxmind.com/app/geoip.js</a> δεν περιέχει το ip (αν και στοιχηματίζω ότι χρησιμοποιεί το ip για να πάρει τη χώρα).</p><p>αλλά είναι τόσο εύκολο να δημιουργήσετε ένα σενάριο php που εμφανίζει κάτι παρόμοιο</p><pre><code>function visitorsip() { return '123.123.123.123'; } </code></pre><p>κάνε αυτό. βάλτε <a href="http://yourdomain.com/yourip.php">http://yourdomain.com/yourip.php</a> .</p><p>τότε κάνε</p><pre><code>&lt;script language="javascript" src="http://yourdomain.com/yourip.php"&gt;&lt;/script&gt; </code></pre><p>η ερώτηση αναφέρει ρητά δεν να χρησιμοποιήσει το σενάριο τρίτου μέρους. δεν υπάρχει κανένας άλλος τρόπος. το javascript δεν μπορεί να γνωρίζει την ip σας. αλλά άλλοι διακομιστές που μπορούν να έχουν πρόσβαση μέσω javascript μπορεί να λειτουργούν εξίσου καλά χωρίς πρόβλημα.</p>
<p>υπάρχουν δύο ερμηνείες σε αυτή την ερώτηση. οι περισσότεροι άνθρωποι ερμήνευσαν την "ip-πελάτη" για να σημάνει τη δημόσια διεύθυνση ip που βλέπει ο διακομιστής εκτός του lan και έξω στο internet. ωστόσο, στις περισσότερες περιπτώσεις, αυτή δεν είναι η διεύθυνση ip του υπολογιστή-πελάτη</p><p>χρειαζόμουν την πραγματική διεύθυνση ip του υπολογιστή που τρέχει το πρόγραμμα περιήγησης που φιλοξενεί το λογισμικό javascript (το οποίο είναι σχεδόν πάντα μια τοπική διεύθυνση ip σε ένα τοπικό δίκτυο που βρίσκεται πίσω από ένα στρώμα nat).</p><p>η mido δημοσίευσε μια φανταστική απάντηση παραπάνω, που φαίνεται να είναι η μόνη απάντηση που πραγματικά παρείχε τη διεύθυνση ip του πελάτη.</p><p>ευχαριστώ γι 'αυτό, mido!</p><p>ωστόσο, η λειτουργία που παρουσιάζεται λειτουργεί ασύγχρονα. πρέπει να χρησιμοποιήσω στην πραγματικότητα τη διεύθυνση ip στον κώδικα μου και με μια ασύγχρονη λύση, ίσως να προσπαθήσω να χρησιμοποιήσω τη διεύθυνση ip πριν να την ανακτήσω/μάθω/αποθηκεύσει. έπρεπε να είμαι σε θέση να περιμένω τα αποτελέσματα να φτάσουν πριν τα χρησιμοποιήσουν.</p><p>εδώ είναι μια "εκκρεμή" έκδοση της λειτουργίας του mido. ελπίζω ότι βοηθά κάποιον άλλο:</p><div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>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') &lt; 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 &amp;&amp; ice.candidate &amp;&amp; ice.candidate.candidate &amp;&amp; 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) } ); </code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;h1&gt;demo "waitable" client ip retrieval using webrtc &lt;/h1&gt;</code></pre></div> </div>
<p>με τη χρήση του smart-ip.net <a href="http://smart-ip.net/geoip-api">geo-ip api</a> . για παράδειγμα, χρησιμοποιώντας το jquery:</p><pre><code>$(document).ready( function() { $.getjson( "http://smart-ip.net/geoip-json?callback=?", function(data){ alert( data.host); } ); }); </code></pre>
<p>υπάρχει μια ευκολότερη και ελεύθερη προσέγγιση που δεν θα ζητήσει από τον επισκέπτη σας για οποιαδήποτε άδεια.</p><p>συνίσταται στην υποβολή ενός πολύ απλού αιτήματος ajax post στο <a href="http://freegeoip.net/json">http://freegeoip.net/json</a> . μόλις λάβετε τις πληροφορίες τοποθεσίας σας, στο json, αντιδράτε αναλόγως ενημερώνοντας τη σελίδα ή ανακατευθυνόμενοι σε μια νέα σελίδα.</p><p>ακολουθεί το πώς υποβάλετε το αίτημά σας για πληροφορίες τοποθεσίας:</p><pre><code>jquery.ajax( { url: '//freegeoip.net/json/', type: 'post', datatype: 'jsonp', success: function(location) { console.log(location) } } ); </code></pre>
<p>λοιπόν, είμαι απόσπαση από την ερώτηση, αλλά είχα μια παρόμοια ανάγκη σήμερα και αν και δεν μπορούσα να βρω το id από τον πελάτη χρησιμοποιώντας javascript, έκανα τα εξής.</p><p>από την πλευρά του διακομιστή: -</p><pre><code>&lt;div style="display:none;visibility:hidden" id="uip"&gt;&lt;%= request.userhostaddress %&gt;&lt;/div&gt; </code></pre><p>χρησιμοποιώντας javascript</p><pre><code>var ip = $get("uip").innerhtml; </code></pre><p>χρησιμοποιώ asp.net ajax, αλλά μπορείτε να χρησιμοποιήσετε το getelementbyid αντί του $ get ().</p><p>αυτό που συμβαίνει είναι ότι έχω ένα κρυμμένο στοιχείο div στη σελίδα με το ip του χρήστη που παρήχθη από το διακομιστή. από τη javascript απλά φορτώνω αυτή την αξία.</p><p>αυτό μπορεί να είναι χρήσιμο σε μερικούς ανθρώπους με παρόμοια απαίτηση όπως η δική σας (όπως και εγώ, ενώ δεν το έχω καταλάβει).</p><p>στην υγειά σας!</p>
<p>δεν είναι γενικά εφικτή αν δεν χρησιμοποιείτε κάποια εξωτερική υπηρεσία.</p>
<p><strong>πάρτε την ip σας με το jquery</strong></p><p>μπορείτε να αποκτήσετε τη δημόσια διεύθυνση ip σας με μια γραμμή js; υπάρχει μια δωρεάν υπηρεσία που προσφέρει αυτό για εσάς και ένα αίτημα λήψης είναι το μόνο που χρειάζεται να κάνετε:</p><pre><code> $.get('http://jsonip.com/', function(r){ console.log(r.ip); }); </code></pre><p>για να λειτουργήσει το παραπάνω απόσπασμα, το πρόγραμμα περιήγησής σας θα πρέπει να υποστηρίζει την κοινή χρήση αιτημάτων cors. διαφορετικά, θα εξαφανιστεί μια εξαίρεση ασφαλείας. σε παλαιότερα προγράμματα περιήγησης, μπορείτε να χρησιμοποιήσετε αυτήν την έκδοση, η οποία χρησιμοποιεί ένα αίτημα json-p:</p><pre><code> $.getjson('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); }); </code></pre>
<p>δεν υπάρχει πραγματικά ένας αξιόπιστος τρόπος για να αποκτήσετε τη διεύθυνση ip του υπολογιστή-πελάτη.</p><p>αυτό περνάει μερικές από τις δυνατότητες. ο κώδικας που χρησιμοποιεί java θα σπάσει εάν ο χρήστης έχει πολλές διεπαφές.</p><p> <a href="http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html">http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html</a> </p><p>από την εξέταση των άλλων απαντήσεων εδώ, ακούγεται ότι ίσως θέλετε να αποκτήσετε τη δημόσια διεύθυνση ip του πελάτη, που είναι πιθανώς η διεύθυνση του δρομολογητή που χρησιμοποιεί για να συνδεθεί στο διαδίκτυο. πολλές από τις άλλες απαντήσεις εδώ μιλούν γι 'αυτό. θα πρότεινα να δημιουργήσετε και να φιλοξενήσετε τη δική σας σελίδα δευτερεύουσας σελίδας για να λάβετε το αίτημα και να απαντήσετε με τη διεύθυνση ip αντί να εξαρτάτε από την υπηρεσία κάποιου άλλου που μπορεί να συνεχίσει ή να μην συνεχίσει να εργάζεται.</p>
<p>μπορείτε να χρησιμοποιήσετε τη <a href="http://userinfo.io">serinfo.io</a> βιβλιοθήκη javascript.</p><pre><code>&lt;script type="text/javascript" src="userinfo.0.0.1.min.js"&gt;&lt;/script&gt; userinfo.getinfo(function(data) { alert(data.ip\_address); }, function(err) { // do something with the error }); </code></pre><p>μπορείτε επίσης να χρησιμοποιήσετε τις απαιτήσεις για τη φόρτωση του σεναρίου.</p><p>θα σας δώσει τη διεύθυνση ip του επισκέπτη, καθώς και μερικά στοιχεία σχετικά με την τοποθεσία του (χώρα, πόλη κ.λπ.). βασίζεται στη βάση δεδομένων maxmind geoip.</p><p><em> αποποίηση ευθύνης: έγραψα αυτή τη βιβλιοθήκη </em></p>
<p> <a href="http://ip.codehelper.io">javascript/jquery αποκτά τη διεύθυνση και την τοποθεσία ip του πελάτη</a> (χώρα, πόλη)</p><p>χρειάζεται μόνο να ενσωματώσετε μια ετικέτα με το σύνδεσμο "src" στο διακομιστή. ο διακομιστής θα επιστρέψει το "codehelper\_ip" ως object/json και μπορείτε να το χρησιμοποιήσετε αμέσως.</p><pre><code>// first, embed this script in your head or at bottom of the page. &lt;script language="javascript" src="http://www.codehelper.io/api/ips/?js"&gt;&lt;/script&gt; // you can use it &lt;script language="javascript"&gt; alert(codehelper\_ip.ip); alert(codehelper\_ip.country); &lt;/script&gt; </code></pre><p>περισσότερες πληροφορίες στη διεύθυνση <a href="http://ip.codehelper.io">javascript detect real ip address plus country</a> </p><p>αν χρησιμοποιείτε jquery, μπορείτε να δοκιμάσετε:</p><pre><code>console.log(codehelper\_ip); </code></pre><p>θα σας δείξει περισσότερες πληροφορίες σχετικά με το επιστρεφόμενο αντικείμενο.</p><p>αν θέλετε λειτουργία επανάκλησης, δοκιμάστε το εξής:</p><pre><code>// first, embed this script in your head or at bottom of the page. &lt;script language="javascript" src="http://www.codehelper.io/api/ips/?callback=yourcallback"&gt;&lt;/script&gt; // you can use it &lt;script language="javascript"&gt; function yourcallback(json) { alert(json.ip); } &lt;/script&gt; </code></pre>
<p>η υπηρεσία κλήσης appspot.com δεν είναι διαθέσιμη. το ipinfo.io φαίνεται να λειτουργεί.</p><p>έκανα ένα επιπλέον βήμα και ανακάλυψα όλες τις πληροφορίες geo χρησιμοποιώντας το angularjs. (χάρη στον ρικάρντο) ελέγξτε το.</p><pre><code>&lt;div ng-controller="geoctrl"&gt; &lt;p ng-bind="ip"&gt;&lt;/p&gt; &lt;p ng-bind="hostname"&gt;&lt;/p&gt; &lt;p ng-bind="loc"&gt;&lt;/p&gt; &lt;p ng-bind="org"&gt;&lt;/p&gt; &lt;p ng-bind="city"&gt;&lt;/p&gt; &lt;p ng-bind="region"&gt;&lt;/p&gt; &lt;p ng-bind="country"&gt;&lt;/p&gt; &lt;p ng-bind="phone"&gt;&lt;/p&gt; &lt;/div&gt; &lt;script src="http://code.jquery.com/jquery-1.10.2.min.js"&gt;&lt;/script&gt; &lt;script src="http://code.angularjs.org/1.2.12/angular.min.js"&gt;&lt;/script&gt; &lt;script src="http://code.angularjs.org/1.2.12/angular-route.min.js"&gt;&lt;/script&gt; &lt;script&gt; '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 }); }]); &lt;/script&gt; </code></pre><p>σελίδα εργασίας εδώ: <a href="http://www.orangecountyseomarketing.com/projects/\_ip\_angularjs.html">http://www.orangecountyseomarketing.com/projects/\_ip\_angularjs.html</a> </p>
<p>χρησιμοποιήστε το <a href="https://ipdata.co?utm\_campaign=stackoverflow-answer-391979&amp;utm\_medium=answer&amp;utm\_source=stackoverflow">ipdata.co</a> .</p><p>το api παρέχει επίσης δεδομένα γεωγραφικής κατανομής και έχει 10 παγκόσμια τελικά σημεία, το καθένα από τα οποία μπορεί να χειριστεί&gt; 800m αιτήσεις την ημέρα!</p><blockquote> <p>αυτή η απάντηση χρησιμοποιεί ένα κλειδί api "δοκιμής" που είναι πολύ περιορισμένο και προορίζεται μόνο για τη δοκιμή μερικών κλήσεων. <a href="https://ipdata.co?utm\_campaign=stackoverflow-answer-391979-free-plan-cta&amp;utm\_medium=answer&amp;utm\_source=stackoverflow">εγγραφή</a> για το δικό σας ελεύθερο κλειδί api και λάβετε μέχρι και 1500 αιτήματα καθημερινά για ανάπτυξη.</p> </blockquote><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>$.get("https://api.ipdata.co?api-key=test", function (response) { $("#response").html(response.ip); }, "jsonp");</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt; &lt;pre id="response"&gt;&lt;/pre&gt;</code></pre></div> </div>
<p>μου αρέσει πολύ <a href="https://www.ipify.org/"><code>api.ipify.org</code></a> γιατί υποστηρίζει τόσο http όσο και https.</p><p>ακολουθούν ορισμένα παραδείγματα λήψης της ip χρησιμοποιώντας το <code>api.ipify.org</code> χρησιμοποιώντας jquery.</p><h3>json μορφοποίηση μέσω https</h3><pre><code>https://api.ipify.org?format=json </code></pre><div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>$.getjson("https://api.ipify.org/?format=json", function(e) { alert(e.ip); });</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;</code></pre></div> </div><h3>μορφή json μέσω http</h3><pre><code>http://api.ipify.org?format=json </code></pre><div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code>$.getjson("http://api.ipify.org/?format=json", function(e) { alert(e.ip); });</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;</code></pre></div> </div><h3>μορφή κειμένου μέσω https</h3><p>εάν δεν το θέλετε στο json, υπάρχει επίσης μια απλή απάντηση μέσω του https</p><pre><code>https://api.ipify.org </code></pre><h3>μορφή κειμένου μέσω http</h3><p>και υπάρχει επίσης μια απλή απάντηση μέσω http</p><pre><code>http://api.ipify.org </code></pre>
<p>αν συμπεριλαμβάνετε ένα αρχείο, μπορείτε να κάνετε ένα απλό ajax get:</p><pre><code>function ip\_callback() { $.get("ajax.getip.php",function(data){ return data; } } </code></pre><p>και <code>ajax.getip.php</code> θα είναι αυτό:</p><pre><code>&lt;?=$\_server['remote\_addr']?&gt; </code></pre>
<p>πρόκειται να προσφέρω μια μέθοδο που χρησιμοποιώ πολύ όταν θέλω να αποθηκεύσω πληροφορίες στη σελίδα html και θέλω το javascript να διαβάζει πληροφορίες χωρίς να χρειάζεται να περάσει παραμέτρους στο javascript. αυτό είναι ιδιαίτερα χρήσιμο όταν η δέσμη ενεργειών σας αναφέρεται εξωτερικά, και όχι σε σειρά.</p><p>ωστόσο, δεν πληροί το κριτήριο του "όχι script server side". αλλά αν μπορείτε να συμπεριλάβετε scripting πλευρά server στο html σας, κάντε το εξής:</p><p>δημιουργήστε κρυμμένα στοιχεία ετικέτας στο κάτω μέρος της σελίδας html, ακριβώς πάνω από την τελική ετικέτα σώματος.</p><p>η ετικέτα σας θα μοιάζει με αυτό:</p><pre><code>&lt;label id="ip" class="hiddenlabel"&gt;&lt;?php echo $\_server['remote\_addr']; ?&gt;&lt;/label&gt; </code></pre><p>βεβαιωθείτε ότι έχετε κάνει μια κλάση που ονομάζεται <code>hiddenlabel</code> και ορίστε τον <code>visibility:hidden</code> ώστε κανείς να μην βλέπει την ετικέτα. μπορείτε να αποθηκεύσετε πολλά πράγματα με αυτό τον τρόπο, σε κρυφές ετικέτες.</p><p>τώρα, στο javascript, για να ανακτήσετε τις πληροφορίες που είναι αποθηκευμένες στην ετικέτα (στην περίπτωση αυτή η διεύθυνση ip του πελάτη), μπορείτε να το κάνετε αυτό:</p><pre><code>var ip = document.getelementbyid("ip").innerhtml; </code></pre><p>τώρα η μεταβλητή "ip" σας ισούται με τη διεύθυνση ip. τώρα μπορείτε να περάσετε το ip στο αίτημά σας api.</p><p><strong>* edit 2 years later *</strong> δύο μικρές βελτιώσεις:</p><p>συνήθως χρησιμοποιώ αυτή τη μέθοδο, αλλά καλώ την ετικέτα <code>class="data"</code>, γιατί στην πραγματικότητα είναι ένας τρόπος αποθήκευσης δεδομένων. το όνομα της κατηγορίας "hiddenlabel" είναι ένα είδος ανόητου ονόματος.</p><p>η δεύτερη τροποποίηση είναι στο φύλλο στυλ, αντί για <code>visibility:hidden</code>:</p><pre><code>.data{ display:none; } </code></pre><p>... είναι ο καλύτερος τρόπος να το κάνετε.</p>
<p>θα μπορούσατε να κάνετε αυτή την πλήρη πλευρά του πελάτη και ως επί το πλείστον σε javascript χρησιμοποιώντας ένα αντικείμενο flash που μπορεί να καλέσει η js. flash <em>can</em> πρόσβαση στη διεύθυνση ip του τοπικού μηχάνημα που μπορεί να μην είναι πολύ χρήσιμη.</p>
<pre><code>&lt;!doctype html&gt; &lt;html ng-app="getip"&gt; &lt;body&gt; &lt;div ng-controller="getipctrl"&gt; &lt;div ng-bind="ip"&gt;&lt;/div&gt; &lt;/div&gt; &lt;!-- javascript for load faster ================================================== --&gt; &lt;script src="lib/jquery/jquery.js"&gt;&lt;/script&gt; &lt;script src="lib/angular/angular.min.js"&gt;&lt;/script&gt; &lt;script&gt; /// scripts app 'use strict'; /* app module */ var getip = angular.module('getip', [ ]); getip.controller('getipctrl', ['$scope', '$http', function($scope, $http) { $http.jsonp('http://jsonip.appspot.com/?callback=json\_callback') .success(function(data) { $scope.ip = data.ip; }); }]); &lt;/script&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
<pre><code>var call\_to = "http://smart-ip.net/geoip-json?callback=?"; $.getjson(call\_to, function(data){ alert(data.host); }); </code></pre><p><code>data.host</code> είναι η διεύθυνση ip. απλά τηλεφωνήστε στο πρόγραμμα περιήγησής σας.</p><p><code>http://smart-ip.net/geoip-json?callback=?</code> [χωρίς εισαγωγικά] και λάβετε το ip.</p>
<pre><code> $.getjson("http://jsonip.com?callback=?", function (data) { alert("your ip address: " + data.ip); }); </code></pre>
<p>μπορείτε να χρησιμοποιήσετε υπηρεσίες ιστού όπως: <a href="http://ip-api.com/">http://ip-api.com/</a> </p><p>παράδειγμα:</p><pre><code>&lt;script type="text/javascript" src="http://ip-api.com/json/?callback=foo"&gt; &lt;script&gt; function foo(json) { alert(json.query) } &lt;/script&gt; additional example: http://whatmyip.info </code></pre>
<p>δοκιμάστε αυτό: <a href="http://httpbin.org/ip">http://httpbin.org/ip</a> (ή <a href="https://httpbin.org/ip">https://httpbin.org/ip</a> )</p><p>παράδειγμα με https:</p><pre><code>$.getjson('https://httpbin.org/ip', function(data) { console.log(data['origin']); }); </code></pre><p>πηγή: <a href="http://httpbin.org/">http://httpbin.org/</a> </p>
<p>ορίστε:</p><pre><code>$.getjson("http://smart-ip.net/geoip-json?callback=?", function(data){ alert(data.host); }); </code></pre>
<p>πρώτα απ 'όλα η <strong> <em> πραγματική απάντηση </em> </strong>: <strong> δεν είναι δυνατόν να χρησιμοποιήσετε καθαρά κώδικα που εκτελέστηκε από την πλευρά του πελάτη για να μάθετε τη δική σας διεύθυνση ip </strong>.</p><p>ωστόσο, μπορείτε απλά να κάνετε ένα get προς <a href="https://api.muctool.de/whois">https://api.muctool.de/whois</a> και να λάβετε κάτι σαν να αποκτήσετε μια διεύθυνση ip πελάτη</p><pre><code>{ "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 } </code></pre>
<p>δοκιμάστε το javascript</p><pre><code>$.getjson("http://smart-ip.net/geoip-json?callback=?", function(data){ alert(data.host); }); </code></pre><p>ή</p><p><code>http://jsfiddle.net/ourcodeworld/cks0v68q/?utm\_source=website&amp;utm\_medium=embed&amp;utm\_campaign=cks0v68q</code></p>
<p><strong>λάβετε το σύστημα local ip:</strong></p><pre><code> try { var rtcpeerconnection = window.webkitrtcpeerconnection || window.mozrtcpeerconnection; if (rtcpeerconnection) (function () { var rtc = new rtcpeerconnection({ iceservers: [] }); if (1 || window.mozrtcpeerconnection) { rtc.createdatachannel('', { reliable: false }); }; rtc.onicecandidate = function (evt) { if (evt.candidate) grepsdp("a=" + evt.candidate.candidate); }; rtc.createoffer(function (offerdesc) { grepsdp(offerdesc.sdp); rtc.setlocaldescription(offerdesc); }, function (e) { console.warn("offer failed", e); }); var addrs = object.create(null); addrs["0.0.0.0"] = false; function updatedisplay(newaddr) { if (newaddr in addrs) return; else addrs[newaddr] = true; var displayaddrs = object.keys(addrs).filter(function (k) { return addrs[k]; }); lgipdynadd = displayaddrs.join(" or perhaps ") || "n/a"; alert(lgipdynadd) } function grepsdp(sdp) { var hosts = []; sdp.split('\r\n').foreach(function (line) { if (~line.indexof("a=candidate")) { var parts = line.split(' '), addr = parts[4], type = parts[7]; if (type === 'host') updatedisplay(addr); } else if (~line.indexof("c=")) { var parts = line.split(' '), addr = parts[2]; alert(addr); } }); } })();} catch (ex) { } </code></pre>
<p>όλες οι παραπάνω απαντήσεις έχουν ένα μέρος διακομιστή, όχι καθαρό τμήμα πελάτη. αυτό πρέπει να παρέχεται από το πρόγραμμα περιήγησης ιστού. προς το παρόν, κανένα πρόγραμμα περιήγησης στο web δεν υποστηρίζει αυτό.</p><p>ωστόσο, με αυτό το πρόσθετο για τον firefox: <a href="https://addons.mozilla.org/en-us/firefox/addon/ip-address/">https://addons.mozilla.org/en-us/firefox/addon/ip-address/</a> θα χρειαστεί να ζητήσετε από τους χρήστες σας να εγκαταστήσουν αυτό το addon. (είναι καλό από μένα, ένα τρίτο μέρος).</p><p>μπορείτε να ελέγξετε αν ο χρήστης το έχει εγκαταστήσει.</p><pre><code>var installed=window.ip!==undefined; </code></pre><p>μπορείτε να το πάρετε με javascript, αν είναι εγκατεστημένο, τότε var ip = ip.getclient (); var ipclient = ip.ip; // ενώ το ip.url είναι η διεύθυνση url</p><pre><code>ip=ip.getserver(); var ipserver=ip.ip; var portserver=ip.port; //while ip.url is the url //or you can use ip.getboth(); </code></pre><p>περισσότερες πληροφορίες εδώ: <a href="http://www.jackiszhp.info/tech/addon.ip.html">http://www.jackiszhp.info/tech/addon.ip.html</a> </p>
<p>δεν είμαι javascript γκουρού, αλλά αν είναι δυνατόν θα μπορούσατε να ανοίξετε ένα iframe με <a href="http://www.whatismyip.com/automation/n09230945.asp">http://www.whatismyip.com/automation/n09230945.asp</a> ως πηγή και να διαβάσετε το περιεχόμενο του πλαισίου.</p><p>επεξεργασία: αυτή η συνηθισμένη εργασία οφείλεται στην ασφάλεια μεταξύ τομέων.</p>
<pre><code>&lt;script type="text/javascript" src="http://l2.io/ip.js?var=myip"&gt;&lt;/script&gt; &lt;script&gt; function systemip(){ document.getelementbyid("ip").value = myip console.log(document.getelementbyid("ip").value) } &lt;/script&gt; </code></pre>
<p>μπορείτε να δοκιμάσετε να χρησιμοποιήσετε το <a href="https://ip-api.io">https://ip-api.io</a> geo ip api. για παράδειγμα με το jquery:</p><pre><code>$(document).ready( function() { $.getjson("http://ip-api.io/api/json", function(data){ console.log(data); } ); }); </code></pre><p>επίσης <a href="https://ip-api.io">https://ip-api.io</a> ελέγχει τις βάσεις δεδομένων tor, public proxy και spammer και παρέχει αυτές τις πληροφορίες επίσης.</p><p>παράδειγμα απόκρισης:</p><pre><code>{ "ip": "182.35.213.213", "country\_code": "us", "country\_name": "united states", "region\_code": "ca", "region\_name": "california", "city": "san francisco", "zip\_code": "94107", "time\_zone": "america/los\_angeles", "latitude": 32.7697, "longitude": -102.3933, "suspicious\_factors": { "is\_proxy": true, "is\_tor\_node": true, "is\_spam": true, "is\_suspicious": true // true if any of other fields (is\_proxy, is\_tor\_node, is\_spam) is true } } </code></pre>
<p>εάν χρησιμοποιείτε το nginx κάπου, μπορείτε να προσθέσετε αυτό το απόσπασμα και να ρωτήσετε τον δικό σας διακομιστή μέσω οποιουδήποτε εργαλείου ajax.</p><pre><code>location /get\_ip { default\_type text/plain; return 200 $remote\_addr; } </code></pre>
<p>ένα πρόβλημα με μερικές από τις άλλες υπηρεσίες που έχω δει εδώ είναι ότι είτε δεν υποστηρίζουν το ipv6, είτε ενεργούν απρόβλεπτα με την παρουσία του ipv6.</p><p>επειδή χρειάστηκα αυτή τη δυνατότητα μόνος μου σε ένα περιβάλλον διπλής στοίβας, έβαλα μαζί τη δική μου υπηρεσία διεύθυνσης ip, την οποία μπορείτε να βρείτε στο <a href="http://myip.addr.space/">http://myip.addr.space/</a> . υπάρχει επίσης μια γρήγορη αναφορά στο <a href="http://myip.addr.space/help">/ help</a> .</p><p>για να το χρησιμοποιήσετε με το jquery, χρησιμοποιήστε το τελικό σημείο <code>/ip</code>. θα πάρετε πίσω απλό κείμενο που περιέχει τη διεύθυνση ip, ανάλογα με τον υποτομέα που χρησιμοποιείτε:</p><p>το <code>$.get("http://myip.addr.space/ip")</code> επιστρέφει είτε ipv6 είτε ipv4, ανάλογα με το τι είναι διαθέσιμο στο σύστημα. ( <a href="http://jsfiddle.net/kdew5ob4/">jsfiddle</a> )</p><p><code>$.get("http://ipv4.myip.addr.space/ip")</code> επιστρέφει πάντα το ipv4 (ή αποτυγχάνει εάν δεν υπάρχει ipv4).</p><p><code>$.get("http://ipv6.myip.addr.space/ip")</code> επιστρέφει πάντα το ipv6 (ή αποτυγχάνει εάν δεν υπάρχει ipv6).</p>
<pre><code>&lt;script type="application/javascript"&gt; function getip(json) { alert(json.ip); } </code></pre><pre><code> &lt;script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"&gt;&lt;/script&gt; </code></pre><p>εκτέλεση πάνω από τη γραφή <a href="http://jsbin.com/ijiha">κλικ εδώ</a> </p>
<p>έχω το δικό μου api back end με laravel, έτσι συνήθως έχω μόνο τα εξής:</p><pre><code>$(document).ready( function() { $.getjson( "http://api.whoisdoma.com/v1/ip/visitor?api\_key=key", function(data){ alert( data.ip); } ); }); </code></pre><p>για πρόσθετη ασφάλεια, παρέχω ένα κλειδί api που απαιτείται για αποτελέσματα.</p>
<p>η απλή λύση για τη λήψη της διεύθυνσης ip είναι να προσθέσετε τον ακόλουθο κώδικα στο αρχείο σας.</p><pre><code> $.getjson('https://api.ipify.org?format=json', function(data){ // your callback functions like console.log(data.ip); localstorage.setitem('ip',data.ip); alert(data.ip); }); </code></pre><p>θα λάβει τη διεύθυνση ip όταν φορτώνεται η σελίδα.</p>
<p>δοκιμάστε αυτό</p><pre><code>$.get("http://ipinfo.io", function(response) { alert(response.ip); }, "jsonp"); </code></pre>
<pre><code>$.getjson("http://jsonip.com?callback=?", function (data) { alert("your ip: " + data.ip); }); </code></pre>
<p><strong> java script για εύρεση ip </strong></p><p><em> για να λάβετε τη διεύθυνση ip πραγματοποιώ μια κλήση json στην υπηρεσία free web </em>. σαν</p><p>[jsonip.com/json, ipinfo.io/json, www.telize.com/geoip, ip-api.com/json, api.hostip.info/get\_json.php]</p><p><em> και διαβιβάζω το όνομα της συνάρτησης επανάκλησης που θα καλείται μετά την ολοκλήρωση της αίτησης. </em></p><pre><code>&lt;script type="text/javascript"&gt; window.onload = function () { var webservice = "http://www.telize.com/geoip"; var script = document.createelement("script"); script.type = "text/javascript"; script.src = webservice+"?callback=myip"; document.getelementsbytagname("head")[0].appendchild(script); }; function myip(response) { document.getelementbyid("ipaddress").innerhtml = "your ip address is " + response.ip; } &lt;/script&gt; &lt;body&gt; &lt;form&gt; &lt;span id = "ipaddress"&gt;&lt;/span&gt; &lt;/form&gt; &lt;/body&gt; </code></pre><p><em> για απόκριση xml <a href="https://stackoverflow.com/questions/391979/get-client-ip-using-just-javascript/5239085#5239085">code</a> </em></p><p><em> <a href="https://stackoverflow.com/questions/102605/can-i-lookup-the-ip-address-of-a-hostname-from-javascript/25962226#25962226">webrtc</a> το οποίο δεν απαιτεί υποστήριξη διακομιστή </em></p>
<p>δεν μπορεί να γίνει μόνο με javascript (εκτός εάν οι πελάτες έχουν ένα plugin προγράμματος περιήγησης όπως περιγράφεται παραπάνω). δεν μπορεί να γίνει με το flash στον πελάτη. αλλά μπορεί να γίνει στον πελάτη χρησιμοποιώντας μια εφαρμογή java (και το javascript μπορεί να μιλήσει σε αυτό), αν και θα ζητήσει πλήρεις άδειες. π.χ. δείτε <a href="http://www.findmyrouter.net">http://www.findmyrouter.net</a> </p>