IT-Swarm.Net

Πώς να αποκτήσετε τη διεύθυνση IP του πελάτη χρησιμοποιώντας το JavaScript;

Πρέπει να ανακτήσω κάπως τη διεύθυνση IP του πελάτη χρησιμοποιώντας JavaScript. κανένας κώδικας πλευράς διακομιστή, ούτε καν SSI.

Ωστόσο, δεν είμαι ενάντια στη χρήση ενός δωρεάν script/υπηρεσίας τρίτου μέρους.

560
FlySwat

Θα χρησιμοποιούσα μια υπηρεσία web που μπορεί να επιστρέψει το JSON (μαζί με το jQuery για να κάνει τα πράγματα απλούστερα). Παρακάτω είναι όλες οι δωρεάν ενεργές υπηρεσίες αναζήτησης IP που θα μπορούσα να βρω και τις πληροφορίες που επιστρέφουν. Αν γνωρίζετε πια, παρακαλώ προσθέστε ένα σχόλιο και θα ενημερώσω αυτήν την απάντηση.


DB-ΙΡ

Δοκιμάστε το: http://api.db-ip.com/addrinfo?api_key=< το κλειδί api > & addr = < διεύθυνση IP >

Επιστροφές:

{
  "address": "116.12.250.1",
  "country": "SG",
  "stateprov": "Central Singapore",
  "city": "Singapore"
}

Περιορισμοί:

  • 2.500 αιτήσεις ανά ημέρα
  • Δεν υποστηρίζει επανάκλησεις JSONP
  • Απαιτεί παράμετρο διεύθυνσης IP
  • Απαιτεί μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να πάρει το κλειδί API
  • Δεν υπάρχει SSL (https) με το δωρεάν σχέδιο

Geobytes

Δοκιμάστε το: http://Gd.geobytes.com/GetCityDetails

$.getJSON('http://Gd.geobytes.com/GetCityDetails?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
}

Περιορισμοί:

  • 16.384 αιτήσεις ανά ώρα
  • Δεν υπάρχει SSL (https) με το δωρεάν σχέδιο
  • Μπορεί να επιστρέψει σε λάθος θέση (Είμαι στη Σιγκαπούρη, όχι στη Σαουδική Αραβία)

GeoIPLookup.io

Δοκιμάστε το: https://json.geoiplookup.io/api

$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
    "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
}

Περιορισμοί:

  • Αγνωστος

geoPlugin

Δοκιμάστε το: http://www.geoplugin.net/json.gp

$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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": "&#36;",
  "geoplugin_currencySymbol_UTF8": "$",
  "geoplugin_currencyConverter": 1.4239
}

Περιορισμοί:

  • 120 αιτήσεις ανά λεπτό
  • Δεν υπάρχει SSL (https) με το δωρεάν σχέδιο

Στόχος χάκερ

Δοκιμάστε το: https://api.hackertarget.com/geoip/?q=<ip διεύθυνση >

Επιστροφές:

IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797

Περιορισμοί:

  • 50 αιτήσεις ανά ημέρα
  • Δεν υποστηρίζει επανάκλησεις JSONP
  • Απαιτεί παράμετρο διεύθυνσης IP
  • Επιστρέφει απλό κείμενο

ipapi.co

Δοκιμάστε το: https://ipapi.co/json/

$.getJSON('https://ipapi.co/json/', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
}

Περιορισμοί:

  • 1.000 αιτήσεις ανά ημέρα
  • Απαιτεί SSL (https)

IP-API.com

Δοκιμάστε το: http://ip-api.com/json

$.getJSON('http://ip-api.com/json?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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": ""
}

Περιορισμοί:

  • 150 αιτήσεις ανά λεπτό
  • Δεν υπάρχει SSL (https) με το δωρεάν σχέδιο

Ipdata.co

Δοκιμάστε το: https://api.ipdata.co

$.getJSON('https://api.ipdata.co', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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
  }
}

Περιορισμοί:

  • 1.500 αιτήσεις ανά ημέρα
  • Απαιτεί μια διεύθυνση ηλεκτρονικού ταχυδρομείου για να πάρει το κλειδί API
  • Απαιτεί SSL (https)

IP Εύρεση

Δοκιμάστε το: https://ipfind.co/me?auth=< το κλειδί api >

$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
  ]
}

Περιορισμοί:

  • 300 αιτήσεις ανά ημέρα
  • Απαιτεί εγγραφή για να πάρει το κλειδί API

ipgeolocation

Δοκιμάστε το: https://api.ipgeolocation.io/ipgeo?apiKey=< το κλειδί api >

$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
  }
}

Περιορισμοί:

  • 50.000 αιτήσεις ανά μήνα
  • Απαιτεί εγγραφή για να πάρει το κλειδί API

ipify

Δοκιμάστε το: https://api.ipify.org/?format=json

$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "ip": "116.12.250.1"
}

Περιορισμοί:

  • None

IPInfoDB

Δοκιμάστε το: https://api.ipinfodb.com/v3/ip-city/?key=< το κλειδί api > & 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));
});

Επιστροφές:

{
  "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"
}

Περιορισμοί:

  • Δύο αιτήσεις ανά δευτερόλεπτο
  • Απαιτεί εγγραφή για να πάρει το κλειδί API

ipinfo.io

Δοκιμάστε το: https://ipinfo.io/json

$.getJSON('https://ipinfo.io/json', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
}

Περιορισμοί:

  • 1.000 αιτήσεις ανά ημέρα

ipstack (πρώην freegeoip.net)

Δοκιμάστε το: http://api.ipstack.com/<ip διεύθυνση >? Access_key = < το κλειδί api>

$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
    "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
    }
}

Περιορισμοί:

  • 10.000 αιτήσεις ανά μήνα
  • Απαιτεί παράμετρο διεύθυνσης IP
  • Απαιτεί εγγραφή για να πάρει το κλειδί API
  • Δεν υπάρχει SSL (https) με το δωρεάν σχέδιο

jsonip.com

Δοκιμάστε το: https://jsonip.com

$.getJSON('https://jsonip.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "ip": "116.12.250.1",
  "about": "/about",
  "Pro!": "http://getjsonip.com",
  "reject-fascism": "Liberal America will prevail"
}

Περιορισμοί:

  • Η απάντηση περιλαμβάνει upsell και πολιτική

Δοκιμή JSON

Δοκιμάστε το: http://ip.jsontest.com/

$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "ip": "116.12.250.1"
}

Περιορισμοί:

  • Δεν υπάρχει SSL (https)
  • Πηγαίνει πολύ (πάνω από την ποσόστωση), οπότε δεν θα το χρησιμοποιούσα για παραγωγή
  • Επιστρέφει τη διεύθυνση IPv6 αν έχετε ένα, το οποίο μπορεί να μην είναι αυτό που θέλετε

Nekudo

Δοκιμάστε το: https://geoip.nekudo.com/api

$.getJSON('https://geoip.nekudo.com/api', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "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"
}

Περιορισμοί:

  • Αποκλεισμένοι από αποκλειστές διαφημίσεων χρησιμοποιώντας τη λίστα EasyPrivacy

Ηλίθιες Εργαλεία Ιστού

Δοκιμάστε το: http://www.stupidwebtools.com/api/my_ip.json

$.getJSON('http://www.stupidwebtools.com/api/my_ip.json', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Επιστροφές:

{
  "my_ip": {
    "ip": "116.12.250.1",
    "others": []
  }
}

Περιορισμοί:

  • Δεν υπάρχει SSL (https)

Λάβετε υπόψη ότι, δεδομένου ότι όλες αυτές οι υπηρεσίες είναι δωρεάν, η διανυόμενη απόσταση μπορεί να διαφέρει ως προς την υπέρβαση της ποσόστωσης και του χρόνου λειτουργίας, και ποιος ξέρει πότε/εάν θα μετακινηθεί εκτός δρόμου (έκθεση A: Telize ). Οι περισσότερες από αυτές τις υπηρεσίες προσφέρουν επίσης μια πληρωμένη βαθμίδα σε περίπτωση που θέλετε περισσότερες λειτουργίες όπως υποστήριξη SSL.

Επίσης, όπως επεσήμανε το skobaljic στα σχόλια που ακολουθούν, οι ποσοστώσεις αιτήσεων είναι ως επί το πλείστον ακαδημαϊκές διότι αυτό συμβαίνει στην πλευρά του πελάτη και οι περισσότεροι τελικοί χρήστες δεν θα υπερβούν ποτέ την ποσόστωση.

ΕΝΗΜΕΡΏΣΕΙΣ

  • 2/1/2016: Αφαίρεσε Τελείωσε (δεν προσφέρει πλέον δωρεάν σχέδιο)
  • 4/18/2016: Αφαίρεση freegeoip.net (εκτός λειτουργίας)
  • 4/26/2016: Προστέθηκε DB-IP
  • 4/26/2016: Προστέθηκε Στόχος χάκερ
  • 7/6/2016: Επαναφορά freegeoip.net
  • 7/6/2016: Αφαίρεση ip-json.rhcloud.com (νεκρός σύνδεσμος)
  • 12/21/2016: Αφαίρεση Στόχος χάκερ (εκτός λειτουργίας)
  • 2/10/2017: Προστέθηκε Nekudo
  • 4/20/2017: Προστέθηκε ipapi.co (χάρη Ahmad Awais)
  • 4/24/2017: Επαναφορά Στόχος χάκερ
  • 4/24/2017: Καταργήθηκε Snoopi.io (εκτός λειτουργίας)
  • 16/16/2017: Προστέθηκε IP Find (χάρη στην JordanC)
  • 16/16/2017: Ενημερωμένος περιορισμός για δωρεάν σχέδια που δεν υποστηρίζουν SSL
  • 9/25/2017: Προστέθηκε Stupid Εργαλεία Ιστού (thanks Cœur)
  • 3/16/2018: Προστέθηκε Ipdata.co (χάρη Jonathan)
  • 4/14/2018: Μετονομάσαμε freegeoip.net στο ipstack (ευχαριστίες MA-Maddin)
  • 4/16/2018: Προστέθηκε GeoIPLookup.io (χάρη Rob Waa)
  • 6/11/2018: Προστέθηκε ipgeolocation (ευχαριστίες Ejaz Ahmed)
589
thdoan

Ενημέρωση: Πάντα ήθελα να κάνω μια min/uglified έκδοση του κώδικα, οπότε εδώ είναι ένας κώδικας ES6 Promise:

var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})

/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))

Σημείωση: Αυτός ο νέος κωδικοποιημένος κώδικας θα επέστρεφε μόνο μία IP, αν θέλετε όλες τις διευθύνσεις IP του χρήστη (που μπορεί να εξαρτώνται περισσότερο από το δίκτυό του), χρησιμοποιήστε τον αρχικό κώδικα ...


χάρη στο WebRTC, είναι πολύ εύκολο να αποκτήσετε τοπική IP σε browsers που υποστηρίζονται από WebRTC (τουλάχιστον για τώρα). Έχω τροποποιήσει τον πηγαίο κώδικα, μείωσε τις γραμμές, δεν έκανα αιτήματα αναισθητοποίησης, αφού θέλεις μόνο την Τοπική ΙΡ, όχι την Δημόσια IP, ο παρακάτω κώδικας λειτουργεί στα πιο πρόσφατα Firefox και Chrome, απλά εκτελέστε το απόσπασμα και ελέγξτε μόνοι σας:

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>

αυτό που συμβαίνει εδώ είναι ότι δημιουργούμε μια ψεύτικη σύνδεση από ομοτίμους και για να μας έρθει η επαφή με τον απομακρυσμένο συνομηδότη, γενικά ανταλλάσσουμε υποψήφιοι πάγου μεταξύ τους. Και διαβάζοντας τους υποψήφιους πάγου (από την τοπική περιγραφή συνόδου και onIceCandidateEvent) μπορούμε να πούμε την IP του χρήστη.

όπου πήρα κώδικα από -> Πηγή

252
mido

Μπορείτε να το μεταφέρετε μέσω διακομιστή με το JSONP

Και ενώ πηγαίνω για να βρω ένα, το βρήκε εδώ στοSO Μπορώ να εκτελέσω μια αναζήτηση DNS (όνομα κεντρικού υπολογιστή στη διεύθυνση IP) χρησιμοποιώντας Javascript από την πλευρά του πελάτη;

<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>

Σημείωση: Το API του telize.com έχει μόνιμα έκλεισε στις 15 Νοεμβρίου 2015 .

175
Chad Grant

Οι περισσότερες απαντήσεις εδώ "δουλεύουν" γύρω από την ανάγκη για κώδικα από την πλευρά του διακομιστή με ... Χτύπημα διακομιστή κάποιου άλλου. Ποια είναι μια εντελώς έγκυρη τεχνική, εκτός εάν πραγματικά χρειάζεστε για να αποκτήσετε τη διεύθυνση IP χωρίς να χτυπήσετε έναν διακομιστή.

Παραδοσιακά, αυτό δεν ήταν εφικτό χωρίς κάποιο είδος plugin (και έπειτα, πιθανότατα θα λάβατε τη διεύθυνση IP λάθος εάν βρισκόσαστε πίσω από έναNAT Αν στοχεύετε προγράμματα περιήγησης που υποστηρίζουν WebRTC (επί του παρόντος: Firefox, Chrome και Opera).

Παρακαλούμε διαβάστε την απάντηση του mido για λεπτομέρειες σχετικά με τον τρόπο με τον οποίο μπορείτε να ανακτήσετε χρήσιμες διευθύνσεις IP πελάτη χρησιμοποιώντας το WebRTC.

100
Shog9

Μπορείτε να κάνετε μια κλήση ajax στο hostp.info ή μια παρόμοια υπηρεσία ...

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;
}

Ως μπόνους, επιστρέφονται πληροφορίες στην γεωλογική κατανομή στην ίδια κλήση.

81
Malta
Δοκιμάστε αυτό
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

OR

$(document).ready(function () {
    $.getJSON("http://jsonip.com/?callback=?", function (data) {
        console.log(data);
        alert(data.ip);
    });
});

Fiddle

72
Sridhar R

Κοιτάξτε πάλι

Ελέγξτε έξω http: //www.ipify.org/

Σύμφωνα με αυτούς:

  • Μπορείτε να το χρησιμοποιήσετε χωρίς όριο (ακόμα κι αν κάνετε εκατομμύρια αιτήματα ανά λεπτό).
  • το ipify είναι εντελώς ανοιχτό (δείτε το GitHub repository ).

Ακολουθεί ένα παράδειγμα εργασίας JS (αντί να αναρωτιέστε γιατί αυτή η απάντηση έχει τόσο λίγες ψηφοφορίες, δοκιμάστε τον εαυτό σας να το δείτε σε δράση):

<script>
function getIP(json) {
  alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>

Πολύ τεμπέλης για αντιγραφή/επικόλληση; Μου αρέσει. Εδώ είναι ένα demo

Πάρα πολύ τεμπέλης για κλικ; :O

Σημείωση: Απενεργοποιήστε το Adblock Plus/uBlock & co πριν εκτελέσετε το demo .. διαφορετικά, απλά δεν θα λειτουργήσει.

Έχω τίποτα να κάνει με την ομάδα IPify. Απλώς πιστεύω ότι είναι γελοία δροσερό ότι κάποιος θα παρέχει μια τέτοια υπηρεσία για το γενικό καλό.

53
FloatingRock

Δεν μπορείτε. Θα πρέπει να ρωτήσετε έναν διακομιστή.

48
SteveShaffer

Μπορείτε να χρησιμοποιήσετε την υπηρεσία http://ipinfo.io γι 'αυτό, η οποία θα σας δώσει τον πελάτη IP, όνομα κεντρικού υπολογιστή, πληροφορίες γεωγραφικής κατανομής και ιδιοκτήτη δικτύου. Εδώ είναι ένα απλό παράδειγμα που καταγράφει την IP:

$.get("http://ipinfo.io", function(response) {
    console.log(response.ip);
}, "jsonp");

Εδώ είναι ένα πιο λεπτομερές παράδειγμα JSFiddle που εκτυπώνει επίσης τις πλήρεις πληροφορίες απάντησης, ώστε να μπορείτε να δείτε όλες τις διαθέσιμες λεπτομέρειες: http://jsfiddle.net/zK5FN/2/

25
Ben Dowling

Συμπεριλάβετε αυτόν τον κώδικα στη σελίδα σας: <script type="text/javascript" src="http://l2.io/ip.js"></script>

περισσότερο doc εδώ

19
L2.IO

Θα έλεγα ότι το Τσαντ και η Μάλτα έχουν μεγάλη απάντηση. Ωστόσο, η δική τους είναι περίπλοκη. Επομένως προτείνω αυτόν τον κώδικα που βρήκα από τις διαφημίσεις ανά χώρα plugin

<script>
<script language="javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="javascript">
mmjsCountryCode = geoip_country_code();
mmjsCountryName = geoip_country_name();

</script>

Όχι ajax. Απλά javascripts. : D

Εάν πηγαίνετε στο http://j.maxmind.com/app/geoip.js θα δείτε ότι περιέχει

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 ''; }

Δεν απαντάει πραγματικά στην ερώτηση ακόμα επειδή

http://j.maxmind.com/app/geoip.js δεν περιέχει το IP (αν και στοιχηματίζω ότι χρησιμοποιεί το IP για να πάρει τη χώρα).

Αλλά είναι τόσο εύκολο να δημιουργήσετε ένα σενάριο PhP που εμφανίζει κάτι παρόμοιο

function visitorsIP()   { return '123.123.123.123'; }

Κάνε αυτό. Βάλτε http://yourdomain.com/yourip.php .

Τότε κάνε

<script language="javascript" src="http://yourdomain.com/yourip.php"></script>

Η ερώτηση αναφέρει ρητά ΔΕΝ να χρησιμοποιήσει το σενάριο τρίτου μέρους. Δεν υπάρχει κανένας άλλος τρόπος. Το Javascript δεν μπορεί να γνωρίζει την IP σας. Αλλά άλλοι διακομιστές που μπορούν να έχουν πρόσβαση μέσω javascript μπορεί να λειτουργούν εξίσου καλά χωρίς πρόβλημα.

16
user4951

Υπάρχουν δύο ερμηνείες σε αυτή την ερώτηση. Οι περισσότεροι άνθρωποι ερμήνευσαν την "IP-πελάτη" για να σημάνει τη δημόσια διεύθυνση IP που βλέπει ο διακομιστής εκτός του LAN και έξω στο Internet. Ωστόσο, στις περισσότερες περιπτώσεις, αυτή δεν είναι η διεύθυνση IP του υπολογιστή-πελάτη

Χρειαζόμουν την πραγματική διεύθυνση IP του υπολογιστή που τρέχει το πρόγραμμα περιήγησης που φιλοξενεί το λογισμικό JavaScript (το οποίο είναι σχεδόν πάντα μια τοπική διεύθυνση IP σε ένα τοπικό δίκτυο που βρίσκεται πίσω από ένα στρώμα NAT).

Η Mido δημοσίευσε μια φανταστική απάντηση παραπάνω, που φαίνεται να είναι η μόνη απάντηση που πραγματικά παρείχε τη διεύθυνση IP του πελάτη.

Ευχαριστώ γι 'αυτό, Mido!

Ωστόσο, η λειτουργία που παρουσιάζεται λειτουργεί ασύγχρονα. Πρέπει να χρησιμοποιήσω στην πραγματικότητα τη διεύθυνση IP στον κώδικα μου και με μια ασύγχρονη λύση, ίσως να προσπαθήσω να χρησιμοποιήσω τη διεύθυνση IP πριν να την ανακτήσω/μάθω/αποθηκεύσει. Έπρεπε να είμαι σε θέση να περιμένω τα αποτελέσματα να φτάσουν πριν τα χρησιμοποιήσουν.

Εδώ είναι μια "εκκρεμή" έκδοση της λειτουργίας του Mido. Ελπίζω ότι βοηθά κάποιον άλλο:

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>
15
BRebey

Με τη χρήση του Smart-IP.net Geo-IP API . Για παράδειγμα, χρησιμοποιώντας το jQuery:

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.Host);
        }
    );
});
14
Mikhus

Υπάρχει μια ευκολότερη και ελεύθερη προσέγγιση που δεν θα ζητήσει από τον επισκέπτη σας για οποιαδήποτε άδεια.

Συνίσταται στην υποβολή ενός πολύ απλού αιτήματος Ajax POST στο http://freegeoip.net/json . Μόλις λάβετε τις πληροφορίες τοποθεσίας σας, στο JSON, αντιδράτε αναλόγως ενημερώνοντας τη σελίδα ή ανακατευθυνόμενοι σε μια νέα σελίδα.

Ακολουθεί το πώς υποβάλετε το αίτημά σας για πληροφορίες τοποθεσίας:

jQuery.ajax( { 
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) {
     console.log(location)
  }
} );
13
Jijo Paulose

Λοιπόν, είμαι απόσπαση από την ερώτηση, αλλά είχα μια παρόμοια ανάγκη σήμερα και αν και δεν μπορούσα να βρω το ID από τον πελάτη χρησιμοποιώντας Javascript, έκανα τα εξής.

Από την πλευρά του διακομιστή: -

<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>

Χρησιμοποιώντας Javascript

var ip = $get("uip").innerHTML;

Χρησιμοποιώ ASP.Net Ajax, αλλά μπορείτε να χρησιμοποιήσετε το getElementById αντί του $ get ().

Αυτό που συμβαίνει είναι ότι έχω ένα κρυμμένο στοιχείο div στη σελίδα με το IP του χρήστη που παρήχθη από το διακομιστή. Από τη Javascript απλά φορτώνω αυτή την αξία.

Αυτό μπορεί να είναι χρήσιμο σε μερικούς ανθρώπους με παρόμοια απαίτηση όπως η δική σας (όπως και εγώ, ενώ δεν το έχω καταλάβει).

Στην υγειά σας!

12
Cyril Gupta

Δεν είναι γενικά εφικτή αν δεν χρησιμοποιείτε κάποια εξωτερική υπηρεσία.

11
Eugene Lazutkin

Πάρτε την IP σας με το jQuery

μπορείτε να αποκτήσετε τη δημόσια διεύθυνση IP σας με μια γραμμή JS; Υπάρχει μια δωρεάν υπηρεσία που προσφέρει αυτό για εσάς και ένα αίτημα λήψης είναι το μόνο που χρειάζεται να κάνετε:

   $.get('http://jsonip.com/', function(r){ console.log(r.ip); });

Για να λειτουργήσει το παραπάνω απόσπασμα, το πρόγραμμα περιήγησής σας θα πρέπει να υποστηρίζει την κοινή χρήση αιτημάτων CORS. Διαφορετικά, θα εξαφανιστεί μια εξαίρεση ασφαλείας. Σε παλαιότερα προγράμματα περιήγησης, μπορείτε να χρησιμοποιήσετε αυτήν την έκδοση, η οποία χρησιμοποιεί ένα αίτημα JSON-P:

   $.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
9
sri_bb

Δεν υπάρχει πραγματικά ένας αξιόπιστος τρόπος για να αποκτήσετε τη διεύθυνση IP του υπολογιστή-πελάτη.

Αυτό περνάει μερικές από τις δυνατότητες. Ο κώδικας που χρησιμοποιεί Java θα σπάσει εάν ο χρήστης έχει πολλές διεπαφές.

http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html

Από την εξέταση των άλλων απαντήσεων εδώ, ακούγεται ότι ίσως θέλετε να αποκτήσετε τη δημόσια διεύθυνση IP του πελάτη, που είναι πιθανώς η διεύθυνση του δρομολογητή που χρησιμοποιεί για να συνδεθεί στο διαδίκτυο. Πολλές από τις άλλες απαντήσεις εδώ μιλούν γι 'αυτό. Θα πρότεινα να δημιουργήσετε και να φιλοξενήσετε τη δική σας σελίδα δευτερεύουσας σελίδας για να λάβετε το αίτημα και να απαντήσετε με τη διεύθυνση IP αντί να εξαρτάτε από την υπηρεσία κάποιου άλλου που μπορεί να συνεχίσει ή να μην συνεχίσει να εργάζεται.

8
Sarel Botha

Μπορείτε να χρησιμοποιήσετε τη serinfo.io βιβλιοθήκη javascript.

<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
});

Μπορείτε επίσης να χρησιμοποιήσετε τις απαιτήσεις για τη φόρτωση του σεναρίου.

Θα σας δώσει τη διεύθυνση IP του επισκέπτη, καθώς και μερικά στοιχεία σχετικά με την τοποθεσία του (χώρα, πόλη κ.λπ.). Βασίζεται στη βάση δεδομένων maxmind geoip.

Αποποίηση ευθύνης: Έγραψα αυτή τη βιβλιοθήκη

8
Vincent Durmont

Javascript/jQuery αποκτά τη διεύθυνση και την τοποθεσία IP του πελάτη (Χώρα, Πόλη)

Χρειάζεται μόνο να ενσωματώσετε μια ετικέτα με το σύνδεσμο "src" στο διακομιστή. Ο διακομιστής θα επιστρέψει το "codehelper_ip" ως Object/JSON και μπορείτε να το χρησιμοποιήσετε αμέσως.

// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?js"></script>
// You can use it
<script language="Javascript">
    alert(codehelper_ip.IP);
    alert(codehelper_ip.Country);
</script>

Περισσότερες πληροφορίες στη διεύθυνση Javascript Detect Real IP Address Plus Country

Αν χρησιμοποιείτε jQUery, μπορείτε να δοκιμάσετε:

console.log(codehelper_ip); 

Θα σας δείξει περισσότερες πληροφορίες σχετικά με το επιστρεφόμενο αντικείμενο.

Αν θέλετε λειτουργία επανάκλησης, δοκιμάστε το εξής:

// 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>
8
Ken Le

Η υπηρεσία κλήσης Appspot.com δεν είναι διαθέσιμη. το ipinfo.io φαίνεται να λειτουργεί.

Έκανα ένα επιπλέον βήμα και ανακάλυψα όλες τις πληροφορίες geo χρησιμοποιώντας το AngularJS. (Χάρη στον Ρικάρντο) Ελέγξτε το.

<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>

Σελίδα εργασίας εδώ: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html

8
Yamenator

Χρησιμοποιήστε το ipdata.co .

Το API παρέχει επίσης δεδομένα γεωγραφικής κατανομής και έχει 10 παγκόσμια τελικά σημεία, το καθένα από τα οποία μπορεί να χειριστεί> 800M αιτήσεις την ημέρα!

Αυτή η απάντηση χρησιμοποιεί ένα κλειδί API "δοκιμής" που είναι πολύ περιορισμένο και προορίζεται μόνο για τη δοκιμή μερικών κλήσεων. Εγγραφή για το δικό σας ελεύθερο κλειδί API και λάβετε μέχρι και 1500 αιτήματα καθημερινά για ανάπτυξη.

$.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>
7
Jonathan

Μου αρέσει πολύ api.ipify.org γιατί υποστηρίζει τόσο HTTP όσο και HTTPS.

Ακολουθούν ορισμένα παραδείγματα λήψης της IP χρησιμοποιώντας το api.ipify.org χρησιμοποιώντας jQuery.

JSON Μορφοποίηση μέσω HTTPS

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>

Μορφή JSON μέσω HTTP

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>

Μορφή κειμένου μέσω HTTPS

Εάν δεν το θέλετε στο JSON, υπάρχει επίσης μια απλή απάντηση μέσω του HTTPS

https://api.ipify.org

Μορφή κειμένου μέσω HTTP

Και υπάρχει επίσης μια απλή απάντηση μέσω HTTP

http://api.ipify.org
7
Tim Penner

Αν συμπεριλαμβάνετε ένα αρχείο, μπορείτε να κάνετε ένα απλό ajax get:

function ip_callback() {
    $.get("ajax.getIp.php",function(data){ return data; }
}

Και ajax.getIp.php θα είναι αυτό:

<?=$_SERVER['REMOTE_ADDR']?>
7
Martijn

Πρόκειται να προσφέρω μια μέθοδο που χρησιμοποιώ πολύ όταν θέλω να αποθηκεύσω πληροφορίες στη σελίδα html και θέλω το javascript να διαβάζει πληροφορίες χωρίς να χρειάζεται να περάσει παραμέτρους στο javascript. Αυτό είναι ιδιαίτερα χρήσιμο όταν η δέσμη ενεργειών σας αναφέρεται εξωτερικά, και όχι σε σειρά.

Ωστόσο, δεν πληροί το κριτήριο του "όχι script server side". Αλλά αν μπορείτε να συμπεριλάβετε scripting πλευρά server στο html σας, κάντε το εξής:

Δημιουργήστε κρυμμένα στοιχεία ετικέτας στο κάτω μέρος της σελίδας html, ακριβώς πάνω από την τελική ετικέτα σώματος.

Η ετικέτα σας θα μοιάζει με αυτό:

<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>

Βεβαιωθείτε ότι έχετε κάνει μια κλάση που ονομάζεται hiddenlabel και ορίστε τον visibility:hidden ώστε κανείς να μην βλέπει την ετικέτα. Μπορείτε να αποθηκεύσετε πολλά πράγματα με αυτό τον τρόπο, σε κρυφές ετικέτες.

Τώρα, στο javascript, για να ανακτήσετε τις πληροφορίες που είναι αποθηκευμένες στην ετικέτα (στην περίπτωση αυτή η διεύθυνση IP του πελάτη), μπορείτε να το κάνετε αυτό:

var ip = document.getElementById("ip").innerHTML;

Τώρα η μεταβλητή "ip" σας ισούται με τη διεύθυνση IP. Τώρα μπορείτε να περάσετε το ip στο αίτημά σας API.

* EDIT 2 YEARS LATER * Δύο μικρές βελτιώσεις:

Συνήθως χρησιμοποιώ αυτή τη μέθοδο, αλλά καλώ την ετικέτα class="data", γιατί στην πραγματικότητα είναι ένας τρόπος αποθήκευσης δεδομένων. Το όνομα της κατηγορίας "hiddenlabel" είναι ένα είδος ανόητου ονόματος.

Η δεύτερη τροποποίηση είναι στο φύλλο στυλ, αντί για visibility:hidden:

.data{
    display:none;
}

... είναι ο καλύτερος τρόπος να το κάνετε.

6
TARKUS

Θα μπορούσατε να κάνετε αυτή την πλήρη πλευρά του πελάτη και ως επί το πλείστον σε JavaScript χρησιμοποιώντας ένα αντικείμενο Flash που μπορεί να καλέσει η js. Flash can πρόσβαση στη διεύθυνση IP του τοπικού μηχάνημα που μπορεί να μην είναι πολύ χρήσιμη.

5
nic ferrier
<!DOCTYPE html>
<html ng-app="getIp">
<body>
    <div ng-controller="getIpCtrl">
        <div ng-bind="ip"></div>
    </div>

    <!-- Javascript for load faster
    ================================================== -->
    <script src="lib/jquery/jquery.js"></script>
    <script src="lib/angular/angular.min.js"></script>
    <script>
    /// 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;
        });
      }]);

    </script>
</body>
</html>
4
Ricardo Olvera
var call_to = "http://smart-ip.net/geoip-json?callback=?";

$.getJSON(call_to, function(data){
   alert(data.Host);
});

data.Host είναι η διεύθυνση IP. Απλά τηλεφωνήστε στο πρόγραμμα περιήγησής σας.

http://smart-ip.net/geoip-json?callback=? [Χωρίς εισαγωγικά] και λάβετε το ip.

4
Jawwad Ahmed
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });
4
Atif Hussain

Μπορείτε να χρησιμοποιήσετε υπηρεσίες ιστού όπως: http://ip-api.com/

Παράδειγμα:

<script type="text/javascript" src="http://ip-api.com/json/?callback=foo">
<script>
    function foo(json) {
        alert(json.query)
    }
</script>

additional example: http://whatmyip.info    
4
user3463375

Δοκιμάστε αυτό: http://httpbin.org/iphttps://httpbin.org/ip )

Παράδειγμα με https:

$.getJSON('https://httpbin.org/ip', function(data) {
                console.log(data['Origin']);
});

Πηγή: http://httpbin.org/

3
SimC

Ορίστε:

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.Host);
});
3
Liam Healy

Πρώτα απ 'όλα η πραγματική απάντηση : Δεν είναι δυνατόν να χρησιμοποιήσετε καθαρά κώδικα που εκτελέστηκε από την πλευρά του πελάτη για να μάθετε τη δική σας διεύθυνση IP .

Ωστόσο, μπορείτε απλά να κάνετε ένα GET προς https://api.muctool.de/whois και να λάβετε κάτι σαν να αποκτήσετε μια διεύθυνση IP πελάτη

{
"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
}
3
Alex

Δοκιμάστε το JAvascript

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.Host);
});

ή

http://jsfiddle.net/ourcodeworld/cks0v68q/?utm_source=website&utm_medium=embed&utm_campaign=cks0v68q

3
user8392362

Λάβετε το σύστημα Local IP:

  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) { }
3
RandyMohan

Όλες οι παραπάνω απαντήσεις έχουν ένα μέρος διακομιστή, όχι καθαρό τμήμα πελάτη. Αυτό πρέπει να παρέχεται από το πρόγραμμα περιήγησης ιστού. Προς το παρόν, κανένα πρόγραμμα περιήγησης στο web δεν υποστηρίζει αυτό.

Ωστόσο, με αυτό το πρόσθετο για τον Firefox: https://addons.mozilla.org/en-US/firefox/addon/ip-address/ Θα χρειαστεί να ζητήσετε από τους χρήστες σας να εγκαταστήσουν αυτό το addon. (είναι καλό από μένα, ένα τρίτο μέρος).

μπορείτε να ελέγξετε αν ο χρήστης το έχει εγκαταστήσει.

var installed=window.IP!==undefined;

μπορείτε να το πάρετε με javascript, αν είναι εγκατεστημένο, τότε var ip = IP.getClient (); var IPclient = ip.IP; // ενώ το ip.url είναι η διεύθυνση URL

ip=IP.getServer();
var IPserver=ip.IP;
var portServer=ip.port;
//while ip.url is the url

//or you can use IP.getBoth();

περισσότερες πληροφορίες εδώ: http://www.jackiszhp.info/tech/addon.IP.html

2
user1462586

Δεν είμαι javascript γκουρού, αλλά αν είναι δυνατόν θα μπορούσατε να ανοίξετε ένα iframe με http://www.whatismyip.com/automation/n09230945.asp ως πηγή και να διαβάσετε το περιεχόμενο του πλαισίου.

Επεξεργασία: αυτή η συνηθισμένη εργασία οφείλεται στην ασφάλεια μεταξύ τομέων.

2
UnkwnTech
<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
    <script>
        function systemip(){
        document.getElementById("ip").value = myip
        console.log(document.getElementById("ip").value)
        }
    </script>
2
Rajan Mandanka

Μπορείτε να δοκιμάσετε να χρησιμοποιήσετε το https://ip-api.io geo ip API. Για παράδειγμα με το jQuery:

$(document).ready( function() {
    $.getJSON("http://ip-api.io/api/json",
        function(data){
            console.log(data);
        }
    );
});

Επίσης https://ip-api.io ελέγχει τις βάσεις δεδομένων TOR, public proxy και spammer και παρέχει αυτές τις πληροφορίες επίσης.

Παράδειγμα απόκρισης:

{
  "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
  }
}
2
Andrey E

Εάν χρησιμοποιείτε το NGINX κάπου, μπορείτε να προσθέσετε αυτό το απόσπασμα και να ρωτήσετε τον δικό σας διακομιστή μέσω οποιουδήποτε εργαλείου AJAX.

location /get_ip {
    default_type text/plain;
    return 200 $remote_addr;
}
2
leitasat

Ένα πρόβλημα με μερικές από τις άλλες υπηρεσίες που έχω δει εδώ είναι ότι είτε δεν υποστηρίζουν το IPv6, είτε ενεργούν απρόβλεπτα με την παρουσία του IPv6.

Επειδή χρειάστηκα αυτή τη δυνατότητα μόνος μου σε ένα περιβάλλον διπλής στοίβας, έβαλα μαζί τη δική μου υπηρεσία διεύθυνσης IP, την οποία μπορείτε να βρείτε στο http://myip.addr.space/ . Υπάρχει επίσης μια γρήγορη αναφορά στο / help .

Για να το χρησιμοποιήσετε με το jQuery, χρησιμοποιήστε το τελικό σημείο /ip. Θα πάρετε πίσω απλό κείμενο που περιέχει τη διεύθυνση IP, ανάλογα με τον υποτομέα που χρησιμοποιείτε:

Το $.get("http://myip.addr.space/ip") επιστρέφει είτε IPv6 είτε IPv4, ανάλογα με το τι είναι διαθέσιμο στο σύστημα. ( JSFiddle )

$.get("http://ipv4.myip.addr.space/ip") επιστρέφει πάντα το IPv4 (ή αποτυγχάνει εάν δεν υπάρχει IPv4).

$.get("http://ipv6.myip.addr.space/ip") επιστρέφει πάντα το IPv6 (ή αποτυγχάνει εάν δεν υπάρχει IPv6).

1
Michael Hampton
<script type="application/javascript">
  function getip(json)
  {
     alert(json.ip); 
  }
 <script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>

Εκτέλεση πάνω από τη γραφή κλικ εδώ

1
Prateek

Έχω το δικό μου api back end με laravel, έτσι συνήθως έχω μόνο τα εξής:

$(document).ready( function() {

    $.getJSON( "http://api.whoisdoma.com/v1/ip/visitor?api_key=key",
        function(data){
          alert( data.ip);
        }
    );

});

Για πρόσθετη ασφάλεια, παρέχω ένα κλειδί API που απαιτείται για αποτελέσματα.

1
xaoseric

Η απλή λύση για τη λήψη της διεύθυνσης IP είναι να προσθέσετε τον ακόλουθο κώδικα στο αρχείο σας.

  $.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);

  });

Θα λάβει τη διεύθυνση IP όταν φορτώνεται η σελίδα.

1
Venkatesh Somu

Δοκιμάστε αυτό

$.get("http://ipinfo.io", function(response) {
   alert(response.ip);
}, "jsonp");
1
Harendra Kr. Jadon
$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});
1
Sagar Bhosale

Java Script για εύρεση IP

Για να λάβετε τη διεύθυνση IP πραγματοποιώ μια κλήση JSON στην υπηρεσία Free Web . σαν

[jsonip.com/json, ipinfo.io/json, www.telize.com/geoip, ip-api.com/json, api.hostip.info/get_json.php]

και διαβιβάζω το όνομα της συνάρτησης επανάκλησης που θα καλείται μετά την ολοκλήρωση της αίτησης.

<script type="text/javascript">
    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;
    }
</script>
<body>
    <form>
        <span id = "ipaddress"></span>
    </form>
</body>

για απόκριση xml code

WebRTC το οποίο δεν απαιτεί υποστήριξη διακομιστή

0
Yash

Δεν μπορεί να γίνει μόνο με Javascript (εκτός εάν οι πελάτες έχουν ένα plugin προγράμματος περιήγησης όπως περιγράφεται παραπάνω). Δεν μπορεί να γίνει με το Flash στον πελάτη. Αλλά μπορεί να γίνει στον πελάτη χρησιμοποιώντας μια εφαρμογή Java (και το javascript μπορεί να μιλήσει σε αυτό), αν και θα ζητήσει πλήρεις άδειες. π.χ. Δείτε http://www.findmyrouter.net

0
Trevor Cox