it-swarm.com.de

Wie erhalte ich die IP-Adresse des Kunden mit JavaScript?

Ich muss irgendwie die IP-Adresse des Kunden mit JavaScript abrufen. Kein serverseitiger Code, nicht einmal SSI.

Ich bin jedoch nicht gegen die Verwendung eines kostenlosen Skripts/Dienstes von Drittanbietern.

560
FlySwat

Ich würde einen Webdienst verwenden, der JSON zurückgeben kann (zusammen mit jQuery, um die Dinge einfacher zu machen). Nachfolgend finden Sie alle kostenlosen aktiven IP-Suchdienste, die ich finden konnte, und die Informationen, die sie zurückgeben. Wenn Sie mehr wissen, dann fügen Sie bitte einen Kommentar hinzu und ich werde diese Antwort aktualisieren.


DB-IP

Probieren Sie es aus: http://api.db-ip.com/addrinfo?api_key= < your API-Schlüssel > & addr = < IP-Adresse >

Kehrt zurück:

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

Einschränkungen:

  • 2.500 Anfragen pro Tag
  • Unterstützt keine JSONP-Rückrufe
  • Erfordert einen IP-Adressparameter
  • Erfordert eine E-Mail-Adresse, um Ihren API-Schlüssel zu erhalten
  • Kein SSL (https) mit dem kostenlosen Plan

Geobyte

Probieren Sie es aus: http://Gd.geobytes.com/GetCityDetails

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

Kehrt zurück:

{
  "geobytesforwarderfor": "",
  "geobytesremoteip": "116.12.250.1",
  "geobytesipaddress": "116.12.250.1",
  "geobytescertainty": "99",
  "geobytesinternet": "SA",
  "geobytescountry": "Saudi Arabia",
  "geobytesregionlocationcode": "SASH",
  "geobytesregion": "Ash Sharqiyah",
  "geobytescode": "SH",
  "geobyteslocationcode": "SASHJUBA",
  "geobytescity": "Jubail",
  "geobytescityid": "13793",
  "geobytesfqcn": "Jubail, SH, Saudi Arabia",
  "geobyteslatitude": "27.004999",
  "geobyteslongitude": "49.660999",
  "geobytescapital": "Riyadh ",
  "geobytestimezone": "+03:00",
  "geobytesnationalitysingular": "Saudi Arabian ",
  "geobytespopulation": "22757092",
  "geobytesnationalityplural": "Saudis",
  "geobytesmapreference": "Middle East ",
  "geobytescurrency": "Saudi Riyal",
  "geobytescurrencycode": "SAR",
  "geobytestitle": "Saudi Arabia"
}

Einschränkungen:

  • 16.384 Anfragen pro Stunde
  • Kein SSL (https) mit dem kostenlosen Plan
  • Kann den falschen Ort zurückgeben (ich bin in Singapur, nicht in Saudi-Arabien)

GeoIPLookup.io

Probieren Sie es aus: https://json.geoiplookup.io/api

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

Kehrt zurück:

{
    "ip": "116.12.250.1",
    "isp": "SGPOST",
    "org": "Singapore Post Ltd",
    "hostname": "116.12.250.1",
    "longitude": "103.807",
    "latitude": "1.29209",
    "postal_code": "",
    "city": "Singapore",
    "country_code": "SG",
    "country_name": "Singapore",
    "continent_code": "AS",
    "region": "Central Singapore",
    "district": "",
    "timezone_name": "Asia\/Singapore",
    "connection_type": "",
    "asn": "AS3758 SingNet",
    "currency_code": "SGD",
    "currency_name": "Singapore Dollar",
    "success": true
}

Einschränkungen:

  • Unbekannt

geoPlugin

Probieren Sie es aus: http://www.geoplugin.net/json.gp

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

Kehrt zurück:

{
  "geoplugin_request": "116.12.250.1",
  "geoplugin_status": 200,
  "geoplugin_credit": "Some of the returned data includes GeoLite data created by MaxMind, available from <a href=\\'http://www.maxmind.com\\'>http://www.maxmind.com</a>.",
  "geoplugin_city": "Singapore",
  "geoplugin_region": "Singapore (general)",
  "geoplugin_areaCode": "0",
  "geoplugin_dmaCode": "0",
  "geoplugin_countryCode": "SG",
  "geoplugin_countryName": "Singapore",
  "geoplugin_continentCode": "AS",
  "geoplugin_latitude": "1.2931",
  "geoplugin_longitude": "103.855797",
  "geoplugin_regionCode": "00",
  "geoplugin_regionName": "Singapore (general)",
  "geoplugin_currencyCode": "SGD",
  "geoplugin_currencySymbol": "&#36;",
  "geoplugin_currencySymbol_UTF8": "$",
  "geoplugin_currencyConverter": 1.4239
}

Einschränkungen:

  • 120 Anfragen pro Minute
  • Kein SSL (https) mit dem kostenlosen Plan

Hacker Target

Probieren Sie es aus: https://api.hackertarget.com/geoip/?q= < IP-Adresse >

Kehrt zurück:

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

Einschränkungen:

  • 50 Anfragen pro Tag
  • Unterstützt keine JSONP-Rückrufe
  • Erfordert einen IP-Adressparameter
  • Gibt einfachen Text zurück

ipapi.co

Probieren Sie es aus: https://ipapi.co/json/

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

Kehrt zurück:

{
  "ip": "116.12.250.1",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "country": "SG",
  "country_name": "Singapore",
  "postal": null,
  "latitude": 1.2855,
  "longitude": 103.8565,
  "timezone": "Asia/Singapore"
}

Einschränkungen:

  • 1.000 Anfragen pro Tag
  • Benötigt SSL (https)

IP-API.com

Probieren Sie es aus: http://ip-api.com/json

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

Kehrt zurück:

{
  "as": "AS3758 SingNet",
  "city": "Singapore",
  "country": "Singapore",
  "countryCode": "SG",
  "isp": "SingNet Pte Ltd",
  "lat": 1.2931,
  "lon": 103.8558,
  "org": "Singapore Telecommunications",
  "query": "116.12.250.1",
  "region": "01",
  "regionName": "Central Singapore Community Development Council",
  "status": "success",
  "timezone": "Asia/Singapore",
  "Zip": ""
}

Einschränkungen:

  • 150 Anfragen pro Minute
  • Kein SSL (https) mit dem kostenlosen Plan

Ipdata.co

Probieren Sie es aus: https://api.ipdata.co

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

Kehrt zurück:

{
  "ip": "116.12.250.1",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "region_code": "01",
  "country_name": "Singapore",
  "country_code": "SG",
  "continent_name": "Asia",
  "continent_code": "AS",
  "latitude": 1.2931,
  "longitude": 103.8558,
  "asn": "AS3758",
  "organisation": "SingNet",
  "postal": "",
  "calling_code": "65",
  "flag": "https://ipdata.co/flags/sg.png",
  "emoji_flag": "\ud83c\uddf8\ud83c\uddec",
  "emoji_unicode": "U+1F1F8 U+1F1EC",
  "is_eu": false,
  "languages": [
    {
      "name": "English",
      "native": "English"
    },
    {
      "name": "Malay",
      "native": "Bahasa Melayu"
    },
    {
      "name": "Tamil",
      "native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
    },
    {
      "name": "Chinese",
      "native": "\u4e2d\u6587"
    }
  ],
  "currency": {
    "name": "Singapore Dollar",
    "code": "SGD",
    "symbol": "S$",
    "native": "$",
    "plural": "Singapore dollars"
  },
  "time_zone": {
    "name": "Asia/Singapore",
    "abbr": "+08",
    "offset": "+0800",
    "is_dst": false,
    "current_time": "2018-05-09T12:28:49.183674+08:00"
  },
  "threat": {
    "is_tor": false,
    "is_proxy": false,
    "is_anonymous": false,
    "is_known_attacker": false,
    "is_known_abuser": false,
    "is_threat": false,
    "is_bogon": false
  }
}

Einschränkungen:

  • 1.500 Anfragen pro Tag
  • Erfordert eine E-Mail-Adresse, um Ihren API-Schlüssel zu erhalten
  • Benötigt SSL (https)

IP-Suche

Probieren Sie es aus: https://ipfind.co/me?auth= < Ihr API-Schlüssel >

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

Kehrt zurück:

{
  "ip_address": "116.12.250.1",
  "country": "Singapore",
  "country_code": "SG",
  "continent": "Asia",
  "continent_code": "AS",
  "city": "Singapore",
  "county": null,
  "region": "Central Singapore",
  "region_code": "01",
  "timezone": "Asia/Singapore",
  "owner": null,
  "longitude": 103.8565,
  "latitude": 1.2855,
  "currency": "SGD",
  "languages": [
    "cmn",
    "en-SG",
    "ms-SG",
    "ta-SG",
    "zh-SG"
  ]
}

Einschränkungen:

  • 300 Anfragen pro Tag
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten

ipgeolocation

Probieren Sie es aus: https://api.ipgeolocation.io/ipgeo?apiKey= < Ihren API-Schlüssel >

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

Kehrt zurück:

{
  "ip": "116.12.250.1",
  "continent_code": "AS",
  "continent_name": "Asia",
  "country_code2": "SG",
  "country_code3": "SGP",
  "country_name": "Singapore",
  "country_capital": "Singapore",
  "state_prov": "Central Singapore",
  "district": "",
  "city": "Singapore",
  "zipcode": "",
  "latitude": "1.29209",
  "longitude": "103.807",
  "is_eu": false,
  "calling_code": "+65",
  "country_tld": ".sg",
  "languages": "cmn,en-SG,ms-SG,ta-SG,zh-SG",
  "country_flag": "https://ipgeolocation.io/static/flags/sg_64.png",
  "isp": "SGPOST",
  "connection_type": "",
  "organization": "Singapore Post Ltd",
  "geoname_id": "1880252",
  "currency": {
    "name": "Dollar",
    "code": "SGD"
  },
  "time_zone": {
    "name": "Asia/Singapore",
    "offset": 8,
    "is_dst": false,
    "current_time": "2018-06-12 09:06:49.028+0800"
  }
}

Einschränkungen:

  • 50.000 Anfragen pro Monat
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten

ipify

Probieren Sie es aus: https://api.ipify.org/?format=json

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

Kehrt zurück:

{
  "ip": "116.12.250.1"
}

Einschränkungen:

  • None

IPInfoDB

Probieren Sie es aus: https://api.ipinfodb.com/v3/ip-city/?key= < dein api key > & format = json

$.getJSON('https://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Kehrt zurück:

{
  "statusCode": "OK",
  "statusMessage": "",
  "ipAddress": "116.12.250.1",
  "countryCode": "SG",
  "countryName": "Singapore",
  "regionName": "Singapore",
  "cityName": "Singapore",
  "zipCode": "048941",
  "latitude": "1.28967",
  "longitude": "103.85",
  "timeZone": "+08:00"
}

Einschränkungen:

  • Zwei Anfragen pro Sekunde
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten

ipinfo.io

Probieren Sie es aus: https://ipinfo.io/json

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

Kehrt zurück:

{
  "ip": "116.12.250.1",
  "hostname": "No Hostname",
  "city": "Singapore",
  "region": "Central Singapore Community Development Council",
  "country": "SG",
  "loc": "1.2931,103.8558",
  "org": "AS3758 SingNet"
}

Einschränkungen:

  • 1.000 Anfragen pro Tag

Ipregistry

Probieren Sie es aus: https://api.ipregistry.co/?key= < Ihr API-Schlüssel >

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

Kehrt zurück:

{
  "ip": "116.12.250.1",
  "type": "IPv4",
  "hostname": null,
  "connection": {
    "asn": 3758,
    "organization": "SingNet"
  },
  "currency": {
    "code": "SGD",
    "name": "Singapore Dollar",
    "plural": "Singapore dollars",
    "symbol": "SGD",
    "symbol_native": "SGD",
    "format": null
  },
  "location": {
    "continent": {
      "code": "AS",
      "name": "Asia"
    },
    "country": {
      "area": 692,
      "borders": [],
      "calling_code": "65",
      "capital": "Singapore",
      "code": "SG",
      "name": "Singapore",
      "population": 5638676,
      "population_density": 8148.38,
      "flag": {
        "emoji": "????????",
        "emoji_unicode": "U+1F1F8 U+1F1EC",
        "emojitwo": "https://cdn.ipregistry.co/flags/emojitwo/sg.svg",
        "noto": "https://cdn.ipregistry.co/flags/noto/sg.png",
        "twemoji": "https://cdn.ipregistry.co/flags/twemoji/sg.svg",
        "wikimedia": "https://cdn.ipregistry.co/flags/wikimedia/sg.svg"
      },
      "languages": [
        {
          "code": "cmn",
          "name": "cmn",
          "native": "cmn"
        },
        {
          "code": "en",
          "name": "English",
          "native": "English"
        },
        {
          "code": "ms",
          "name": "Malay",
          "native": "Melayu"
        },
        {
          "code": "ta",
          "name": "Tamil",
          "native": "தமிழ்"
        },
        {
          "code": "zh",
          "name": "Chinese",
          "native": "中文"
        }
      ],
      "tld": ".sg"
    },
    "region": {
      "code": null,
      "name": null
    },
    "city": "Singapore",
    "postal": "18",
    "latitude": 1.2997,
    "longitude": 103.8546,
    "language": {
      "code": "cmn",
      "name": "cmn",
      "native": "cmn"
    },
    "in_eu": false
  },
  "security": {
    "is_bogon": false,
    "is_tor": false,
    "is_tor_exit": false,
    "is_proxy": false,
    "is_anonymous": false,
    "is_abuser": false,
    "is_attacker": false,
    "is_threat": false
  },
  "time_zone": {
    "id": "Asia/Singapore",
    "abbreviation": "SGT",
    "current_time": "2019-08-01T01:06:28+08:00",
    "name": "Singapore Standard Time",
    "offset": 28800,
    "in_daylight_saving": false
  }
}

Einschränkungen:

  • Der kostenlose Plan umfasst 100.000 Anfragen
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten

ipstack (ehemals freegeoip.net)

Probieren Sie es aus: http://api.ipstack.com/ < ip address >? access_key = <Ihr API-Schlüssel>

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

Kehrt zurück:

{
    "ip": "116.12.250.1",
    "type": "ipv4",
    "continent_code": "AS",
    "continent_name": "Asia",
    "country_code": "SG",
    "country_name": "Singapore",
    "region_code": "01",
    "region_name": "Central Singapore Community Development Council",
    "city": "Singapore",
    "Zip": null,
    "latitude": 1.2931,
    "longitude": 103.8558,
    "location": {
        "geoname_id": 1880252,
        "capital": "Singapore",
        "languages": [{
            "code": "en",
            "name": "English",
            "native": "English"
        },
        {
            "code": "ms",
            "name": "Malay",
            "native": "Bahasa Melayu"
        },
        {
            "code": "ta",
            "name": "Tamil",
            "native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
        },
        {
            "code": "zh",
            "name": "Chinese",
            "native": "\u4e2d\u6587"
        }],
        "country_flag": "http:\/\/assets.ipstack.com\/flags\/sg.svg",
        "country_flag_emoji": "\ud83c\uddf8\ud83c\uddec",
        "country_flag_emoji_unicode": "U+1F1F8 U+1F1EC",
        "calling_code": "65",
        "is_eu": false
    }
}

Einschränkungen:

  • 10.000 Anfragen pro Monat
  • Erfordert einen IP-Adressparameter
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten
  • Kein SSL (https) mit dem kostenlosen Plan

jsonip.com

Probieren Sie es aus: https://jsonip.com

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

Kehrt zurück:

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

Einschränkungen:

  • Die Antwort beinhaltet Upsell und Politik

JSON-Test

Probieren Sie es aus: http://ip.jsontest.com/

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

Kehrt zurück:

{
  "ip": "116.12.250.1"
}

Einschränkungen:

  • Kein SSL (https)
  • Es geht viel runter (über die Quote), deshalb würde ich es nicht für die Produktion verwenden
  • Gibt die IPv6-Adresse zurück, wenn Sie eine haben, die möglicherweise nicht Ihren Wünschen entspricht

Nekudo

Probieren Sie es aus: https://geoip.nekudo.com/api

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

Kehrt zurück:

{
  "city": "Singapore",
  "country": {
    "name": "Singapore",
    "code": "SG"
  },
  "location": {
    "accuracy_radius": 50,
    "latitude": 1.2855,
    "longitude": 103.8565,
    "time_zone": "Asia/Singapore"
  },
  "ip": "116.12.250.1"
}

Einschränkungen:

  • Von Werbeblockern mithilfe der EasyPrivacy-Liste blockiert

SmartIP

Probieren Sie es aus: https://smartip.io/api/?api_key= < Ihren API-Schlüssel >

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

Kehrt zurück:

{
  "status-code": 200,
  "country": {
    "is-metric": true,
    "is-in-europe": false,
    "region-geo-id": null,
    "continent-geo-id": 6255147,
    "country-geo-id": 1880251,
    "region-code": null,
    "region-name": null,
    "continent-code": "AS",
    "continent-name": "Asia",
    "capital": "Singapur",
    "country-name": "Singapore",
    "country-two-letter-iso-code": "SG",
    "country-iso-code": "SG"
  },
  "location": {
    "metro-code": null,
    "longitude": 103.8547,
    "latitude": 1.2929,
    "timezone": "Asia/Singapore",
    "Zip-code": null,
    "city": "Singapore"
  },
  "asn": {
    "organization": "SingNet",
    "asn": "AS3758"
  },
  "currency": {
    "native-name": "新币",
    "code": "SGD",
    "name": "Singapore Dollar",
    "symbol": "$"
  },
  "timezone": {
    "is-daylight-saving": false,
    "gmt-offset": 28800,
    "date-time": "2019-08-23T14:22:11+08:00",
    "Microsoft-name": "Singapore Standard Time",
    "iana-name": "Asia/Singapore"
  },
  "security": {
    "is-crawler": false,
    "is-proxy": false,
    "is-tor": false,
    "tor-insights": null,
    "proxy-insights": null,
    "crawler-insights": null
  },
  "crypto": {
    "is-crypto-node": false,
    "crypto-insights": null
  },
  "user-agent": {
    "os": {
      "name": "Windows",
      "platform": "x64",
      "version": "10",
      "family": "Windows"
    },
    "device": {
      "brand": "",
      "model": "",
      "family": "desktop"
    },
    "engine-version": "",
    "engine": "Blink",
    "name": "Chrome",
    "type": "browser",
    "header": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    "version": "76.0.3809.100",
    "family": "Chrome"
  },
  "error": null,
  "hostname": "116.12.250.1",
  "ip-type": "ipv4",
  "ip": "116.12.250.1"
}

Einschränkungen:

  • 250.000 Anfragen pro Monat
  • Erfordert eine Registrierung, um Ihren API-Schlüssel zu erhalten
  • Benötigt SSL (https)

Bedenken Sie, dass Ihre Laufleistung in Bezug auf Kontingent und Betriebszeit variieren kann, da es sich um kostenlose Dienste handelt. Wer weiß, wann/ob sie später offline geschaltet werden (Anlage A: Telize )? . Die meisten dieser Dienste bieten auch eine kostenpflichtige Stufe für den Fall, dass Sie weitere Funktionen wie die SSL-Unterstützung wünschen.

Wie in den Kommentaren unten erwähnt, sind die Anforderungsquoten größtenteils akademisch, da dies clientseitig geschieht und die meisten Endbenutzer das Kontingent niemals überschreiten werden.

UPDATES

  • 01.02.2016: Entfernt Telize (bietet kein kostenloses Abo mehr an)
  • 18.04.2016: Entfernt freegeoip.net (außer Betrieb)
  • 26.04.2016: DB-IP hinzugefügt
  • 26.04.2016: Hacker-Ziel hinzugefügt
  • 06.07.2016: Wiedereinsetzung freegeoip.net
  • 06.07.2016: Entfernt ip-json.rhcloud.com (Dead Link)
  • 21.12.2016: Hacker-Ziel (außer Betrieb) entfernt
  • 10.02.2017: Nekudo hinzugefügt
  • 20.04.2017: Hinzugefügt ipapi.co (danke Ahmad Awais)
  • 24.04.2017: Wiedereinsetzung Hacker-Ziel
  • 24.04.2017: Entfernt Snoopi.io (außer Betrieb)
  • 16.07.2017: Hinzugefügt IP Find (danke JordanC)
  • 16.07.2017: Die Beschränkung für kostenlose Pakete, die SSL nicht unterstützen, wurde aktualisiert
  • 25.09.2017: Hinzugefügt Dumme Web Tools (Danke Cœur)
  • 16.03.2008: Hinzugefügt Ipdata.co (danke Jonathan)
  • 14.04.2008: freegeoip.net umbenannt in ipstack (danke MA-Maddin)
  • 16.04.2008: Hinzugefügt GeoIPLookup.io (danke Rob Waa)
  • 6/11/2018: Hinzugefügt ipgeolocation (danke Ejaz Ahmed)
  • 7/31/2019: Hinzugefügt Ipregistry (danke Laurent)
  • 8/16/2019: Hinzugefügt SmartIP.io (danke kevinj)
  • 22.08.2013: Entfernt Dumme Web Tools (außer Betrieb)
623
thdoan

Update : Ich wollte immer eine min/uglified-Version des Codes erstellen, daher hier ein ES6 Promise-Code:

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

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

Hinweis: Dieser neue minimierte Code würde nur eine einzelne IP zurückgeben, wenn Sie alle IPs des Benutzers (die je nach seinem Netzwerk mehr sein könnten) verwenden möchten der ursprüngliche Code ...


dank WebRTC ist es sehr einfach, in von WebRTC unterstützten Browsern (zumindest für den Moment) lokale IP-Adressen zu erhalten. Ich habe den Quellcode geändert, die Zeilen reduziert und keine Stun-Anfragen gestellt, da Sie nur die lokale IP möchten, nicht die öffentliche IP. Der folgende Code funktioniert in den neuesten Versionen von Firefox und Chrome. Führen Sie einfach das Snippet aus und überzeugen Sie sich selbst:

function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
  var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
  var pc = new myPeerConnection({iceServers: []}),
    noop = function() {},
    localIPs = {},
    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
    key;

  function ipIterate(ip) {
    if (!localIPs[ip]) onNewIP(ip);
    localIPs[ip] = true;
  }
  pc.createDataChannel(""); //create a bogus data channel
  pc.createOffer(function(sdp) {
    sdp.sdp.split('\n').forEach(function(line) {
      if (line.indexOf('candidate') < 0) return;
      line.match(ipRegex).forEach(ipIterate);
    });
    pc.setLocalDescription(sdp, noop, noop);
  }, noop); // create offer and set local description
  pc.onicecandidate = function(ice) { //listen for candidate events
    if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
  };
}



var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);

function addIP(ip) {
  console.log('got ip: ', ip);
  var li = document.createElement('li');
  li.textContent = ip;
  ul.appendChild(li);
}

findIP(addIP);
<h1> Demo retrieving Client IP using WebRTC </h1>

was hier passiert, ist, dass wir eine Dummy-Peer-Verbindung herstellen, und damit der Remote-Peer mit uns Kontakt aufnehmen kann, tauschen wir im Allgemeinen Eiskandidaten miteinander aus. Durch Lesen der Eiskandidaten (aus der lokalen Sitzungsbeschreibung und onIceCandidateEvent) können wir die IP des Benutzers ermitteln.

woher ich Code genommen habe -> Quelle

259
mido

Sie können es über den Server mit JSONP weiterleiten

Und während Sie googeln, um eine zu finden, finden Sie diese hier auf SO Kann ich eine DNS-Suche (Hostname zu IP-Adresse) mit clientseitigem Javascript durchführen?

<script type="application/javascript">
    function getip(json){
      alert(json.ip); // alerts the ip address
    }
</script>

<script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"></script>

Hinweis: Die telize.com-API ist dauerhaft zum 15. November 2015 heruntergefahren .

175
Chad Grant

Die meisten Antworten hier "umgehen" den Bedarf an serverseitigem Code, indem sie ... den Server eines anderen treffen. Dies ist eine absolut gültige Technik, es sei denn, Sie benötigen , um die IP-Adresse abzurufen, ohne einen Server zu treffen.

Herkömmlicherweise war dies ohne ein Plugin nicht möglich (und selbst dann würden Sie wahrscheinlich die falsche IP-Adresse erhalten, wenn Sie sich hinter einem NAT befinden. Router), aber mit dem Aufkommen von WebRTC ist es tatsächlich möglich, dies zu tun ... Wenn Sie als Ziel angeben Browser, die WebRTC unterstützen (derzeit: Firefox, Chrome und Opera).

Bitte lesen Sie die Antwort von mido, um zu erfahren, wie Sie mithilfe von WebRTC nützliche Client-IP-Adressen abrufen können.

102
Shog9

Sie können einen Ajax-Anruf bei hostip.info oder einem ähnlichen Dienst tätigen ...

function myIP() {
    if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest();
    else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.open("GET","http://api.hostip.info/get_html.php",false);
    xmlhttp.send();

    hostipInfo = xmlhttp.responseText.split("\n");

    for (i=0; hostipInfo.length >= i; i++) {
        ipAddress = hostipInfo[i].split(":");
        if ( ipAddress[0] == "IP" ) return ipAddress[1];
    }

    return false;
}

Als Bonus werden Geolokalisierungsinformationen im selben Anruf zurückgegeben.

81
Malta
Versuche dies
$.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);
    });
});

Geige

75
Sridhar R

Suchen Sie nicht weiter

Check out http://www.ipify.org/

Nach ihnen:

  • Sie können es unbegrenzt verwenden (auch wenn Sie Millionen von Anfragen pro Minute ausführen).
  • ipify ist komplett Open Source (siehe GitHub-Repository ).

Hier ist ein funktionierendes JS-Beispiel (anstatt sich zu fragen, warum diese Antwort so wenige Stimmen hat, versuchen Sie es selbst, um sie in Aktion zu sehen):

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

Zu faul zum Kopieren/Einfügen? Ich mag das. Hier ist eine ???? Demo

Zu faul zu klicken? :O

Hinweis : Schalten Sie Adblock Plus/uBlock & co aus, bevor Sie die Demo ausführen. Andernfalls funktioniert es einfach nicht.

Ich habe nichts mit dem IPify-Team zu tun. Ich finde es einfach lächerlich cool, dass jemand einen solchen Service für das Allgemeinwohl erbringt.

55
FloatingRock

Das kannst du nicht. Sie müssten einen Server fragen.

54
SteveShaffer

Sie können hierfür meinen Dienst http://ipinfo.io verwenden, der Ihnen die Client-IP, den Hostnamen, die Geolocation-Informationen und den Netzwerkbesitzer angibt. Hier ist ein einfaches Beispiel, das die IP protokolliert:

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

Hier ist ein ausführlicheres JSFiddle-Beispiel, das auch die vollständigen Antwortinformationen ausgibt, sodass Sie alle verfügbaren Details sehen können: http://jsfiddle.net/zK5FN/2/

26
Ben Dowling

Fügen Sie diesen Code in Ihre Seite ein: <script type="text/javascript" src="http://l2.io/ip.js"></script>

mehr doc hier

18
L2.IO

Ich würde sagen, dass Tschad und Malta eine gute Antwort haben. Ihre sind jedoch kompliziert. Daher schlage ich diesen Code vor, den ich in Anzeigen nach Ländern gefunden habe

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

</script>

Kein Ajax. Einfach nur Javascripts. : D

Wenn Sie zu http://j.maxmind.com/app/geoip.js gehen, werden Sie sehen, dass es enthält

function geoip_country_code() { return 'ID'; }
function geoip_country_name() { return 'Indonesia'; }
function geoip_city()         { return 'Jakarta'; }
function geoip_region()       { return '04'; }
function geoip_region_name()  { return 'Jakarta Raya'; }
function geoip_latitude()     { return '-6.1744'; }
function geoip_longitude()    { return '106.8294'; }
function geoip_postal_code()  { return ''; }
function geoip_area_code()    { return ''; }
function geoip_metro_code()   { return ''; }

Es beantwortet die Frage noch nicht wirklich, weil

http://j.maxmind.com/app/geoip.js enthält die IP nicht (obwohl ich wette, dass sie die IP verwendet, um das Land zu ermitteln).

Aber es ist so einfach, ein PhP-Skript zu erstellen, das so etwas wie popt

function visitorsIP()   { return '123.123.123.123'; }

Das machen. Setzen Sie http://yourdomain.com/yourip.php .

Dann mach

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

In der Frage wird ausdrücklich darauf hingewiesen, dass kein Skript eines Drittanbieters verwendet werden soll. Es geht nicht anders. Javascript kann Ihre IP nicht kennen. Aber auch andere Server, auf die mit Javascript zugegriffen werden kann, funktionieren problemlos.

16
user4951

Zu dieser Frage gibt es zwei Interpretationen. Die meisten Leute interpretierten "Client-IP" als die öffentliche IP-Adresse, die der Webserver außerhalb des LAN und außerhalb des Internets sieht. In den meisten Fällen ist dies jedoch nicht die IP-Adresse des Client-Computers

Ich benötigte die echte IP-Adresse des Computers, auf dem der Browser ausgeführt wird, der meine JavaScript-Software hostet (bei der es sich fast immer um eine lokale IP-Adresse in einem LAN handelt, das sich hinter einer Schicht von NAT befindet).

Mido hat oben eine FANTASTISCHE Antwort gepostet, die anscheinend die einzige Antwort ist, die wirklich die IP-Adresse des Kunden liefert.

Danke dafür, Mido!

Die dargestellte Funktion wird jedoch asynchron ausgeführt. Ich muss die IP-Adresse in meinem Code tatsächlich VERWENDEN. Bei einer asynchronen Lösung kann ich versuchen, die IP-Adresse zu verwenden, bevor sie abgerufen/gelernt/gespeichert wird. Ich musste in der Lage sein, auf die Ergebnisse zu warten, bevor ich sie verwendete.

Hier ist eine "Wartbare" Version von Midos Funktion. Ich hoffe es hilft jemand anderem:

function findIP(onNewIP) { //  onNewIp - your listener function for new IPs
    var promise = new Promise(function (resolve, reject) {
        try {
            var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
            var pc = new myPeerConnection({ iceServers: [] }),
                noop = function () { },
                localIPs = {},
                ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
                key;
            function ipIterate(ip) {
                if (!localIPs[ip]) onNewIP(ip);
                localIPs[ip] = true;
            }
            pc.createDataChannel(""); //create a bogus data channel
            pc.createOffer(function (sdp) {
                sdp.sdp.split('\n').forEach(function (line) {
                    if (line.indexOf('candidate') < 0) return;
                    line.match(ipRegex).forEach(ipIterate);
                });
                pc.setLocalDescription(sdp, noop, noop);
            }, noop); // create offer and set local description

            pc.onicecandidate = function (ice) { //listen for candidate events
                if (ice && ice.candidate && ice.candidate.candidate && ice.candidate.candidate.match(ipRegex)) {
                    ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
                }
                resolve("FindIPsDone");
                return;
            };
        }
        catch (ex) {
            reject(Error(ex));
        }
    });// New Promise(...{ ... });
    return promise;
};

//This is the callback that gets run for each IP address found
function foundNewIP(ip) {
    if (typeof window.ipAddress === 'undefined')
    {
        window.ipAddress = ip;
    }
    else
    {
        window.ipAddress += " - " + ip;
    }
}

//This is How to use the Waitable findIP function, and react to the
//results arriving
var ipWaitObject = findIP(foundNewIP);        // Puts found IP(s) in window.ipAddress
ipWaitObject.then(
    function (result) {
        alert ("IP(s) Found.  Result: '" + result + "'. You can use them now: " + window.ipAddress)
    },
    function (err) {
        alert ("IP(s) NOT Found.  FAILED!  " + err)
    }
);


 

   
<h1>Demo "Waitable" Client IP Retrieval using WebRTC </h1>
15
BRebey

Mit Smart-IP.net Geo-IP API . Zum Beispiel mit jQuery:

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

Es gibt einen einfacheren und kostenlosen Ansatz, bei dem Sie Ihren Besucher nicht um Erlaubnis bitten müssen.

Es besteht darin, eine sehr einfache Ajax POST -Anforderung an http://freegeoip.net/json zu senden. Sobald Sie Ihre Standortinformationen in JSON erhalten haben, reagieren Sie entsprechend, indem Sie die Seite aktualisieren oder auf eine neue umleiten.

So senden Sie Ihre Anfrage nach Standortinformationen:

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

Nun, ich schweife von der Frage ab, aber ich hatte heute ein ähnliches Bedürfnis und obwohl ich die ID des Kunden mit Javascript nicht finden konnte, habe ich Folgendes getan.

Auf der Serverseite: -

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

Mit Javascript

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

Ich verwende ASP.Net Ajax, aber Sie können getElementById anstelle von $ get () verwenden.

Was passiert ist, ich habe ein verstecktes div-Element auf der Seite mit der IP des Benutzers vom Server gerendert. Als in Javascript lade ich nur diesen Wert.

Dies könnte für einige Leute mit ähnlichen Anforderungen wie Ihre hilfreich sein (wie ich, obwohl ich das nicht herausgefunden hatte).

Prost!

12
Cyril Gupta

Im Allgemeinen nicht möglich, es sei denn, Sie nutzen einen externen Dienst.

11
Eugene Lazutkin

Sie können die JavaScript-Bibliothek serinfo.io verwenden.

<script type="text/javascript" src="userinfo.0.0.1.min.js"></script>

UserInfo.getInfo(function(data) {
  alert(data.ip_address);
}, function(err) {
  // Do something with the error
});

Sie können auch requirejs verwenden, um das Skript zu laden.

Sie erhalten die IP-Adresse Ihres Besuchers sowie einige Daten zu dessen Standort (Land, Stadt usw.). Es basiert auf der maxmind Geoip-Datenbank.

Haftungsausschluss: Ich habe diese Bibliothek geschrieben

9
Vincent Durmont

Holen Sie sich Ihre IP mit jQuery

können Sie Ihre öffentliche IP-Adresse mit einer Zeile JS erhalten? Es gibt einen kostenlosen Service, der dies für Sie anbietet, und Sie müssen lediglich eine Anfrage stellen:

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

Damit das obige Snippet funktioniert, muss Ihr Browser CORS (Cross-Origin Request Sharing) unterstützen. Andernfalls würde eine Sicherheitsausnahme ausgelöst. In älteren Browsern können Sie diese Version verwenden, die eine JSON-P-Anforderung verwendet:

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

Es gibt keine wirklich zuverlässige Möglichkeit, die IP-Adresse des Clientcomputers abzurufen.

Dies geht einige der Möglichkeiten durch. Der Code, der Java verwendet, bricht ab, wenn der Benutzer über mehrere Schnittstellen verfügt.

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

Wenn Sie sich die anderen Antworten hier ansehen, möchten Sie möglicherweise die öffentliche IP-Adresse des Clients abrufen. Dies ist wahrscheinlich die Adresse des Routers, über den die Verbindung zum Internet hergestellt wird. Viele der anderen Antworten hier sprechen darüber. Ich würde empfehlen, eine eigene serverseitige Seite zu erstellen und zu hosten, um die Anforderung zu empfangen und mit der IP-Adresse zu antworten, anstatt von dem Dienst eines anderen abhängig zu sein, der möglicherweise weiterhin funktioniert oder nicht.

8
Sarel Botha

Javascript/jQuery ruft die IP-Adresse und den Standort des Kunden ab (Land, Stadt)

Sie müssen nur ein Tag mit "src" -Link zum Server einbetten. Der Server gibt "codehelper_ip" als Object/JSON zurück und Sie können es sofort verwenden.

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

Weitere Informationen finden Sie unter Javascript erkennt reale IP-Adresse plus Land

Wenn Sie jQUery verwenden, können Sie Folgendes versuchen:

console.log(codehelper_ip); 

Es werden weitere Informationen zum zurückgegebenen Objekt angezeigt.

Wenn Sie eine Rückruffunktion wünschen, versuchen Sie dies bitte:

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

Der Appspot.com-Rückrufservice ist nicht verfügbar. ipinfo.io scheint zu funktionieren.

Ich habe einen zusätzlichen Schritt gemacht und alle Geoinformationen mit AngularJS abgerufen. (Dank an Ricardo) Schau es dir an.

<div ng-controller="geoCtrl">
  <p ng-bind="ip"></p>
  <p ng-bind="hostname"></p>
  <p ng-bind="loc"></p>
  <p ng-bind="org"></p>
  <p ng-bind="city"></p>
  <p ng-bind="region"></p>
  <p ng-bind="country"></p>
  <p ng-bind="phone"></p>
</div>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular-route.min.js"></script>
<script>
'use strict';
var geo = angular.module('geo', [])
.controller('geoCtrl', ['$scope', '$http', function($scope, $http) {
  $http.jsonp('http://ipinfo.io/?callback=JSON_CALLBACK')
    .success(function(data) {
    $scope.ip = data.ip;
    $scope.hostname = data.hostname;
    $scope.loc = data.loc; //Latitude and Longitude
    $scope.org = data.org; //organization
    $scope.city = data.city;
    $scope.region = data.region; //state
    $scope.country = data.country;
    $scope.phone = data.phone; //city area code
  });
}]);
</script>

Arbeitsseite hier: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html

8
Yamenator

Verwenden Sie ipdata.co .

Die API stellt auch Geolocation-Daten bereit und verfügt über 10 globale Endpunkte, die jeweils mehr als 800 Millionen Anfragen pro Tag verarbeiten können!

Diese Antwort verwendet einen "Test" -API-Schlüssel, der sehr begrenzt ist und nur zum Testen einiger Aufrufe gedacht ist. Anmelden für Ihren eigenen kostenlosen API-Schlüssel und Sie erhalten täglich bis zu 1500 Anfragen für die Entwicklung.

$.get("https://api.ipdata.co?api-key=test", function (response) {
    $("#response").html(response.ip);
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>
7
Jonathan

Ich mag api.ipify.org wirklich, weil es sowohl HTTP als auch HTTPS unterstützt.

Im Folgenden finden Sie einige Beispiele für das Abrufen der IP-Adresse mithilfe von _api.ipify.org_ mithilfe von jQuery.

JSON-Format über 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-Format über 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>_

Textformat über HTTPS

Wenn Sie es nicht in JSON wollen, gibt es auch eine Klartextantwort über HTTPS

_https://api.ipify.org
_

Textformat über HTTP

Und es gibt auch eine Klartextantwort über HTTP

_http://api.ipify.org
_
7
Tim Penner

Wenn Sie immer eine Datei einbinden, können Sie einen einfachen Ajax-Befehl ausführen:

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

Und ajax.getIp.php wäre das:

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

Ich werde eine Methode anbieten, die ich häufig verwende, wenn ich Informationen auf der HTML-Seite speichern möchte und mein Javascript Informationen lesen soll, ohne dass Parameter an das Javascript übergeben werden müssen. Dies ist besonders nützlich, wenn Ihr Skript nicht inline, sondern extern referenziert wird.

Es erfüllt jedoch nicht das Kriterium "Kein serverseitiges Skript". Wenn Sie jedoch serverseitiges Scripting in Ihren HTML-Code aufnehmen können, gehen Sie wie folgt vor:

Machen Sie versteckte Beschriftungselemente am unteren Rand Ihrer HTML-Seite, direkt über dem Endkörper-Tag.

Ihr Etikett sieht folgendermaßen aus:

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

Stellen Sie sicher, dass Sie eine Klasse mit dem Namen hiddenlabel erstellen und den visibility:hidden so einstellen, dass niemand das Etikett tatsächlich sieht. Auf diese Weise können Sie viele Dinge in versteckten Etiketten speichern.

Jetzt können Sie in Ihrem Javascript die auf dem Etikett gespeicherten Informationen (in diesem Fall die IP-Adresse des Kunden) wie folgt abrufen:

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

Jetzt entspricht Ihre Variable "ip" der IP-Adresse. Jetzt können Sie die IP an Ihre API-Anfrage übergeben.

* 2 JAHRE SPÄTER BEARBEITEN * Zwei kleinere Verbesserungen:

Ich benutze diese Methode routinemäßig, rufe aber das Label class="data" auf, weil es in der Tat eine Möglichkeit ist, Daten zu speichern. Der Klassenname "hiddenlabel" ist eine Art dummer Name.

Die zweite Änderung befindet sich im Stylesheet anstelle von visibility:hidden:

.data{
    display:none;
}

... ist der bessere Weg, es zu tun.

6
TARKUS

Sie können dies vollständig clientseitig und meistens in JavaScript tun, indem Sie ein Flash-Objekt verwenden, das der JS aufrufen kann. Flash can greift auf die IP-Adresse des lokalen Rechners zu, was möglicherweise nicht sehr nützlich ist.

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 ist die IP-Adresse. Rufen Sie dies einfach von Ihrem Browser aus auf.

http://smart-ip.net/geoip-json?callback=? [Ohne Anführungszeichen] und die IP erhalten.

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

Sie können Webdienste wie: http://ip-api.com/ verwenden

Beispiel:

<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

Zuallererst die tatsächliche Antwort : Es ist nicht möglich rein clientseitig ausgeführten Code verwenden, um Ihre eigene IP-Adresse herauszufinden.

Sie können jedoch einfach ein GET in Richtung https://api.muctool.de/whois ausführen und so etwas wie die IP-Adresse eines Kunden erhalten

{
"ip": "88.217.152.15",
"city": "Munich",
"isp": "M-net Telekommunikations GmbH",
"country": "Germany",
"countryIso": "DE",
"postalCode": "80469",
"subdivisionIso": "BY",
"timeZone": "Europe/Berlin",
"cityGeonameId": 2867714,
"countryGeonameId": 2921044,
"subdivisionGeonameId": 2951839,
"ispId": 8767,
"latitude": 48.1299,
"longitude": 11.5732,
"fingerprint": "61c5880ee234d66bded68be14c0f44236f024cc12efb6db56e4031795f5dc4c4",
"session": "69c2c032a88fcd5e9d02d0dd6a5080e27d5aafc374a06e51a86fec101508dfd3",
"fraud": 0.024,
"tor": false
}
4
Alex

Versuchen Sie Folgendes: http://httpbin.org/ip (oder https://httpbin.org/ip )

Beispiel mit https:

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

Quelle: http://httpbin.org/

3
SimC

Bitte schön:

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

Probieren Sie JAvascript aus

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

oder

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

3
user8392362

Wenn Sie NGINX irgendwo verwenden, können Sie dieses Snippet hinzufügen und Ihren eigenen Server mit einem beliebigen AJAX -Tool fragen.

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

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

Alle obigen Antworten haben einen Serverteil, keinen reinen Clientteil. Dies sollte vom Webbrowser bereitgestellt werden. Derzeit unterstützt dies kein Webbrowser.

Mit diesem Addon für Firefox: https://addons.mozilla.org/en-US/firefox/addon/ip-address/ Sie müssen Ihre Benutzer bitten, dieses Addon zu installieren. (Es ist gut von mir, einer dritten Partei).

sie können testen, ob der Benutzer es installiert hat.

var installed=window.IP!==undefined;

sie können es mit Javascript bekommen, wenn es installiert ist, dann var ip = IP.getClient (); var IPclient = ip.IP; // während ip.url die URL ist

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

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

weitere Informationen finden Sie hier: http://www.jackiszhp.info/tech/addon.IP.html

2
user1462586

Ich bin kein Javascript-Guru, aber wenn möglich, können Sie einen Iframe mit http://www.whatismyip.com/automation/n09230945.asp als Quelle öffnen und den Inhalt des Frames lesen.

Bearbeiten: Dies funktioniert aufgrund der domänenübergreifenden Sicherheit nicht.

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

Sie können versuchen, unsere https://ip-api.io Geo-IP-API zu verwenden. Zum Beispiel mit jQuery:

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

Außerdem https://ip-api.io prüft TOR, öffentliche Proxy- und Spammerdatenbanken und stellt diese Informationen ebenfalls bereit.

Beispielantwort:

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

Ein Problem mit einigen der anderen Dienste, die ich hier gesehen habe, ist, dass sie entweder IPv6 nicht unterstützen oder sich in Gegenwart von IPv6 unvorhersehbar verhalten.

Da ich diese Funktion in einer Dual-Stack-Umgebung selbst benötigt habe, habe ich meinen eigenen IP-Adressdienst zusammengestellt, den Sie unter http://myip.addr.space/ finden. Es gibt auch eine Kurzreferenz unter / help .

Verwenden Sie zur Verwendung mit jQuery den Endpunkt /ip. Je nach verwendeter Subdomain erhalten Sie Klartext mit der IP-Adresse zurück:

$.get("http://myip.addr.space/ip") gibt entweder IPv6 oder IPv4 zurück, je nachdem, was dem System zur Verfügung steht. ( JSFiddle )

$.get("http://ipv4.myip.addr.space/ip") gibt immer IPv4 zurück (oder schlägt fehl, wenn kein IPv4 vorhanden ist).

$.get("http://ipv6.myip.addr.space/ip") gibt immer IPv6 zurück (oder schlägt fehl, wenn kein IPv6 vorhanden ist).

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>

Führen Sie das obige Skript aus Klicken Sie hier

1
Prateek

Ich habe mein eigenes API-Backend mit Laravel, daher habe ich normalerweise nur Folgendes:

$(document).ready( function() {

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

});

Für zusätzliche Sicherheit stelle ich einen API-Schlüssel zur Verfügung, der erforderlich ist, um Ergebnisse zu erzielen.

1
xaoseric

Die einfache Lösung, um die IP-Adresse zu erhalten, besteht darin, den folgenden Code in Ihre Datei einzufügen.

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

  });

Es wird die IP-Adresse erhalten, wenn die Seite geladen wird.

1
Venkatesh Somu

Versuche dies

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

Java Script um IP zu finden

Um die IP-Adresse zu erhalten, rufe ich JSON beim Free Web Service auf . mögen

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

und ich übergebe den Namen der Rückruffunktion, die nach Abschluss der Anforderung aufgerufen wird.

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

für XML-Antwort Code

WebRTC was keine Serverunterstützung erfordert.

0
Yash

Es kann nicht mit Javascript alleine gemacht werden (es sei denn, die Clients haben ein Browser-Plugin wie oben beschrieben). Dies ist auch mit Flash auf dem Client nicht möglich. Dies kann jedoch auf dem Client mithilfe eines Java - Applets erfolgen (und Javascript kann damit kommunizieren), obwohl es zur Eingabe der vollständigen Berechtigungen auffordert. z.B. Siehe http://www.findmyrouter.net

0
Trevor Cox