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




ip-address clientip (20)

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

मैं एक मुफ्त तृतीय पक्ष स्क्रिप्ट का उपयोग करने के खिलाफ नहीं हूँ।


और मत देखो

http://www.ipify.org/

उनके अनुसार:

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

यहां एक काम कर रहे जेएस उदाहरण हैं (यह सोचने के बजाय कि इस जवाब में इतने कम वोट क्यों हैं, इसे क्रिया में देखने के लिए इसे स्वयं आज़माएं):

<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

नोट : डेमो चलाने से पहले एडब्लॉक प्लस / यूब्लॉक और सह बंद करें .. अन्यथा, यह अभी काम नहीं करेगा।

मुझे आईपीआईएफ टीम के साथ कुछ लेना देना नहीं है। मुझे लगता है कि यह हास्यास्पद रूप से अच्छा है कि कोई सामान्य सामान्य के लिए ऐसी सेवा प्रदान करेगा।


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

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

आप hostip.info या इसी तरह की सेवा के लिए AJAX कॉल कर सकते हैं ...

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

एक बोनस के रूप में, उसी कॉल में भूगर्भीकरण जानकारी लौटा दी जाती है।


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

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

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


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

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


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

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

मिडो ने ऊपर एक फैंटास्टिक उत्तर पोस्ट किया, ऐसा लगता है कि वास्तव में क्लाइंट का आईपी पता प्रदान किया गया एकमात्र उत्तर है।

इसके लिए धन्यवाद, मिडो!

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

मिडो के फ़ंक्शन का "प्रतीक्षा करने योग्य" संस्करण यहां दिया गया है। मुझे उम्मीद है कि यह किसी और की मदद करेगा:

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>


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

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

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

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


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

सर्वर की तरफ: -

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

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

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

मैं एएसपी.Net अजाक्स का उपयोग कर रहा हूं, लेकिन आप $ get () के बजाय getElementById का उपयोग कर सकते हैं।

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

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

चीयर्स!


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

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

</script>

कोई AJAX नहीं बस सादा जावास्क्रिप्ट। : डी

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

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

function visitorsIP()   { return '123.123.123.123'; }

वह बनाना। Http://yourdomain.com/yourip.php पर रखो।

फिर करो

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

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


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

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

WebRTC का उपयोग करके उपयोगी क्लाइंट आईपी पते को पुनर्प्राप्त करने के तरीके के विवरण के लिए कृपया मिडो का जवाब पढ़ें


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

आपको केवल सर्वर पर "src" लिंक वाला टैग एम्बेड करना होगा। सर्वर ऑब्जेक्ट / जेएसओएन के रूप में "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>

More information at Javascript Detect Real IP Address Plus Country

If you are using jQUery, you can try:

console.log(codehelper_ip); 

It will show you more information about returned object.

If you want callback function, please try this:

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

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

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

नोट: यदि आप उपयोगकर्ता के सभी आईपी (जो उसके नेटवर्क पर अधिक निर्भर हो सकते हैं), तो मूल कोड का उपयोग करें, यह नया मिनीफ़ेड कोड केवल एक आईपी लौटाएगा ...

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

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>

यहां क्या हो रहा है, हम एक डमी पीयर कनेक्शन बना रहे हैं, और रिमोट पीयर के लिए हमसे संपर्क करने के लिए, हम आम तौर पर एक दूसरे के साथ बर्फ उम्मीदवारों का आदान-प्रदान करते हैं। और बर्फ उम्मीदवारों को पढ़ना (स्थानीय सत्र विवरण और IceCandidateEvent से) हम उपयोगकर्ता के आईपी को बता सकते हैं।

जहां मैंने -> Source से कोड लिया


Appspot.com callback's service isn't available. ipinfo.io seems to be working.

I did an extra step and retrieved all geo info using AngularJS. (Thanks to Ricardo) Check it out.

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

Working page here: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html


Here you go:

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


Use ipdata.co .

The API also provides geolocation data and has 10 global endpoints each able to handle >800M requests a day!

$.get("https://api.ipdata.co", 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>


You can use web services like: http://ip-api.com/

उदाहरण:

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

additional example: http://whatmyip.info    

You could do this entirely client side and mostly in JavaScript by using a Flash object that the js can call. Flash can access the IP address of the local machine which might not be very useful.


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

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





clientip