IP पते से स्थान प्राप्त करना


205

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


यह बहुत अधिक stackoverflow.com/questions/348614/… का डुप्लिकेट है ।
चार्ली मार्टिन

जवाबों:


255

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

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

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "loc": "37.385999999999996,-122.0838",
  "org": "AS15169 Google Inc.",
  "city": "Mountain View",
  "region": "CA",
  "country": "US",
  "phone": 650
}

यहाँ एक PHP उदाहरण है:

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json"));
echo $details->city; // -> "Mountain View"

आप इसे क्लाइंट-साइड भी उपयोग कर सकते हैं। यहाँ एक सरल jQuery का उदाहरण दिया गया है:

$.get("https://ipinfo.io/json", function (response) {
    $("#ip").html("IP: " + response.ip);
    $("#address").html("Location: " + response.city + ", " + response.region);
    $("#details").html(JSON.stringify(response, null, 4));
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h3>Client side IP geolocation using <a href="http://ipinfo.io">ipinfo.io</a></h3>

<hr/>
<div id="ip"></div>
<div id="address"></div>
<hr/>Full response: <pre id="details"></pre>


1
आप यह सुनिश्चित करना चाहते हैं कि आप URL के अंत में एक json जोड़कर सुनिश्चित कर सकें कि आपको पूर्ण वेब पेज के बजाय json वापस मिल जाए। $ विवरण = json_decode (file_get_contents (" ipinfo.io {$ ip} / json"));
डग

1
@ मैनटैक्स यह नहीं है, क्योंकि तब सर्वर प्रतिक्रिया को पार्स करना असंभव होगा।
जाक

3
एक बहुत विश्वसनीय सेवा की तरह प्रतीत नहीं होता है। मुझे nullअपने शहर का नाम मिल रहा है । यह एक छोटे शहर या कुछ की तरह नहीं है, लेकिन यह अभी भी इसका पता नहीं लगा सका है। यदि यह अमेरिका के भीतर अच्छी तरह से काम नहीं करता है, तो मुझे संदेह है कि यह अमेरिका के बाहर कितनी बार वापस आएगा।
डेरेक 會 會 ere 23

2
परिणाम सटीक नहीं है .. क्षेत्र, शहर डाक
मार्क गेरील मिरांडिला

2
चेतावनी: जनवरी / 2019 के अनुसार, कुछ लोगों ने बताया कि ट्रोजन के कारण यह आईपिनफो यूआरएल वायरस्टोटल पर असुरक्षित है । वोट 2015 और 2018 के बीच थे
रिकार्डो

55

मैंने सोचा था कि इस विशेष एपीआई पर किसी ने भी जानकारी नहीं दी है, लेकिन इसकी वापसी वही है जो मैं कर रहा हूं और आप इसे कई प्रारूपों में वापस लाने के लिए कर सकते हैं json, xml and csv

 $location = file_get_contents('http://freegeoip.net/json/'.$_SERVER['REMOTE_ADDR']);
 print_r($location);

यह आपको उन सभी चीजों को देगा जो आप संभवतः चाहते हैं:

{
      "ip": "77.99.179.98",
      "country_code": "GB",
      "country_name": "United Kingdom",
      "region_code": "H9",
      "region_name": "London, City of",
      "city": "London",
      "zipcode": "",
      "latitude": 51.5142,
      "longitude": -0.0931,
      "metro_code": "",
      "areacode": ""

}

1
अरे जॅमी फ्रीजियोपी.नेट काम नहीं कर रहा है। क्या कोई और तरीका है?
आदि

क्षमा करें, इस समय नहीं है, लेकिन मुझे अपनी लाइव साइटों पर जिस सेवा का उपयोग करना है, वह शर्म की बात है। आशा है कि वे कुछ समय पहले वापस
आएँगे

2
ज्यादातर नीचे और शायद ही कभी कोई क्षेत्र या शहर देता है
राहुल अमन

2
Azure में टोनी की सेवा तेजी से और मज़बूती से काम करती है: freegeoip2
Gustav

1
दुर्भाग्य से, इस सेवा को इस संदेश के अनुसार 1 जुलाई 2018 को काट दिया जाएगा: "यह एपीआई समापन बिंदु वंचित है और 1 जुलाई, 2018 को काम करना बंद कर देगा। अधिक जानकारी के लिए कृपया देखें: github.com/apilayer/freegeetip#readme \"
जूलियो बैलून

20

एक शुद्ध जावास्क्रिप्ट उदाहरण, https://geolocation-db.com की सेवाओं का उपयोग करके वे एक JSON और JSONP- कॉलबैक समाधान प्रदान करते हैं।

कोई jQuery की आवश्यकता है!

<!DOCTYPE html>
<html>
<head>
<title>Geo City Locator by geolocation-db.com</title>
</head>
<body>
    <div>Country: <span id="country"></span></div>
    <div>State: <span id="state"></span></div>
    <div>City: <span id="city"></span></div>
    <div>Postal: <span id="postal"></span></div>
    <div>Latitude: <span id="latitude"></span></div>
    <div>Longitude: <span id="longitude"></span></div>
    <div>IP address: <span id="ipv4"></span></div>                             
</body>
<script>

    var country = document.getElementById('country');
    var state = document.getElementById('state');
    var city = document.getElementById('city');
    var postal = document.getElementById('postal');
    var latitude = document.getElementById('latitude');
    var longitude = document.getElementById('longitude');
    var ip = document.getElementById('ipv4');

    function callback(data)
    {
        country.innerHTML = data.country_name;
        state.innerHTML = data.state;
        city.innerHTML = data.city;
        postal.innerHTML = data.postal;
        latitude.innerHTML = data.latitude;
        longitude.innerHTML = data.longitude;
        ip.innerHTML = data.IPv4;
    }

    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://geoilocation-db.com/json/geoip.php?jsonp=callback';
    var h = document.getElementsByTagName('script')[0];
    h.parentNode.insertBefore(script, h);

</script> 
</html>

क्या https://geoilocation-db.comएपी के उपयोग से संबंधित कोई सीमा है ?
प्रियंका शर्मा

16

Google APIS का उपयोग करना:

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script>
contry_code = google.loader.ClientLocation.address.country_code
city = google.loader.ClientLocation.address.city
region = google.loader.ClientLocation.address.region
</script>

9
The geolocation functionality in the Loader hasn't been retired, per se. We stopped documenting it several years ago and have recommended the HTML-based solutions due to their improved accuracy, but the functionality itself has not been removed from the Loader at this time. code.google.com/p/google-ajax-apis/issues/detail?id=586
TheFrost

इस Google APIS IP जियोलोकेशन की गुणवत्ता के बारे में क्या कहेंगे? (यह अन्य सेवाओं जैसे ipinfo.io की तुलना में मैं गलत हूं या गलत हूं?) ।
बसज

मैंने विभिन्न शहरों में ~ 30 लोगों से पूछा, और ipinfo.io की तुलना में Google APIS IP जियोलोकेशन गुणवत्ता खराब है
बसज

1
@Basj Google API एक आकर्षण की तरह काम करता है, जबकि ipinfo.io से पता चलता है कि मैं अमेरिका में हूँ जबकि मैं वास्तव में मध्य यूरोप में हूँ
२०'१k

15

आपको बाहरी सेवा ... जैसे http://www.hostip.info/ का उपयोग करने की आवश्यकता है यदि आप "जियो-आईपी" के लिए Google खोज करते हैं तो आप अधिक परिणाम प्राप्त कर सकते हैं।

होस्ट-आईपी एपीआई HTTP आधारित है जिससे आप अपनी आवश्यकताओं के आधार पर इसे PHP या जावास्क्रिप्ट में उपयोग कर सकते हैं।


6
मैं एक साल से hostip.info का उपयोग कर रहा हूं और मैं प्रभावित नहीं हूं। यह आमतौर पर अज्ञात 9/10 चेकों वापसी
एरन

सहमत, इसके बारे में मुझे बताया गया कि मैं वोकिंग में रहता हूं ... निष्पक्षता में इसे जीबी बिट सही मिला ... लेकिन मैं लंदन में हूं।
जेमी हटबर

2
ध्यान रखें कि कोई भी सेवा केवल सार्वजनिक सूचना / डेटा के रूप में अच्छी हो सकती है। गोपनीयता कारणों के कारण यह जानकारी केवल "इतनी अच्छी" हो सकती है। यदि यह आपके देश को सही मिलता है, और कम से कम राज्य / प्रांत को बंद कर देता है, तो मुझे लगता है कि एक जीत होगी। यदि आप DOS हमले के लिए लुक-अप जानकारी के लिए इसका उपयोग कर रहे हैं, तो ध्यान रखें कि आईपी भी मान्य नहीं हो सकता है (किसी को या वैध सार्वजनिक आईपी सीमा के बाहर नहीं सौंपा गया है)।
eselk

उनकी वेबसाइट पर मुझे "स्थान: ... वास्तव में हमें कोई सुराग नहीं मिला है।" मुझे बस
इतना

15

मैंने ipapi.co से एपीआई का उपयोग करके एक बॉट लिखा , यहां बताया गया है कि आप आईपी एड्रेस (जैसे 1.2.3.4) के लिए स्थान कैसे प्राप्त कर सकते हैं php:

हेडर सेट करें:

$opts = array('http'=>array('method'=>"GET", 'header'=>"User-Agent: mybot.v0.7.1"));
$context = stream_context_create($opts);

JSON प्रतिक्रिया प्राप्त करें

echo file_get_contents('https://ipapi.co/1.2.3.4/json/', false, $context);

एक विशिष्ट क्षेत्र (देश, समयक्षेत्र आदि) प्राप्त करने के लिए

echo file_get_contents('https://ipapi.co/1.2.3.4/country/', false, $context);

1
@ किसी ने इसे हटा दिया। ऐसा लगता है कि phpfiddle का IP प्रतिबंधित है।
Jaimes

10

यह प्रश्न संरक्षित है, जिसे मैं समझता हूं। हालाँकि, मुझे यहाँ एक उत्तर दिखाई नहीं देता है, जो मैं देख रहा हूँ वह बहुत से लोगों को दिखा रहा है कि वे एक ही प्रश्न होने से क्या करते हैं।

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

कौन है (स्पष्ट रूप से) एक प्राचीन टीसीपी प्रोटोकॉल, हालांकि - जिस तरह से मूल रूप से काम किया गया था वह पोर्ट 43 के कनेक्शन से था, जिससे यह समस्याग्रस्त हो जाता है कि यह पट्टे के कनेक्शन के माध्यम से, फायरवॉल के माध्यम से ... आदि।

इस समय - अधिकांश कौन है जो Restful HTTP और ARIN के माध्यम से किया जाता है, RIPE और APNIC में RESTful सेवाएं हैं जो काम करती हैं। LACNIC का रिटर्न 503 है और AfriNIC का जाहिरा तौर पर ऐसा कोई API नहीं है। (सभी के पास ऑनलाइन सेवाएं हैं, हालांकि)

वह आपको मिल जाएगा - आईपी के पंजीकृत मालिक का पता, लेकिन - आपके ग्राहक का स्थान नहीं - आपको उनसे और यह भी प्राप्त करना होगा - आपको इसके लिए पूछना होगा। इसके अलावा, जब आईपी आपको लगता है कि प्रवर्तक है, तो वैधता आपकी चिंताओं में से सबसे कम है।

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


8

Hostip.info से एपीआई को देखें - यह बहुत सारी जानकारी प्रदान करता है।
PHP में उदाहरण:

$data = file_get_contents("http://api.hostip.info/country.php?ip=12.215.42.19");
//$data contains: "US"

$data = file_get_contents("http://api.hostip.info/?ip=12.215.42.19");
//$data contains: XML with country, lat, long, city, etc...

यदि आप hostip.info पर भरोसा करते हैं, तो यह एक बहुत ही उपयोगी एपीआई है।


1
यूएनएफ। अन्य सेवाओं की तुलना में, HostIP waaaay है .. www.ip-adress.com हालांकि, इसे नाखून
स्कॉट

8

बेन डाउलिंग की प्रतिक्रिया में सेवा बदल गई है, इसलिए यह अब सरल है। स्थान खोजने के लिए, बस करें:

// no need to pass ip any longer; ipinfo grabs the ip of the person requesting
$details = json_decode(file_get_contents("http://ipinfo.io/"));
echo $details->city; // city

निर्देशांक '31, -80 'जैसे एकल स्ट्रिंग में लौटता है, इसलिए वहां से आप बस:

$coordinates = explode(",", $details->loc); // -> '31,-89' becomes'31','-80'
echo $coordinates[0]; // latitude
echo $coordinates[1]; // longitude

4
आप सही कह रहे हैं कि ipinfo.io डिफ़ॉल्ट रूप से कॉलर के आईपी के लिए विवरण वापस कर देगा। यदि आप एक PHP वेबसाइट चला रहे हैं जो उपयोगकर्ता के IP के बजाय आपके सर्वर का IP होगा। यही कारण है कि आपको $ _SERVER ['REMOTE_ADDR'] में पास होने की आवश्यकता है। यदि आप केवल निर्देशांक चाहते हैं, तो यह केवल उस क्षेत्र को भी प्राप्त करने के लिए URL में संलग्न / त्वरित होगा।
बेन डॉवलिंग

आह, यह सच है! और मुझे इस बारे में पता नहीं था कि मैं / अपनी साइट पर तुरंत ठीक करूंगा / करूंगी।
इसहाक आस्क्यू

7

यह मानते हुए कि आप इसे स्वयं करना चाहते हैं और अन्य प्रदाताओं पर भरोसा नहीं करते हैं, IP2Nation मैपिंग का एक MySQL डेटाबेस प्रदान करता है जिसे अद्यतन किया जाता है क्योंकि क्षेत्रीय रजिस्ट्रियां चीजों को बदल देती हैं।


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

7

मैं IPLocate.io पर सेवा चलाता हूं , जिसे आप एक आसान कॉल के साथ मुफ्त में हुक कर सकते हैं:

<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);

echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822

var_dump($res);

$resवस्तु को अपने भौगोलिक स्थान क्षेत्रों की तरह शामिल होंगे country, cityआदि

की जाँच करें डॉक्स अधिक जानकारी के लिए।


7

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

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


1
आप IP2Location LITE lite.ip2location.com पर विचार कर सकते हैं जो मुफ़्त है। इसमें ज़िप कोड की जानकारी है जो बहुत उपयोगी है।
माइकल सी।

6

PHP के लिए एक एक्सटेंशन है।

PHP.net से:

जियोआईपी एक्सटेंशन आपको आईपी पते का स्थान खोजने की अनुमति देता है। शहर, राज्य, देश, देशांतर, अक्षांश और अन्य जानकारी, जैसे कि ISP और कनेक्शन प्रकार, जियोआईपी की मदद से प्राप्त किए जा सकते हैं।

उदाहरण के लिए:

$record = geoip_record_by_name($ip);
echo $record['city'];

3
यह MaxMind डेटाबेस के लिए सिर्फ एक php मॉड्यूल है, जो कि पेवेयर है। (नि: शुल्क "लाइट" संस्करण अत्यधिक गलत हैं।) यह नहीं कहना कि यह एक बुरी बात है, लेकिन यह वास्तव में केवल वाणिज्यिक उद्देश्यों के लिए उपयोगी है।
किसी ने

6

विश्वसनीय प्रदर्शन के साथ Ipdata.co एक तेज, अत्यधिक उपलब्ध आईपी जियोलोकेशन एपीआई है।

यह दुनिया भर में 10 समापन बिंदुओं के साथ अत्यंत स्केलेबल है, प्रत्येक को प्रति सेकंड 10,000 अनुरोधों को संभालने में सक्षम है!

यह उत्तर एक 'परीक्षण' एपीआई कुंजी का उपयोग करता है जो बहुत सीमित है और केवल कुछ कॉल के परीक्षण के लिए है। अपनी खुद की फ्री एपीआई कुंजी के लिए साइनअप करें और विकास के लिए प्रतिदिन 1500 अनुरोध प्राप्त करें।

Php में

php > $ip = '8.8.8.8';
php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}?api-key=test"));
php > echo $details->region;
California
php > echo $details->city;
Mountain View
php > echo $details->country_name;
United States
php > echo $details->latitude;
37.751

यहां एक क्लाइंट-साइड उदाहरण दिखाया गया है कि आपको देश, क्षेत्र और शहर कैसे मिलेगा;

$.get("https://api.ipdata.co?api-key=test", function (response) {
	$("#response").html(JSON.stringify(response, null, 4));
  $("#country").html('Country: ' + response.country_name);
  $("#region").html('Region ' + response.region);
  $("#city").html('City' + response.city);  
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="country"></div>
<div id="region"></div>
<div id="city"></div>
<pre id="response"></pre>

अस्वीकरण;

मैंने सेवा का निर्माण किया।

कई भाषाओं में उदाहरण के लिए डॉक्स देखें

इसके अलावा सबसे अच्छा आईपी जियोलोकेशन एपीआई का यह विस्तृत विश्लेषण देखें ।


5

यदि कोई इस धागे पर ठोकर खाता है, तो यहां एक और उपाय है। पर timezoneapi.io आप एक आईपी पता अनुरोध और बदले में कई वस्तुओं मिलता है (मैं सेवा बना लिया है) कर सकते हैं। यह इसलिए बनाया गया था क्योंकि मुझे यह जानने की जरूरत थी कि मेरे उपयोगकर्ता किस समयक्षेत्र में हैं, दुनिया में कहां हैं और वर्तमान में यह किस समय है।

PHP में - स्थान, समयक्षेत्र और दिनांक / समय देता है:

// Get IP address
$ip_address = getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR') ?: getenv('HTTP_X_FORWARDED') ?: getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: getenv('REMOTE_ADDR');

// Get JSON object
$jsondata = file_get_contents("http://timezoneapi.io/api/ip/?" . $ip_address);

// Decode
$data = json_decode($jsondata, true);

// Request OK?
if($data['meta']['code'] == '200'){

    // Example: Get the city parameter
    echo "City: " . $data['data']['city'] . "<br>";

    // Example: Get the users time
    echo "Time: " . $data['data']['datetime']['date_time_txt'] . "<br>";

}

JQuery का उपयोग करना:

// Get JSON object
$.getJSON('https://timezoneapi.io/api/ip', function(data){

    // Request OK?
    if(data.meta.code == '200'){

        // Log
        console.log(data);

        // Example: Get the city parameter
        var city = data.data.city;
        alert(city);

        // Example: Get the users time
        var time = data.data.datetime.date_time_txt;
        alert(time);

    }

});

4

निम्नलिखित एक स्निपेट का संशोधित संस्करण है जो मैंने पाया कि इसकी जानकारी प्राप्त करने के लिए http://ipinfodb.com/ip_locator.php का उपयोग करता है । ध्यान रखें, आप उनके साथ एक एपीआई कुंजी के लिए भी आवेदन कर सकते हैं और जैसा कि आप फिट देखते हैं, आपूर्ति की गई जानकारी प्राप्त करने के लिए सीधे एपीआई का उपयोग करें।

टुकड़ा

function detect_location($ip=NULL, $asArray=FALSE) {
    if (empty($ip)) {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }
        else { $ip = $_SERVER['REMOTE_ADDR']; }
    }
    elseif (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost') {
        $ip = '8.8.8.8';
    }

    $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
    $i = 0; $content; $curl_info;

    while (empty($content) && $i < 5) {
        $ch = curl_init();
        $curl_opt = array(
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_HEADER => 0,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_URL => $url,
            CURLOPT_TIMEOUT => 1,
            CURLOPT_REFERER => 'http://' . $_SERVER['HTTP_HOST'],
        );
        if (isset($_SERVER['HTTP_USER_AGENT'])) $curl_opt[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
        curl_setopt_array($ch, $curl_opt);
        $content = curl_exec($ch);
        if (!is_null($curl_info)) $curl_info = curl_getinfo($ch);
        curl_close($ch);
    }

    $araResp = array();
    if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) $araResp['city'] = trim($regs[1]);
    if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) $araResp['state'] = trim($regs[1]);
    if (preg_match('{<li>Country : ([^<]*)}i', $content, $regs)) $araResp['country'] = trim($regs[1]);
    if (preg_match('{<li>Zip or postal code : ([^<]*)</li>}i', $content, $regs)) $araResp['zip'] = trim($regs[1]);
    if (preg_match('{<li>Latitude : ([^<]*)</li>}i', $content, $regs)) $araResp['latitude'] = trim($regs[1]);
    if (preg_match('{<li>Longitude : ([^<]*)</li>}i', $content, $regs)) $araResp['longitude'] = trim($regs[1]);
    if (preg_match('{<li>Timezone : ([^<]*)</li>}i', $content, $regs)) $araResp['timezone'] = trim($regs[1]);
    if (preg_match('{<li>Hostname : ([^<]*)</li>}i', $content, $regs)) $araResp['hostname'] = trim($regs[1]);

    $strResp = ($araResp['city'] != '' && $araResp['state'] != '') ? ($araResp['city'] . ', ' . $araResp['state']) : 'UNKNOWN';

    return $asArray ? $araResp : $strResp;
}

उपयोग करने के लिए

detect_location();
//  returns "CITY, STATE" based on user IP

detect_location('xxx.xxx.xxx.xxx');
//  returns "CITY, STATE" based on IP you provide

detect_location(NULL, TRUE);    //   based on user IP
//  returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }

detect_location('xxx.xxx.xxx.xxx', TRUE);   //   based on IP you provide
//  returns array(8) { ["city"] => "CITY", ["state"] => "STATE", ["country"] => "US", ["zip"] => "xxxxx", ["latitude"] => "xx.xxxxxx", ["longitude"] => "-xx.xxxxxx", ["timezone"] => "-07:00", ["hostname"] => "xx-xx-xx-xx.host.name.net" }

4

यदि आपको एक आईपी पते से स्थान प्राप्त करने की आवश्यकता है तो आप विश्वसनीय जियो आईपी सेवा का उपयोग कर सकते हैं, आप यहां अधिक विवरण प्राप्त कर सकते हैं । यह IPv6 को सपोर्ट करता है।

एक बोनस के रूप में यह जांचने की अनुमति देता है कि क्या आईपी एड्रेस एक टोर नोड, सार्वजनिक प्रॉक्सी या स्पैमर है।

आप नीचे जावास्क्रिप्ट या php का उपयोग कर सकते हैं।

जावास्क्रिप्ट कोड:

$(document).ready(function () {
        $('#btnGetIpDetail').click(function () {
            if ($('#txtIP').val() == '') {
                alert('IP address is reqired');
                return false;
            }
            $.getJSON("http://ip-api.io/json/" + $('#txtIP').val(),
                 function (result) {
                     alert('City Name: ' + result.city)
                     console.log(result);
                 });
        });
    });

Php कोड:

$result = json_decode(file_get_contents('http://ip-api.io/json/64.30.228.118'));
var_dump($result);

आउटपुट:

{
"ip": "64.30.228.118",
"country_code": "US",
"country_name": "United States",
"region_code": "FL",
"region_name": "Florida",
"city": "Fort Lauderdale",
"zip_code": "33309",
"time_zone": "America/New_York",
"latitude": 26.1882,
"longitude": -80.1711,
"metro_code": 528,
"suspicious_factors": {
"is_proxy": false,
"is_tor_node": false,
"is_spam": false,
"is_suspicious": false
}

3

मैंने ipinfo.io के लिए एक रैपर बनाया है । आप संगीतकार का उपयोग करके इसे स्थापित कर सकते हैं।

आप इसे इस तरह से उपयोग कर सकते हैं:

$ipInfo = new DavidePastore\Ipinfo\Ipinfo();

//Get all the properties
$host = $ipInfo->getFullIpDetails("8.8.8.8");

//Read all the properties
$city = $host->getCity();
$country = $host->getCountry();
$hostname = $host->getHostname();
$ip = $host->getIp();
$loc = $host->getLoc();
$org = $host->getOrg();
$phone = $host->getPhone();
$region = $host->getRegion();

2

आप "स्मार्ट-आईपी" सेवा का भी उपयोग कर सकते हैं:

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

2

मैंने IP पता सेवाओं के साथ परीक्षण का एक गुच्छा किया है और यहां कुछ तरीके हैं जो मैं स्वयं करता हूं। पहले उपयोगी वेबसाइटों के लिंक को बंद करें, जिनका मैं उपयोग करता हूं:

https://db-ip.com/db में एक मुफ्त आईपी-लुकअप सेवा है और कुछ मुफ्त सीएसवी फाइलें हैं जिन्हें आप डाउनलोड कर सकते हैं। यह एक मुफ्त एपीआई कुंजी का उपयोग करता है जो आपके ईमेल से जुड़ी होती है। यह प्रति दिन 2000 प्रश्नों पर सीमित है।

http://ipinfo.io/ एपी-कुंजी PHP कार्यों के बिना मुफ्त आईपी-लुकअप सेवा:

//uses http://ipinfo.io/.
function ip_visitor_country($ip){
    $ip_data_in = get_web_page("http://ipinfo.io/".$ip."/json"); //add the ip to the url and retrieve the json data
    $ip_data = json_decode($ip_data_in['content'],true); //json_decode it for php use

    //this ip-lookup service returns 404 if the ip is invalid/not found so return false if this is the case.
    if(empty($ip_data) || $ip_data_in['httpcode'] == 404){
        return false;
    }else{
        return $ip_data; 
    }
}

function get_web_page($url){
    $user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0';

    $options = array(
        CURLOPT_CUSTOMREQUEST  =>"GET",        //set request type post or get
        CURLOPT_POST           =>false,        //set to GET
        CURLOPT_USERAGENT      => $user_agent, //set user agent
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
    );
    $ch = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    $httpCode = curl_getinfo( $ch, CURLINFO_HTTP_CODE );
    curl_close( $ch );  
    $header['errno']   = $err; //curl error code
    $header['errmsg']  = $errmsg; //curl error message
    $header['content'] = $content; //the webpage result (In this case the ip data in json array form)
    $header['httpcode'] = $httpCode; //the webpage response code
    return $header; //return the collected data and response codes
}

अंत में आपको कुछ ऐसा मिलता है:

Array
(
    [ip] => 1.1.1.1
    [hostname] => No Hostname
    [city] => 
    [country] => AU
    [loc] => -27.0000,133.0000
    [org] => AS15169 Google Inc.
)

http://www.geoplugin.com/ थोड़ा पुराना लेकिन यह सेवा आपको अतिरिक्त उपयोगी जानकारी जैसे कि देश से मुद्रा, महाद्वीप कोड, देशांतर और बहुत कुछ प्रदान करती है।


http://lite.ip2location.com/database-ip-country-region-city-latitude-longitude उन्हें अपने डेटाबेस में आयात करने के निर्देशों के साथ डाउनलोड करने योग्य फ़ाइलों का एक गुच्छा प्रदान करता है। एक बार जब आप अपने डेटाबेस में इन फ़ाइलों को बंद कर देते हैं, तो आप डेटा का चयन आसानी से कर सकते हैं।

SELECT * FROM `ip2location_db5` WHERE IP > ip_from AND IP < ip_to

Php फ़ंक्शन का उपयोग करें ip2long (); एक संख्यात्मक मान में आईपी-पता चालू करने के लिए। उदाहरण के लिए 1.1.1.1 16843009 हो जाता है। यह आपको डेटाबेस फाइल द्वारा आपको दी गई आईपी रेंज के लिए स्कैन करने की सुविधा देता है।

तो यह पता लगाने के लिए कि 1.1.1.1 हमारे पास क्या है, इस क्वेरी को चलाता है:

SELECT * FROM `ip2location_db5` WHERE 16843009 > ip_from AND 16843009 < ip_to;

यह इस डेटा को एक उदाहरण के रूप में देता है।

FROM: 16843008
TO: 16843263
Country code: AU
Country: Australia
Region: Queensland
City: Brisbane
Latitude: -27.46794
Longitude: 153.02809

2

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

कई एपीआई जियोलोकेशन सेवाएं मौजूद हैं: मैक्समाइंड, इप्लोकेशन, इप्सटैक, इपीइन्फो, आदि। हाल ही में, मैं जिस कंपनी के लिए काम करता हूं, वह Ipregistry ( https://ipregistry.co ) पर स्विच हो गई है और मैं निर्णय और कार्यान्वयन प्रक्रिया में शामिल था। IP जियोलोकेशन API की तलाश में कुछ तत्व हैं जिन पर आपको विचार करना चाहिए:

  • क्या सेवा सही है? क्या वे सूचना के एकल स्रोत का उपयोग कर रहे हैं?
  • क्या वे वास्तव में आपके भार को संभाल सकते हैं?
  • क्या वे दुनिया भर में सुसंगत और तेज़ प्रतिक्रिया समय प्रदान करते हैं (सिवाय इसके कि आपके उपयोगकर्ता विशिष्ट हैं)?
  • उनका मूल्य निर्धारण मॉडल क्या है?

यहाँ IP जियोलोकेशन जानकारी प्राप्त करने के लिए एक उदाहरण है (लेकिन एक कॉल का उपयोग करके खतरा और उपयोगकर्ता एजेंट डेटा भी):

$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("https://api.ipregistry.co/{$ip}?key=tryout"));
echo $details->location;

नोट: मैं यहाँ Ipregistry को बढ़ावा देने के लिए नहीं हूँ और कह सकता हूँ कि यह सबसे अच्छा है लेकिन मैंने मौजूदा समाधानों का विश्लेषण करने में लंबा समय बिताया है और उनका समाधान वास्तव में आशाजनक है।


-1

यदि आप एक अद्यतन / सटीक डेटाबेस के लिए खोज कर रहे हैं, तो मैं इसे यहाँ उपयोग करने की सलाह देता हूँ क्योंकि यह मेरा सटीक स्थान दिखा रहा था जो कि परीक्षण करते समय कई अन्य सेवाओं में शामिल नहीं था।
(मेरा शहर था Rashtऔर मेरा देश Iranइस आईपी पते के साथ था : 2.187.21.235जब मैं परीक्षण कर रहा था।)

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


-1

ठीक है, दोस्तों, आपके सुझावों के लिए धन्यवाद; जबकि मेरे पास 6k + का IP है, कुछ सेवाएँ कुछ सीमाओं के कारण मेरे अनुरोधों को विफल कर देंगी; तो, आप उन सभी को फ़ॉलबैक मोड में उपयोग कर सकते हैं;

यदि हमारे पास निम्न प्रारूप वाली स्रोत फ़ाइल है:

user_id_1  ip_1
user_id_2  ip_2
user_id_3  ip_1

Yii के लिए आप इस सरल एक्सप्लोरेशन कमांड (PoC) का उपयोग कर सकते हैं:

class GeoIPCommand extends CConsoleCommand
{

public function actionIndex($filename = null)
{
    //http://freegeoip.net/json/{$ip} //10k requests per hour
    //http://ipinfo.io/{$ip}/json //1k per day
    //http://ip-api.com/json/{$ip}?fields=country,city,regionName,status //150 per minute

    echo "start".PHP_EOL;

    $handle      = fopen($filename, "r");
    $destination = './good_locations.txt';
    $bad         = './failed_locations.txt';
    $badIP       = [];
    $goodIP      = [];

    $destHandle = fopen($destination, 'a+');
    $badHandle  = fopen($bad, 'a+');

    if ($handle)
    {
        while (($line = fgets($handle)) !== false)
        {
            $result = preg_match('#(\d+)\s+(\d+\.\d+\.\d+\.\d+)#', $line, $id_ip);
            if(!$result) continue;

            $id = $id_ip[1];
            $ip = $id_ip[2];
            $ok = false;

            if(isset($badIP[$ip])) 
            {
                fputs($badHandle, sprintf('%u %s'. PHP_EOL, $id, $ip));
                continue;
            }

            if(isset($goodIP[$ip]))
            {
                fputs($destHandle, sprintf('"id":"%u","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $goodIP[$ip]));
                echo sprintf('"id":"%s","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $goodIP[$ip]);
                continue;
            }

            $query = @json_decode(file_get_contents('http://freegeoip.net/json/'.$ip));
            $city = property_exists($query, 'region_name')? $query->region_name : '';
            $city .= property_exists($query, 'city') && $query->city && ($query->city != $city) ? ', ' . $query->city : '';

            if($city)
            {
                fputs($destHandle, sprintf('"id":"%u","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $city));
                echo sprintf('"id":"%s","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $city);
                $ok = true;
            }

            if(!$ok)
            {
                $query = @json_decode(file_get_contents('http://ip-api.com/json/'. $ip.'?fields=country,city,regionName,status'));
                if($query && $query->status == 'success')
                {
                    $city = property_exists($query, 'regionName')? $query->regionName : '';
                    $city .= property_exists($query, 'city') && $query->city ? ',' . $query->city : '';

                    if($city)
                    {
                        fputs($destHandle, sprintf('"id":"%u","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $city));
                        echo sprintf('"id":"%s","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, $city);
                        $ok = true;
                    }
                }
            }

            if(!$ok)
            {
                $badIP[$ip] = false;
                fputs($badHandle, sprintf('%u %s'. PHP_EOL, $id, $ip));
                echo sprintf('"id":"%s","ip":"%s","from":"%s";'. PHP_EOL, $id, $ip, 'Unknown');
            }

            if($ok)
            {
                $goodIP[$ip] = $city;
            }
        }

        fclose($handle);
        fclose($badHandle);
        fclose($destHandle);
    }else{
        echo 'Can\'t open file' . PHP_EOL; 
        return;
    }

    return;
}

}

यह किसी तरह का shitty-code है, लेकिन यह काम करता है। उपयोग:

./yiic geoip index --filename="./source_id_ip_list.txt"

बेझिझक उपयोग करें, इसे संशोधित करें, और इसे बेहतर करें)

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