जावास्क्रिप्ट का उपयोग करके क्लाइंट का आईपी पता कैसे प्राप्त करें?


560

मुझे किसी भी तरह जावास्क्रिप्ट का उपयोग करके ग्राहक के आईपी पते को पुनः प्राप्त करने की आवश्यकता है; कोई सर्वर साइड कोड, एसएसआई भी नहीं।

हालाँकि, मैं निशुल्क 3 पार्टी स्क्रिप्ट / सेवा का उपयोग करने के खिलाफ नहीं हूं।

जवाबों:


771

मैं एक वेब सेवा का उपयोग करूंगा जो JSON (चीजों को सरल बनाने के लिए jQuery के साथ) वापस कर सकती है। नीचे सभी मुफ्त सक्रिय आईपी ​​लुकअप सेवाएँ हैं जो मुझे मिल सकते हैं और वे जो जानकारी वापस करते हैं। यदि आप किसी भी अधिक के बारे में जानते हैं, तो कृपया एक टिप्पणी जोड़ें और मैं इस उत्तर को अपडेट करूंगा।


CloudFlare

इसे आज़माएँ: https://www.cloudflare.com/cdn-cgi/trace

// If your site is on Cloudflare, then you can use '/cdn-cgi/trace' instead
$.get('https://www.cloudflare.com/cdn-cgi/trace', function(data) {
    console.log(data)
})

यह दिखाता है:

fl=4f422
h=www.cloudflare.com
ip=54.193.27.106
ts=1575967108.245
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 Hypothesis-Via
colo=SJC
http=http/1.1
loc=US
tls=TLSv1.3
sni=plaintext
warp=off

सीमाएं:

  • सादा पाठ लौटाता है

डीबी आईपी

इसे आज़माएं: http://api.db-ip.com/addrinfo?api_key= < अपनी एपीआई कुंजी > और addr = < ip पता >

यह दिखाता है:

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

सीमाएं:

  • प्रति दिन 2,500 अनुरोध
  • JSONP कॉलबैक का समर्थन नहीं करता है
  • आईपी ​​पते के पैरामीटर की आवश्यकता है
  • अपनी API कुंजी प्राप्त करने के लिए एक ईमेल पते की आवश्यकता होती है
  • नि: शुल्क योजना के साथ कोई एसएसएल (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 अनुरोध
  • नि: शुल्क योजना के साथ कोई एसएसएल (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
}

सीमाएं:

  • प्रति घंटे 10,000 अनुरोध
  • फ्री एपीआई केवल गैर-वाणिज्यिक उपयोग की अनुमति देता है

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 प्रति मिनट अनुरोध
  • नि: शुल्क योजना के साथ कोई एसएसएल (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 कॉलबैक का समर्थन नहीं करता है
  • आईपी ​​पते के पैरामीटर की आवश्यकता है
  • सादा पाठ लौटाता है

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 अनुरोध
  • नि: शुल्क योजना के साथ कोई एसएसएल (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) की आवश्यकता है

आईपी ​​खोजें

इसे आज़माएं: https://ipfind.co/me?auth= < your api key >

$.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= < your api key >

$.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"
}

सीमाएं:

  • कोई नहीं

IPInfoDB

इसे आज़माएं: https://api.ipinfodb.com/v3/ip-city/?key= < your 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));
});

यह दिखाता है:

{
  "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 अनुरोध

Ipregistry

इसे आज़माएं: https://api.ipregistry.co/?key= < your api key >

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

यह दिखाता है:

{
  "ip" : "116.12.250.1",
  "type" : "IPv4",
  "hostname" : null,
  "carrier" : {
    "name" : null,
    "mcc" : null,
    "mnc" : null
  },
  "connection" : {
    "asn" : 3758,
    "domain" : "singnet.com.sg",
    "organization" : "SingNet Pte Ltd",
    "type" : "isp"
  },
  "currency" : {
    "code" : "SGD",
    "name" : "Singapore Dollar",
    "plural" : "Singapore dollars",
    "symbol" : "SGD",
    "symbol_native" : "SGD",
    "format" : {
      "negative" : {
        "prefix" : "-SGD",
        "suffix" : ""
      },
      "positive" : {
        "prefix" : "SGD",
        "suffix" : ""
      }
    }
  },
  "location" : {
    "continent" : {
      "code" : "AS",
      "name" : "Asia"
    },
    "country" : {
      "area" : 692.0,
      "borders" : [ ],
      "calling_code" : "65",
      "capital" : "Singapore",
      "code" : "SG",
      "name" : "Singapore",
      "population" : 5638676,
      "population_density" : 8148.38,
      "flag" : {
        "emoji" : "🇸🇬",
        "emoji_unicode" : "U+1F1F8 U+1F1EC",
        "emojitwo" : "https://cdn.ipregistry.co/flags/emojitwo/sg.svg",
        "noto" : "https://cdn.ipregistry.co/flags/noto/sg.png",
        "twemoji" : "https://cdn.ipregistry.co/flags/twemoji/sg.svg",
        "wikimedia" : "https://cdn.ipregistry.co/flags/wikimedia/sg.svg"
      },
      "languages" : [ {
        "code" : "cmn",
        "name" : "cmn",
        "native" : "cmn"
      }, {
        "code" : "en",
        "name" : "English",
        "native" : "English"
      }, {
        "code" : "ms",
        "name" : "Malay",
        "native" : "Melayu"
      }, {
        "code" : "ta",
        "name" : "Tamil",
        "native" : "தமிழ்"
      }, {
        "code" : "zh",
        "name" : "Chinese",
        "native" : "中文"
      } ],
      "tld" : ".sg"
    },
    "region" : {
      "code" : null,
      "name" : "Singapore"
    },
    "city" : "Singapore",
    "postal" : "96534",
    "latitude" : 1.28967,
    "longitude" : 103.85007,
    "language" : {
      "code" : "cmn",
      "name" : "cmn",
      "native" : "cmn"
    },
    "in_eu" : false
  },
  "security" : {
    "is_bogon" : false,
    "is_cloud_provider" : false,
    "is_tor" : false,
    "is_tor_exit" : false,
    "is_proxy" : false,
    "is_anonymous" : false,
    "is_abuser" : false,
    "is_attacker" : false,
    "is_threat" : false
  },
  "time_zone" : {
    "id" : "Asia/Singapore",
    "abbreviation" : "SGT",
    "current_time" : "2019-09-29T23:13:32+08:00",
    "name" : "Singapore Standard Time",
    "offset" : 28800,
    "in_daylight_saving" : false
  }
}

सीमाएं:

  • नि: शुल्क योजना में 100,000 अनुरोध शामिल हैं
  • अपनी API कुंजी प्राप्त करने के लिए पंजीकरण की आवश्यकता होती है

ipstack (पूर्व में freegeoip.net)

इसे आज़माएं: http://api.ipstack.com/ < ip address >? Access_key = <your api key>

$.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 अनुरोध
  • आईपी ​​पते के पैरामीटर की आवश्यकता है
  • अपनी API कुंजी प्राप्त करने के लिए पंजीकरण की आवश्यकता होती है
  • नि: शुल्क योजना के साथ कोई एसएसएल (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": "https://jsonip.com/about",
  "Pro!": "http://getjsonip.com",
  "Get Notifications": "https://jsonip.com/notify"
}

सीमाएं:

  • प्रतिक्रिया में अपसेल शामिल है

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) नहीं
  • बहुत नीचे चला जाता है (कोटा से अधिक), इसलिए मैं इसे उत्पादन के लिए उपयोग नहीं करूंगा
  • यदि आपके पास एक आईपीवी 6 पता है, तो आप जो चाहते हैं वह नहीं हो सकता है

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

सीमाएं:

  • EasyP गोपनीयता सूची का उपयोग करके विज्ञापन ब्लॉकर्स द्वारा अवरुद्ध

ध्यान रखें कि चूंकि ये सभी नि: शुल्क सेवाएं हैं, इसलिए आपका माइलेज कोटा और अपटाइम से अधिक होने के मामले में अलग-अलग हो सकता है, और कौन जानता है कि कब / यदि उन्हें सड़क से नीचे ले जाया जाएगा (प्रदर्शन A: Telize )। इन सेवाओं में से अधिकांश एक भुगतान स्तरीय प्रदान करते हैं, यदि आप एसएसएल समर्थन जैसी अधिक सुविधाएँ चाहते हैं।

इसके अलावा, जैसा कि नीचे दिए गए टिप्पणियों में उल्लेख किया गया है, अनुरोध कोटा अधिकांशतः शैक्षणिक है क्योंकि यह क्लाइंट-साइड हो रहा है और अधिकांश अंतिम उपयोगकर्ता कभी भी कोटा से अधिक नहीं होंगे।

अद्यतन


3
@AfolabiOlaoluwaAkinwumi आप कुछ इस तरह की कोशिश कर सकते हैं:$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });
thdoan

1
@skobaljic Re सीमाएं आमतौर पर कुछ भी नहीं कहती हैं: अच्छा बिंदु, और शायद एपीआई कुंजी की आवश्यकता वाले लोगों से दूर रहने का एक कारण है, क्योंकि कुंजी का उपयोग गिना जा सकता है।
निक राइस

2
@JohnWeisz सच है, लेकिन अगर ओपी का सीधा मतलब है कि वे केवल पृष्ठ को अपडेट कर सकते हैं और कुछ भी सर्वर-साइड (प्रश्न से अस्पष्ट) नहीं करते हैं तो ये विकल्प प्रश्न का ठीक जवाब देते हैं।
निक राइस

1
@RobWaa धन्यवाद, मैंने 4/14 अपडेट में विज्ञापन अवरोधक सीमा को जोड़ा। मैं शीघ्र ही geoiplookup.io जोड़ूंगा।
थुडू

1
ये सभी उत्तर किसी तीसरे पक्ष की सेवा पर निर्भर करते हैं, जो एक बड़ी कमी है, न केवल इसलिए कि आप उस सेवा पर समयबद्ध तरीके से प्रतिक्रिया दे रहे हैं, बल्कि इसलिए कि यदि यह नहीं होता है और आप एक एप्रॉपिएट टाइमआउट सेट नहीं करते हैं (जो हमेशा रहेगा बाद में की तुलना में सोनर हो), आप अपने पेज के लोड समय में देरी कर रहे होंगे, जो बिल्कुल भी अच्छा नहीं है। तो, ग्राहक के आईपी को वापस करने के लिए सिर्फ अपने स्वयं के सर्वर का उपयोग क्यों न करें ?, जो कि बीटीडब्ल्यू किसी भी प्रोग्रामिंग भाषा के साथ एक तुच्छ कार्य है।
डैनियल जे।

280

अंतिम अद्यतन

यह समाधान अधिक समय तक काम नहीं करेगा क्योंकि ब्राउज़र वेबब्रक लीक को ठीक कर रहे हैं: उस पर अधिक जानकारी के लिए इस अन्य प्रश्न को पढ़ें: RTCIceCandidate अब वापस आने वाला IP नहीं


अद्यतन : मैं हमेशा कोड का एक छोटा / छोटा संस्करण बनाना चाहता था, इसलिए यहाँ एक ES6 वादा कोड है:

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 के लिए धन्यवाद , WebRTC समर्थित ब्राउज़रों में स्थानीय आईपी प्राप्त करना बहुत आसान है (कम से कम अभी के लिए)। मैंने स्रोत कोड को संशोधित किया है, लाइनों को कम कर दिया है, कोई स्टन अनुरोध नहीं बना रहा है क्योंकि आप केवल स्थानीय आईपी चाहते हैं, सार्वजनिक आईपी नहीं, नीचे दिया गया कोड नवीनतम फ़ायरफ़ॉक्स और क्रोम में काम करता है, बस स्निपेट चलाएं और अपने आप को जांचें:

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 से) हम उपयोगकर्ता के आईपी को बता सकते हैं।

जहाँ से मैंने कोड लिया -> स्रोत


12
यहाँ सबसे अच्छा जवाब नीचे हाथ क्योंकि, अप भी भयानक GitHub रेपो के लिए धन्यवाद!
कानो

28
चेतावनी: यह आपके सार्वजनिक आईपी को नहीं दिखाता है, सिर्फ स्थानीय नेटवर्क को। आप इसका उपयोग किसी उपयोगकर्ता देश का पता लगाने के लिए नहीं कर सकते हैं, उदाहरण के लिए, यदि वे LAN पर हैं
FloatingRock

1
@FloatingRock आप STUN सर्वर का उपयोग करके (साथ ही सहकर्मी बनाते समय इसे कॉन्फ़िगर कर सकते हैं) सार्वजनिक IP प्राप्त कर सकते हैं, फिर, आपको STUN सर्वर को बनाए रखने / उपयोग करने की आवश्यकता होगी, सर्वर कोड को चित्र में लाएं।
mido

10
इसे WebRTC लीक के रूप में जाना जाता है। सभी मेयर ब्राउज़रों द्वारा तय किया जाना चाहिए, लेकिन ऐसा नहीं है। यहाँ अधिक जानकारी: privacytools.io/webrtc.html टोर-ब्राउज़र से संबंधित आपके वास्तविक-आईपी को लीक कर रहा है।
कापिटिन विटबार्ड

1
हालाँकि, मुझे यह उत्तर पसंद आया है, ग्राहक इस प्रक्रिया को WebRTC को अक्षम करके पुनः प्राप्त कर सकता है - Restoreprivacy.com/webrtc-leaks
ni8mr

175

आप इसे JSONP के साथ सर्वर साइड के माध्यम से रिले कर सकते हैं

और एक को खोजने के लिए जाते समय, एसओ पर यहां पाया कि क्या मैं क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करके डीएनएस लुकअप (होस्टनाम से आईपी एड्रेस) कर सकता हूं?

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

नोट: telize.com API 15 नवंबर, 2015 तक स्थायी रूप से बंद हो गया


45
जब मैं इस स्निपेट की सराहना करता हूं, तो मुझे लगता है कि जावास्क्रिप्ट पाठ सामग्री को लोड करना और मूल्यांकन करना कि फ़ंक्शन के माध्यम से एक गंभीर सुरक्षा जोखिम है। क्या होगा अगर प्रतिक्रिया की सामग्री बदल जाती है और यहां सभी 100+ लोग जो इस जवाब को वोट देते हैं और संभवतः उस स्निपेट का उपयोग संभव असुरक्षित सामग्री के साथ एक फ़ंक्शन को आमंत्रित करते हैं। अगर यह JSON स्ट्रिंग होता तो मैं केवल इसका उपयोग करता।
एनू

32
Error Over Quota This application is temporarily over its serving quota. Please try again later.
ब्रैड एम

28
यह एक अच्छा जवाब नहीं है क्योंकि इसमें सर्वर साइड अनुरोध शामिल है। प्रश्न स्पष्ट रूप से "शुद्ध जावास्क्रिप्ट" कहा गया है।
मीका

2
मीका, शुद्ध जावास्क्रिप्ट के साथ एक आईपी पता प्राप्त करने का कोई तरीका संभव नहीं है। मेरा सुझाव है कि आप NAT पर कुछ पढ़ना चाहते हैं और यह कैसे काम करता है। आपको अपना इंटरनेट आईपी पता वापस करने के लिए एक सर्वर की आवश्यकता है
चाड अनुदान

11
सेवा अब नीचे है।
सिरिल एन।

109

अधिकांश उत्तर यहां "काम करते हैं" के आसपास सर्वर-साइड कोड की आवश्यकता है ... किसी और के सर्वर को मारना। जो एक पूरी तरह से मान्य तकनीक है, जब तक कि आपको वास्तव में सर्वर से टकराने के बिना आईपी पता प्राप्त करने की आवश्यकता नहीं है।

परंपरागत रूप से यह किसी प्रकार के प्लगइन के बिना संभव नहीं था (और फिर भी, यदि आप NAT राउटर के पीछे थे , तो शायद आपको गलत आईपी ​​पता मिलेगा ), लेकिन वेबआरटीसी के आगमन के साथ वास्तव में ऐसा करना संभव है। । यदि आप उन ब्राउज़रों को लक्षित कर रहे हैं जो WebRTC (वर्तमान में: फ़ायरफ़ॉक्स, क्रोम और ओपेरा) का समर्थन करते हैं।

वेबआरटीसी का उपयोग करके आप उपयोगी ग्राहक आईपी पते कैसे प्राप्त कर सकते हैं, इस पर विवरण के लिए कृपया मिडो का उत्तर पढ़ें


23
@oscar: जो एक ही तकनीक (JSONP- लौटाया हुआ सर्वर-दृश्य IP) प्रतीत होता है, जो उसके उत्तर में उल्लिखित chad है। जो "नो सर्वर-साइड कोड" की ओपी आवश्यकता से मेल नहीं खाता है। लेकिन हां, यदि आप उस आवश्यकता को अनदेखा करते हैं, तो इसे पूरा करने का एक तरीका है।
शोग

WebRTC के कारण यह उत्तर पुराना है: stackoverflow.com/questions/20194722/…
अकाम

1
अपडेट किया गया, @ अकम। आपको कुछ महीने पहले इसे इंगित करने के लिए मिडो को कुछ प्रॉप्स देने चाहिए (YEARS के बाद लोगों द्वारा शर्मनाक गलत जवाब पोस्ट करने के लिए जो अभी भी सर्वर समर्थन की आवश्यकता है)।
शोग

WebRTC अधिक व्यापक रूप से अब समर्थित है ?!
ओल्डबॉय जूल

1
उस "CanIUse" लिंक के अनुसार, यह @BugWhisperer है। जब तक आपको आईई की जरूरत नहीं है।
शोग

81

आप hostj.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;
}

एक बोनस के रूप में, एक ही कॉल में जियोलोकेशन जानकारी वापस आ जाती है।


6
आप api.hostip.info/get_json.php का उपयोग करके JSON प्रतिनिधित्व भी प्राप्त कर सकते हैं , फिर JSON को ब्राउज़र फ़ंक्शन, jQuery या प्रोटोटाइप के साथ पार्स कर सकते हैं ।
ब्रैड फोल्केन्स

2
क्या " api.hostip.info/get_html.php " पर कोई अनुरोध सीमा है ? मैं इस एपीआई विवरण को कहां देख सकता हूं
नवीन लियोन

यह नेटवर्क फ़ायरवॉल का IP लौटाता है। वास्तविक ग्राहक आईपी नहीं। क्या कोई तरीका है जिससे हम वास्तविक ग्राहक आईपी प्राप्त कर सकते हैं?
लीला अडगुल्ला

76
इसे इस्तेमाल करे
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

या

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

बेला


इस $ .Get ( "काम करता है ipinfo.io ;," jsonp "", समारोह (प्रतिक्रिया) {चेतावनी (response.ip)}); लेकिन मैं एक चर में मूल्य कैसे संग्रहीत करूं? ऐसा लगता है कि यह अनुरोध लूप के बाहर गायब हो गया है

1
सभी नि: शुल्क आईपी लुकअप सेवाओं की सूची के लिए, आप stackoverflow.com/questions/391979/…
thdoan

आईपी ​​के मूल्य को वापस करने के लिए मैं इस फ़ंक्शन को कैसे भेजूं?
नेफ्ताली अकॉस्टा

67

आप नहीं कर सकते। आपको एक सर्वर से पूछना होगा।


5
यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
हिमांशु ४

28
लेकिन यह थोड़े करता है, है ना? मेरा मतलब है, अगर जवाब सिर्फ "नहीं, आप नहीं कर सकते हैं" तो मैं यह तर्क दूंगा कि यह वर्तमान में उखाड़ दिए गए की तुलना में अधिक सही उत्तर है "यहां, इस यादृच्छिक ऐप्पस ऐप का उपयोग करें," जो एक खतरनाक उत्तर की तरह लगता है सूची में सबसे ऊपर।
स्टीवशॉफर

16
IMO यह सही उत्तर है और इसे स्वीकार किया जाना चाहिए। प्रश्न विशेष रूप से कहता है "कोई सर्वर साइड कोड नहीं।"
मैथ्यूविथानम


2
@matthewwithanm मैं अधिक सहमत नहीं हो सका। मैं सभी उत्तरों के माध्यम से यह देखने के लिए स्क्रॉल कर रहा था कि क्या किसी ने वास्तव में यह कहा है - और इसे स्वयं एक उत्तर के रूप में पेश करने के लिए तैयार किया गया था। सभी उच्च उत्थान के उत्तर, जबकि जानकारीपूर्ण, सभी एक अलग प्रश्न का उत्तर देते हैं। प्रश्न का हवाला देते हुए: "मुझे किसी तरह क्लाइंट के आईपी पते को शुद्ध जावास्क्रिप्ट का उपयोग करने की आवश्यकता है; कोई सर्वर साइड कोड नहीं, यहां तक ​​कि एसएसआई भी नहीं।" यह उत्तर, तथ्यात्मक रूप से, सही उत्तर है। ब्राउज़र-सैंडबॉक्सेड जावास्क्रिप्ट यह (NAT या परदे के पीछे की परवाह किए बिना) नहीं कर सकता। यदि अन्य उत्तरों में से एक को स्वीकार करना है तो प्रश्न को बदल दिया जाना चाहिए।
वैली w ’

64

और मत देखो

चेक आउट http://www.ipify.org/

उनके अनुसार:

  • आप इसे बिना सीमा के उपयोग कर सकते हैं (भले ही आप प्रति मिनट लाखों अनुरोध कर रहे हों)।
  • ipify पूरी तरह से ओपन सोर्स है ( GitHub रिपॉजिटरी देखें )।

यहां एक काम करने वाला 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>

कॉपी / पेस्ट करने के लिए बहुत आलसी? मुझें यह पसंद है। यहाँ एक 💻 डेमो है

बहुत आलसी क्लिक करने के लिए? :O

नोट : डेमो चलाने से पहले Adblock Plus / uBlock & co को बंद कर दें .. अन्यथा, यह सिर्फ काम नहीं करेगा।

मुझे IPify टीम से कोई लेना- देना नहीं है। मुझे लगता है कि यह हास्यास्पद है कि कोई व्यक्ति इस तरह की सेवा प्रदान करेगा।


4
सबसे अच्छी बात यह है कि यह "https" से आता है, जबकि http आईपी सहायकों को मेरी कॉल अवरुद्ध हो जाएगी क्योंकि वे "सुरक्षित नहीं हैं"।
टेसा

हे, यह मुझे कोर त्रुटि दिखा रहा है, मुझे क्या करना चाहिए?
साबरप्रशांत

@saberprashant आप "HTTPS" का उपयोग कर रहे हैं?
फ्लोटिंगरॉक

@FloatingRock, नहीं मैं HTTP का उपयोग कर रहा हूँ
saberprashant

26

आप मेरी सेवा का उपयोग कर सकते हैं http://ipinfo.io का , जो आपको क्लाइंट आईपी, होस्टनाम, जियोलोकेशन की जानकारी और नेटवर्क का मालिक देगा। यहाँ एक सरल उदाहरण है जो IP को लॉग करता है:

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

यहाँ एक अधिक विस्तृत JSFiddle उदाहरण है जो पूर्ण प्रतिक्रिया की जानकारी को प्रिंट करता है, इसलिए आप सभी उपलब्ध विवरण देख सकते हैं: http://jsfiddle.net/zK5FN/2/


मिश्रित सामग्री नीति के मुद्दों, परिवर्तन से बचने के लिए http://ipinfo.ioकरने के लिए //ipinfo.ioया https
शमूएल ELH

हम आपकी सेवा का उपयोग करना चाहते हैं, क्या आपके पास Stackoverflow उपयोगकर्ताओं के लिए कोई छूट की पेशकश है?
मेहदी देघानी

@ मेढीदेघानी हम 50k req / month तक के लिए फ्री हैं, 100k के लिए एक बैकलिंक के साथ - देखें ipinfo.io/contact/creditlink
बेन डाउलिंग

19

इस कोड को अपने पेज में शामिल करें: <script type="text/javascript" src="http://l2.io/ip.js"></script>

यहाँ अधिक डॉक्टर


1
हम्म। यह दिलचस्प लग रहा है ... उनके पास कोई सीमा है?
इंडिपोपोलियन

1
पुस्तकालय ऑफ़लाइन
riccardo.tasso

L2.io रेफ के साथ जुड़े कुछ स्पैम स्पैम पॉप अप्स हैं: हाइब्रिड-analysis.com/sample/… नमूना में लिंक की एम्बेडिंग की अनुमति देता है जैसे 117.254.84.212:3000/getjs?nadipdata: "{" url ":" / " ? ip.js var = MYIP "," मेजबान ":" l2.io "," संदर्भ ":" website.com/... } "और screenheight = 768 और screenwidth = 1366 और टीएम = 1557565256073 और lib = सच और अंगुली की छाप = c2VwLW5vLXJlZGlyZWN0
वेन डिसूजा

16

मैं कहूंगा कि चाड और माल्टा का शानदार जवाब है। हालांकि, उनके जटिल हैं। इसलिए मैं इस कोड का सुझाव देता हूं जो मुझे देश प्लगइन द्वारा विज्ञापनों से मिला

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

कोई अजाक्स नहीं। बस सादा javascripts। : डी

यदि आप 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 में आईपी शामिल नहीं है (हालांकि मुझे यकीन है कि यह देश को प्राप्त करने के लिए आईपी का उपयोग करता है)।

लेकिन एक PhP स्क्रिप्ट बनाना इतना आसान है जो कुछ इस तरह से पॉप करता है

function visitorsIP()   { return '123.123.123.123'; }

वह बनाना। पर डाल http://yourdomain.com/yourip.php

फिर करो

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

प्रश्न विशेष रूप से थर्ड पार्टी स्क्रिप्ट का उपयोग नहीं करने का उल्लेख करता है। और कोई रास्ता नहीं है। जावास्क्रिप्ट आपके आईपी को नहीं जान सकता। लेकिन अन्य सर्वर जिन्हें जावास्क्रिप्ट के माध्यम से एक्सेस किया जा सकता है जो बिना किसी समस्या के साथ ही काम कर सकते हैं।


7
एक दूरस्थ सर्वर से एक जावास्क्रिप्ट लोड करना और अज्ञात सामग्रियों के साथ फ़ंक्शन करना मेरे लिए बहुत बड़ा सुरक्षा जोखिम लगता है (क्या होगा यदि फ़ंक्शन सामग्री बदल जाती है?)। मैं बल्कि JSON प्रतिक्रिया पार्स करना पसंद करूँगा।
Auco

3
त्रुटि 404: ऑब्जेक्ट नहीं मिला
trejder

यह बहुत लंबा समय रहा है। जवाब वास्तव में काफी गलत है। मुझे नहीं पता था कि जावास्क्रिप्ट आईपी को नहीं जान सकता है।
user4951

ओह यह सही है फ़ंक्शन विज़िटर का मतलब php कोड होना नहीं है। यह एक javacript कोड है जो php कोड द्वारा निर्मित है
user4951

आप बस अपने स्वयं के सर्वर का उपयोग कर सकते हैं फिर एक जावास्क्रिप्ट कोड प्रिंट करने के लिए जो आगंतुकों को आईपी प्रदान करता है।
user4951

15

इस प्रश्न की दो व्याख्याएँ हैं। अधिकांश लोगों ने पब्लिक आईपी एड्रेस का मतलब "क्लाइंट आईपी" समझा, जो वेब सर्वर के लैन के बाहर और इंटरनेट पर दिखता है। यह ज्यादातर मामलों में क्लाइंट कंप्यूटर का IP पता नहीं है

मुझे उस कंप्यूटर के वास्तविक आईपी पते की आवश्यकता थी जो उस ब्राउज़र को चला रहा है जो मेरे जावास्क्रिप्ट सॉफ़्टवेयर की मेजबानी कर रहा है (जो लगभग हमेशा एक लैन पर स्थानीय आईपी पता है जो कि NAT परत के पीछे कुछ है)।

Mido ने एक FANTASTIC उत्तर पोस्ट किया, जो कि एकमात्र ऐसा उत्तर प्रतीत होता है जो वास्तव में क्लाइंट का 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>


14

एक आसान और मुफ्त तरीका है जो आपके आगंतुक को किसी भी अनुमति के लिए नहीं कहेगा।

इसमें http://freegeoip.net/json के लिए एक बहुत ही सरल अजाक्स पोस्ट अनुरोध प्रस्तुत करना शामिल है । एक बार जब आप अपनी स्थान की जानकारी प्राप्त कर लेते हैं, तो JSON में, आप पृष्ठ को अपडेट करके या किसी नए पर पुनर्निर्देशित करके तदनुसार प्रतिक्रिया करते हैं।

यहां बताया गया है कि आप स्थान की जानकारी के लिए अपना अनुरोध कैसे प्रस्तुत करते हैं:

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

ऐसा लगता है कि उन्होंने 1 जुलाई 2018 को बंद कर दिया है
नितिन PH

13

ठीक है, मैं सवाल से पचा रहा हूं, लेकिन मुझे आज भी इसी तरह की आवश्यकता थी और हालांकि मुझे जावास्क्रिप्ट का उपयोग करने वाले क्लाइंट से आईडी नहीं मिल सका, मैंने निम्नलिखित काम किया।

सर्वर की ओर: -

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

जावास्क्रिप्ट का उपयोग करना

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

मैं ASP.Net Ajax का उपयोग कर रहा हूं, लेकिन आप $ get के बदले getElementById का उपयोग कर सकते हैं ()।

क्या हो रहा है, मुझे पृष्ठ पर उपयोगकर्ता के आईपी सर्वर के साथ प्रदान किया गया एक छिपा हुआ दिव्य तत्व मिला है। जावास्क्रिप्ट में से मैं सिर्फ उस मूल्य को लोड करता हूं।

यह कुछ लोगों के लिए आपकी तरह एक समान आवश्यकता के साथ सहायक हो सकता है (मुझे पसंद है जबकि मेरे पास यह पता नहीं था)।

चीयर्स!


20
-1: ओपी विशेष रूप से "नो सर्वर साइड कोड" का उल्लेख करता है, फिर भी आप कुछ C # का उपयोग करते हैं।
ब्रूनो रीस

8
यह सिर्फ उत्पादन के लिए बेहतर नहीं होगा <script>var uip='<%= Request.UserHostAddress %>';</script>?
क्रिस हैन्स

सर्वर साइड कोड का उपयोग करने से अलग, किसी को डेटा स्टोर करने के लिए कभी भी DOM का उपयोग नहीं करना चाहिए। यह सब खराब है। Hainesy के पास सिर्फ JS var को असाइन करने का बेहतर विचार है।
coblr

13

DataIP.net भू-आईपी एपीआई का उपयोग करने के साथ । उदाहरण के लिए, jQuery का उपयोग करके:

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

15
"सेवा अस्थायी अनुपलब्ध"।
इगौ

क्लाइंट आईपी एड्रेस पाने के लिए एक साधारण एपि [ geoip.immanuel.co/myip] लिखा , एसएसएल सक्षम और कोई सीमा नहीं
इमैनुएल

12

सामान्य रूप से संभव नहीं है जब तक कि आप किसी प्रकार की बाहरी सेवा का उपयोग न करें।


वास्तव में, यह तीसरे पक्ष की सेवा जैसे कि Ipregistry (अस्वीकरण: I सेवा को चलाता है) पर निर्भर करके जावास्क्रिप्ट का उपयोग करना संभव है : ipregistry.co/docs/getting-location-from-ip-address/javascript आप IP पता प्राप्त कर सकते हैं , और खतरे से संबंधित डेटा सहित सभी संबंधित जानकारी, एक ही कॉल में।
लॉरेंट

9

अपने आईपी को jQuery के साथ प्राप्त करें

आप JS की एक पंक्ति के साथ अपना सार्वजनिक IP पता प्राप्त कर सकते हैं? एक निशुल्क सेवा है जो आपके लिए यह पेशकश करती है और एक अनुरोध प्राप्त होता है जो आपको करने की आवश्यकता है:

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

आप userinfo.io जावास्क्रिप्ट लाइब्रेरी का उपयोग कर सकते हैं ।

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

स्क्रिप्ट को लोड करने के लिए आप आवश्यकता के अनुसार भी उपयोग कर सकते हैं।

यह आपको आपके आगंतुक का आईपी पता, साथ ही इसके स्थान (देश, शहर, आदि) के कुछ डेटा देगा। यह मैक्समाइंड जियोइप डेटाबेस पर आधारित है।

डिस्क्लेमर: मैंने यह लाइब्रेरी लिखी है


8

जावास्क्रिप्ट / jQuery के ग्राहक के आईपी पते और स्थान (देश, शहर)

आपको केवल सर्वर पर "src" लिंक के साथ एक टैग एम्बेड करने की आवश्यकता है। सर्वर ऑब्जेक्ट / JSON के रूप में "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/?js"></script>
// You can use it
<script language="Javascript">
    alert(codehelper_ip.IP);
    alert(codehelper_ip.Country);
</script>

पर अधिक जानकारी जावास्क्रिप्ट असली आईपी पता प्लस देश का पता लगाएं

यदि आप जेकरी का उपयोग कर रहे हैं, तो आप कोशिश कर सकते हैं:

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>

1
languageविशेषता का उपयोग न करें , type="text/javascript"इसके बजाय, एमडीएन
एलेक्स के

जैसा कि @Alex ने पहले ही उल्लेख किया है, भाषा को पदावनत किया जाता है और केवल विरासत कोड में उपयोग किया जाता है। इसके बजाय अधिकतम संगतता के लिए 'टाइप = "टेक्स्ट / जावास्क्रिप्ट" का उपयोग करें।
गौतम सी।

1
सिर्फ FYI करें - HTML5 के लिए टाइप फ़ील्ड की आवश्यकता नहीं है (JS डिफ़ॉल्ट है)। w3schools.com/tags/att_script_type.asp
pmont

यदि आप इन अन्य टिप्पणियों से चूक गए हैं, तो आपको भाषा के बजाय टाइप का उपयोग करना चाहिए
माइक

8

Appspot.com कॉलबैक की सेवा उपलब्ध नहीं है। ipinfo.io काम करने लगता है।

मैंने एक अतिरिक्त कदम उठाया और 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

यदि आप एक फ़ाइल रास्ते में शामिल हैं, तो आप एक सरल अजाक्स प्राप्त कर सकते हैं:

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

और ajax.getIp.phpयह होगा:

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

8

मुझे वास्तव में पसंद है api.ipify.orgक्योंकि यह HTTP और HTTPS दोनों का समर्थन करता है।

यहां api.ipify.orgjQuery का उपयोग करके आईपी ​​प्राप्त करने के कुछ उदाहरण दिए गए हैं ।

HTTPS पर JSON प्रारूप

https://api.ipify.org?format=json

$.getJSON("https://api.ipify.org/?format=json", function(e) {
    alert(e.ip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

HTTP पर JSON प्रारूप

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

8

Ipdata.co का उपयोग करें

एपीआई जियोलोकेशन डेटा भी प्रदान करता है और इसमें 10 वैश्विक एंडपॉइंट होते हैं, जिनमें से प्रत्येक एक दिन में 800M अनुरोधों को संभालने में सक्षम होता है!

यह उत्तर एक 'परीक्षण' एपीआई कुंजी का उपयोग करता है जो बहुत सीमित है और केवल कुछ कॉल के परीक्षण के लिए है। अपनी खुद की फ्री एपीआई कुंजी के लिए साइन अप करें और विकास के लिए प्रतिदिन 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

क्लाइंट कंप्यूटर का IP पता प्राप्त करने का कोई विश्वसनीय तरीका नहीं है।

यह कुछ संभावनाओं से गुजरता है। यदि उपयोगकर्ता के कई इंटरफेस हैं, तो जावा का उपयोग करने वाला कोड टूट जाएगा।

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

यहां अन्य उत्तरों को देखने से ऐसा लगता है कि आप ग्राहक के सार्वजनिक आईपी पते को प्राप्त करना चाहते हैं, जो संभवतः राउटर का पता है जो वे इंटरनेट से कनेक्ट करने के लिए उपयोग कर रहे हैं। यहाँ बहुत सारे अन्य उत्तर उस बारे में बात करते हैं। मैं अनुरोध प्राप्त करने और किसी और की सेवा के आधार पर IP पते के साथ प्रतिक्रिया देने और अपना काम करने के लिए अपने स्वयं के सर्वर साइड पेज को बनाने और होस्ट करने की सलाह दूंगा जो काम करना जारी रख सकता है या नहीं कर सकता है।


7

मैं एक ऐसी विधि की पेशकश करने जा रहा हूं, जिसका उपयोग मैं तब करता हूं जब मैं html पृष्ठ में जानकारी संग्रहीत करना चाहता हूं, और चाहता हूं कि मेरी जावास्क्रिप्ट को जानकारी को पढ़ने के बिना वास्तव में जावास्क्रिप्ट को पैरामीटर पारित करना होगा। यह विशेष रूप से उपयोगी है जब आपकी स्क्रिप्ट बाह्य रूप से संदर्भित होती है, बजाय इनलाइन के।

यह "कोई सर्वर साइड स्क्रिप्ट" की कसौटी पर खरा नहीं उतरता है। लेकिन अगर आप अपने html में सर्वर साइड स्क्रिप्टिंग शामिल कर सकते हैं, तो यह करें:

अपने html पृष्ठ के निचले भाग पर, छिपे हुए बॉडी टैग के ठीक ऊपर छिपे हुए लेबल तत्व बनाएं।

आपका लेबल इस तरह दिखेगा:

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

एक वर्ग को बुलाया जाना सुनिश्चित करें hiddenlabelऔर सेट करें visibility:hiddenताकि कोई भी वास्तव में लेबल को न देखे। आप इस तरह से बहुत सारी चीजों को स्टोर कर सकते हैं, छिपे हुए लेबल में।

अब, आपकी जावास्क्रिप्ट में, लेबल में संग्रहीत जानकारी को पुनः प्राप्त करने के लिए (इस मामले में ग्राहक का आईपी पता), आप यह कर सकते हैं:

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

अब आपका चर "आईपी" आईपी पते के बराबर है। अब आप अपने एपीआई अनुरोध के लिए आईपी पास कर सकते हैं।

* संपादित करें 2 साल पहले * दो मामूली शोधन:

मैं नियमित रूप से इस पद्धति का उपयोग करता हूं, लेकिन लेबल को कॉल करता हूं class="data", क्योंकि वास्तव में, यह डेटा संग्रहीत करने का एक तरीका है। क्लास का नाम "हिडेलबेल" एक बेवकूफ नाम है।

दूसरा संशोधन इसके बजाय, स्टाइल शीट में है visibility:hidden:

.data{
    display:none;
}

... इसे करने का बेहतर तरीका है।


3
DOM में डेटा स्टोर न करें। 2 साल बाद भी कोई क्यों सुझाव देगा? यदि आप HTML फ़ाइल में जो कुछ भी इंजेक्ट कर सकते हैं, बस उस मान को JS चर में इंजेक्ट करें। <script> var ip = <; php echo $ _SERVER ['REMOTE_ADDR']; ?> </ script>। कम से कम तब स्क्रीन पाठक इसे याद करेंगे और कोई getElementById या $ ('# stupname') की आवश्यकता नहीं होगी।
कोबरा

@fractalspawn, इस कारण से कि आप एक .js फ़ाइल में php कोड नहीं डाल सकते हैं। नहीं सोचा था कि, क्या तुमने चालाकी से पैंट बनाई है! ;)
TARKUS

यदि आप <script type = "text / javascript" src = "पाथ / to / फैंसी / javascript.php"> </ script> कर सकते हैं, तो आप यह सुनिश्चित नहीं कर सकते कि आप ऐसा क्यों करेंगे। मेरा कहना यह है कि यदि PHP HTML में कुछ भी सम्मिलित कर सकता है, जिसका वह प्रतिपादन कर रहा है, तो सबसे अच्छा अभ्यास यह होगा कि वह एक इनलाइन स्क्रिप्ट टैग के भीतर एक JS वेरिएबल में एक वैल्यू डालें, बजाय एक DOM एलिमेंट के जिसे आप को पार्स करना होगा। उपयोग करने के लिए बाहर, और संभवतः स्क्रीन पाठकों द्वारा पढ़ा जा सकता है जब तक कि आपने इसे रोकने के लिए अतिरिक्त उपाय नहीं किए।
कोबरा

वहाँ बिल्कुल अच्छा कारण नहीं है कि आप डोम में डेटा होल्डिंग तत्व क्यों नहीं जोड़ सकते हैं या नहीं करना चाहिए, और ऐसा करने के लिए बहुत सारे अच्छे कारण हैं। वास्तव में, वे कारण मेरे उत्तर में हैं, यदि आप इसे फिर से पढ़ना चाहेंगे। यह विश्वसनीय, नियंत्रित करना आसान है, और विशेष रूप से तब उपयोगी होता है जब आपकी जावास्क्रिप्ट फ़ाइल किसी दूरस्थ साइट पर होती है। दूरस्थ स्क्रिप्ट की बात करें तो, "javascript.php" का आपका उदाहरण एक भयानक विचार है, और शायद वैसे भी काम नहीं करेगा। दूरस्थ लिपियों के संदर्भ में सोचें, जैसे कि DISQUS।
तारकुस

3
DOM डेटा स्टोरेज खराब क्यों है इसके बारे में आपकी अन्य टिप्पणी के लिए .. ठीक है, आप अभी भी अपने गंतव्य पर एक दीवार को धीरे से मारकर एक कार को रोक सकते हैं, लेकिन अब नौकरी के लिए बेहतर उपकरण हैं। अब हम बेहतर जानते हैं और इसे कम करने के लिए महान रूपरेखाएँ हैं। मैंने एक ऐसी जगह पर काम किया, जहाँ पर JS के लिए DOM एक बहुत बड़ी कॉन्फिग फाइल थी, और रेस्ट होने पर यह बुरा सपना था। अगर आपको लगता है कि <script src = "something.php"> का उपयोग करना "क्रूड हैक" है, लेकिन DOM में डेटा स्टोर करना जो केवल जावास्क्रिप्ट के अंदर मूल्य है, तो मैं वास्तव में खुश हूं कि हम काम नहीं करते हैं एक साथ और फिर से, सहर्ष सहमत होंगे। :)
coblr



6

सबसे पहले वास्तविक उत्तर : अपने स्वयं के आईपी पते का पता लगाने के लिए विशुद्ध रूप से क्लाइंट-साइड निष्पादित कोड का उपयोग करना संभव नहीं है।

हालाँकि आप केवल https://api.muctool.de/whois की ओर एक GET कर सकते हैं और ग्राहक का आईपी पता प्राप्त करने के लिए कुछ प्राप्त कर सकते हैं

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

5

आप इसे पूरी तरह से क्लाइंट साइड और ज्यादातर जावास्क्रिप्ट में फ्लैश ऑब्जेक्ट का उपयोग करके कर सकते हैं जिसे जेएस कॉल कर सकते हैं। फ्लैश कर सकते हैं जो बहुत उपयोगी नहीं हो सकता है स्थानीय मशीन का IP पता का उपयोग।


4
var call_to = "http://smart-ip.net/geoip-json?callback=?";

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

data.hostआईपी ​​एड्रेस है। बस इसे अपने ब्राउज़र से कॉल करें।

http://smart-ip.net/geoip-json?callback=? [बिना उद्धरण] और आईपी प्राप्त करें।


क्षमा करें, जावास्क्रिप्ट में $ का क्या अर्थ है?
GHOST
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.