একটি আইপি ঠিকানা থেকে অবস্থান প্রাপ্ত করা


205

আমি তাদের আইপি ঠিকানা থেকে দর্শনার্থীর শহর, রাজ্য এবং দেশের মতো তথ্য পুনরুদ্ধার করতে চাই, যাতে আমি তাদের ওয়েব সাইটটি তাদের অবস্থান অনুসারে কাস্টমাইজ করতে পারি। পিএইচপি-তে এটি করার কোনও ভাল এবং নির্ভরযোগ্য উপায় নেই? আমি ক্লায়েন্ট-সাইড স্ক্রিপ্টিংয়ের জন্য জাভাস্ক্রিপ্ট, সার্ভার-সাইড স্ক্রিপ্টিংয়ের জন্য পিএইচপি এবং ডাটাবেসের জন্য মাইএসকিউএল ব্যবহার করছি।


উত্তর:


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
}

এখানে একটি পিএইচপি উদাহরণ রয়েছে:

$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_decode (ফাইল_জেট_কন্টেন্টস (" ipinfo.io {ip ip} / json"));
ডগ

1
@ মানাটাক্স এটি নয়, কারণ তখন সার্ভারের প্রতিক্রিয়াটি পার্স করা অসম্ভব।
জ্যাক

3
খুব নির্ভরযোগ্য পরিষেবা বলে মনে হচ্ছে না। আমি nullআমার শহরের নাম পাচ্ছি। এটি কোনও ছোট শহর বা কোনও কিছুর মতো নয় তবে এটি এখনও এটি সনাক্ত করতে পারেনি। যদি এটি মার্কিন যুক্তরাষ্ট্রের মধ্যে ভাল কাজ না করে তবে আমি সন্দেহ করি যে এটি প্রায়শই মার্কিন যুক্তরাষ্ট্রেও নালাগুলি ফিরে আসবে।
ডেরেক 朕 會 功夫

2
ফলাফলটি সঠিক নয় .. অঞ্চল, শহর ডাক
মার্ক জেরিল মিরান্ডিলা

2
সতর্কতা: জানুয়ারী / 2019-তে, কিছু লোক জানিয়েছে যে ট্রাইজনের কারণে এই আইপিনফো url ভার্জস্টোলে নিরাপদ নয় । ভোটগুলি 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
বেশিরভাগ ডাউন এবং খুব কমই কোনও অঞ্চল বা শহর দেয়
রাহুল


1
দুর্ভাগ্যবশত, এই সেবা এই বার্তাটি অনুযায়ী 1 লা জুলাই 2018 সংযোগ বিচ্ছিন্ন করা হবে: "এই API শেষবিন্দু অনুমোদিত নয় এবং আরও তথ্যের জন্য দয়া করে, 1 লা জুলাই কাজ 2018 বন্ধ করবে: github.com/apilayer/freegeoip#readme \
জুলিও Bailon

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

গুগল এপিআইএস ব্যবহার:

<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. কোড.google.com/p/google-ajax-apis/issues/detail?id=586
TheFrost

এই গুগল এপিআইএস আইপি জিওলোকেশনের গুণাগুণ সম্পর্কে কী? ipinfo.io এর মতো অন্যান্য পরিষেবার সাথে তুলনা করে (এটি, বা আমি ভুল?) ?
বাসজ

আমি বিভিন্ন শহরে ~ 30 জন লোককে জিজ্ঞাসা করেছি, এবং গুগল এপিআইএস আইপি জিওলোকেশনের গুণমানটি আইপিনফো.ওয়ের তুলনায় খারাপ
বাসজ

1
@ বাসজ গুগল এপিআই মন্ত্রের মতো কাজ করে যখন আইপিনফো.ও দেখায় আমি মার্কিন যুক্তরাষ্ট্রে আসলে আমি ইউরোপে
থাকি

15

আপনার একটি বাহ্যিক পরিষেবা ব্যবহার করা দরকার ... যেমন http://www.hostip.info/ আপনি যদি "জিও-আইপি" অনুসন্ধান করেন তবে আপনি আরও ফলাফল পেতে পারেন।

হোস্ট-আইপি এপিআই এইচটিটিপি ভিত্তিক যাতে আপনি এটি আপনার প্রয়োজনের উপর নির্ভর করে পিএইচপি বা জাভাস্ক্রিপ্টে ব্যবহার করতে পারেন।


6
আমি এখন এক বছর ধরে হোস্টিপ.ইন.ফো ব্যবহার করছি এবং আমি মুগ্ধ হইনি। এটি সাধারণত অজানা 9/10 চেক আসতে
Aron

রাজি হয়ে গেছে, এটি আমাকে বলছে আমি ওয়ার্কে থাকি ... ন্যায্যতার সাথে এটি জিবি কিছুটা ঠিক পেয়েছে ... তবে আমি লন্ডনে আছি।
জেমি হুটার

2
মনে রাখবেন যে কোনও পরিষেবা কেবল সর্বজনীন তথ্য / ডেটা উপলভ্য হিসাবে ভাল হতে চলেছে। গোপনীয়তার কারণে এই তথ্যটি কেবল "এত ভাল" হতে পারে। যদি এটি আপনার দেশটি ঠিক হয়ে যায় এবং কমপক্ষে রাজ্য / প্রদেশের কাছাকাছি থেকে যায় তবে আমি এটি একটি WIN বিবেচনা করব। আপনি যদি ডস আক্রমণে অনুসন্ধানের জন্য তথ্যটি ব্যবহার করতে এটি ব্যবহার করে থাকেন তবে মনে রাখবেন আইপিগুলি বৈধ নাও হতে পারে (কারও কাছেও বরাদ্দ করা হয়নি বা বৈধ পাবলিক আইপি রেঞ্জের বাইরে নয়)।
eselk

তাদের ওয়েবসাইটে আমি "অবস্থান: ... আসলে পাই না। আমার যা জানা দরকার
বোজন কোগোজ

15

আমি ipapi.co থেকে একটি API ব্যবহার করে একটি বট লিখেছিলাম , এখানে আপনি কীভাবে কোনও আইপি ঠিকানার (যেমন 1.2.3.4) ঠিকানা পেতে পারেন তা এখানে php:

শিরোনাম সেট করুন:

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

জেএসওএন প্রতিক্রিয়া পান

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
@Eoin এটি মুছে ফেলা হয়েছে। দেখে মনে হচ্ছে পিএইচপিফিল্ডের আইপি সীমাবদ্ধ।
জাইমস

10

এই প্রশ্নটি সুরক্ষিত, যা আমি বুঝতে পারি। যাইহোক, আমি এখানে একটি উত্তর দেখতে পাচ্ছি না, আমি যা দেখছি তা হ'ল বহু লোক একই প্রশ্নটি থেকে কী নিয়ে এসেছিল তা দেখায়।

কার্যক্ষমতার বিভিন্ন ডিগ্রি সহ বর্তমানে পাঁচটি আঞ্চলিক ইন্টারনেট রেজিস্ট্রেশন রয়েছে যা আইপি মালিকানার ক্ষেত্রে যোগাযোগের প্রথম পয়েন্ট হিসাবে কাজ করে। প্রক্রিয়াটি প্রবাহিত হয়, এ কারণেই এখানকার বিভিন্ন পরিষেবা কখনও কখনও কাজ করে এবং অন্য সময়ে হয় না।

হু ইজ (স্পষ্টতই) একটি প্রাচীন টিসিপি প্রোটোকল, তবে - যেভাবে এটি মূলত কাজ করেছিল সেটি ছিল পোর্ট 43 এর সাথে সংযোগ স্থাপন, যা ফায়ারওয়ালের মাধ্যমে ... ইজারা সংযোগের মাধ্যমে এটিকে সমস্যাযুক্ত করে তোলে।

এই মুহুর্তে - বেশিরভাগ হু হু হ'ল RESTful HTTP এবং ARIN- এর মাধ্যমে সম্পন্ন হয়, RIPE এবং APNIC এর মধ্যে রেস্টস্টুল সার্ভিস রয়েছে যা কাজ করে। LACNIC এর একটি 503 রিটার্ন দেয় এবং আফ্রিকানিকভাবে সম্ভবত এ জাতীয় কোনও এপিআই নেই। (তবে সকলেরই অনলাইন পরিষেবা রয়েছে))

এটি আপনাকে পেয়ে যাবে - আইপি-র নিবন্ধিত মালিকের ঠিকানা, তবে - আপনার ক্লায়েন্টের অবস্থান নয় - আপনাকে অবশ্যই তাদের কাছ থেকে এটি পেতে হবে - আপনাকে এটি চাইতে হবে। এছাড়াও, আইপি যা আপনাকে প্রবর্তক বলে মনে করেন বৈধতা দেওয়ার সময় প্রক্সিগুলি আপনার উদ্বেগের মধ্যে সবচেয়ে কম।

লোকেরা তাদের অনুসরণ করা হচ্ছে এই ধারণার প্রশংসা করে না, তাই - আমার ধারণা - এটি আপনার ক্লায়েন্টের কাছ থেকে সরাসরি এবং তাদের অনুমতি নিয়ে পান এবং ধারণাটি থেকে প্রচুর পরিমাণে প্রত্যাশা করা আশা করেন।


8

Hostip.info থেকে এপিআই দেখুন - এটি প্রচুর তথ্য সরবরাহ করে।
পিএইচপি উদাহরণ:

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

যদি আপনি হোস্টিপ.ইন.ফো'কে বিশ্বাস করেন তবে এটি একটি খুব দরকারী এপিআই বলে মনে হচ্ছে।


1
unf। অন্যান্য পরিষেবার তুলনায় হোস্টিপ বন্ধ রয়েছে .. 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 ডিফল্টরূপে কলারের আইপির বিশদ ফিরিয়ে দেবে। আপনি যদি কোনও পিএইচপি ওয়েবসাইট চালাচ্ছেন তবে ব্যবহারকারীর আইপি না হয়ে আপনার সার্ভারের আইপি হবেন। এই কারণেই আপনাকে $ _SERVER ['REMOTE_ADDR'] এ পাস করতে হবে। যদি আপনি কেবল স্থানাঙ্ক চান তবে কেবল সেই ক্ষেত্রটি পেতে URL- এ যুক্ত / লক করা দ্রুত হবে।
বেন ডওলিং

আহ, এটাই সত্য! এবং আমি / লোকের সম্পর্কে জানতাম না - আমি তা তাৎক্ষণিকভাবে আমার নিজের সাইটে ঠিক করব।
আইজাক আসকিউ

7

ধরে নিই যে আপনি এটি নিজেই করতে চান এবং অন্য সরবরাহকারীদের উপর নির্ভর না করে, আইপি 2 ন্যাশনাল ম্যাপিংয়ের একটি মাইএসকিউএল ডাটাবেস সরবরাহ করে যা আঞ্চলিক রেজিস্ট্রিগুলি আশেপাশের জিনিসগুলি পরিবর্তন করার সাথে সাথে আপডেট করা হয়।


আমি একটি বাহ্যিক পরিষেবা ব্যবহার করছিলাম এবং হঠাৎ আমার ওয়েবসাইটটি সত্যিই ধীর হয়ে গেল। বাহ্যিক পরিষেবাটি তথ্যটি প্রেরণে 20 সেকেন্ড সময় নিচ্ছিল - এটি সম্ভবত দর্শকদের জন্য বিপর্যয়কর। সুতরাং এটি নিজেই করার সিদ্ধান্ত নিয়েছে এবং এটি একটি নিখুঁত সমাধান। অনেক ধন্যবাদ.
উইলিয়ামজ 902

7

আমি আইপিএলওকটি.আই- তে এই পরিষেবাটি চালাচ্ছি , যা আপনি একটি সহজ কল দিয়ে বিনা মূল্যে প্রবেশ করতে পারেন:

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

আমি ম্যাক্সমাইন্ডের ফ্রি জিওলাইট সিটি পছন্দ করি যা বেশিরভাগ অ্যাপ্লিকেশনের জন্য কাজ করে এবং যেখান থেকে আপনি যদি যথাযথ পরিমাণ না পান তবে আপনি কোনও অর্থ প্রদানের সংস্করণে আপগ্রেড করতে পারেন। এখানে একটি পিএইচপি এপিআই রয়েছে, পাশাপাশি অন্যান্য ভাষার জন্যও রয়েছে। এবং আপনার যদি ওয়েবসার্ভার যেমন lighttpd দৌড়াচ্ছে, আপনি এমনকি একটি ব্যবহার করতে পারেন মডিউল পরীক্ষা এলে যে কী প্রয়োজন প্রতি ছবি জন্য সার্ভার পরিবর্তনশীল তথ্য পেতে।

আমার যুক্ত করা উচিত একটি নিখরচায় জিওলাইট দেশও রয়েছে (যা আপনার কাছে আইপিটি শহরটি চিহ্নিত করার দরকার না হলে দ্রুত হবে) এবং জিওলাইট এএসএন (আপনি যদি আইপিটির মালিক হন তা জানতে চান) এবং অবশেষে এগুলি হ'ল আপনার নিজের সার্ভারে ডাউনলোডযোগ্য, প্রতি মাসে আপডেট করা হয় এবং সরবরাহিত এপিআইগুলির সাথে অনুসন্ধান করার জন্য তারা দ্রুত "প্রতি সেকেন্ডে কয়েক হাজার লুকআপ" বলে বর্ণনা করে।


1
আপনি IP2Location LITE lit.ip2location.com যা বিনামূল্যে তা বিবেচনা করতে পারেন । এটিতে জিপ কোড সম্পর্কিত তথ্য রয়েছে যা খুব কার্যকর।
মাইকেল সি।

6

পিএইচপি এর জন্য একটি এক্সটেনশন রয়েছে

PHP.net থেকে:

জিওআইপি এক্সটেনশন আপনাকে একটি আইপি ঠিকানার অবস্থান সন্ধান করতে দেয়। সিটি, রাজ্য, দেশ, দ্রাঘিমাংশ, অক্ষাংশ এবং অন্যান্য সমস্ত তথ্য যেমন আইএসপি এবং সংযোগের ধরণ জিওআইপি-র সাহায্যে প্রাপ্ত করা যেতে পারে।

উদাহরণ স্বরূপ:

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

3
এটি ম্যাক্সমাইন্ড ডাটাবেসের জন্য কেবল একটি পিএইচপি মডিউল, যা পেইওয়্যার। (ফ্রি "লাইট" সংস্করণগুলি অত্যন্ত ভুল।
কেউ 0

6

Ipdata.co নির্ভরযোগ্য পারফরম্যান্স সহ একটি দ্রুত, অত্যন্ত উপলব্ধ আইপি জিওলোকেশন এপিআই।

এটি প্রতি সেকেন্ডে 10,000 টির জন্য অনুরোধ পরিচালনা করতে সক্ষম প্রতিটি বিশ্বজুড়ে 10 টি সমাপ্তি সহ অত্যন্ত স্কেলেবল!

এই উত্তরটি একটি 'পরীক্ষা' API কী ব্যবহার করে যা অত্যন্ত সীমাবদ্ধ এবং কেবল কয়েকটি কল পরীক্ষার জন্য বোঝানো হয়। আপনার নিজের ফ্রি এপিআই কী এর জন্য সাইনআপ করুন এবং বিকাশের জন্য প্রতিদিন 1500 টি অনুরোধ পান।

পিএইচপি-তে

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>

দাবি পরিত্যাগী;

আমি পরিষেবাটি তৈরি করেছি।

একাধিক ভাষায় উদাহরণগুলির জন্য ডক্স দেখুন

সেরা আইপি জিওলোকেশন API এর এই বিশদ বিশ্লেষণটিও দেখুন ।


5

যদি কেউ এই থ্রেডে হোঁচট খায় তবে এখানে আরও একটি সমাধান রয়েছে। এ timezoneapi.io আপনি একটি IP ঠিকানা অনুরোধ করতে হবে এবং বিনিময়ে বিভিন্ন অবজেক্টের পেতে (আমি সেবা তৈরি করেছি) করতে পারেন। এটি তৈরি করা হয়েছিল কারণ আমার ব্যবহারকারীদের টাইমজোনটি কোথায় ছিল, বিশ্বের কোথায় ছিল এবং বর্তমানে এটি কোন সময় ছিল তা আমার জানা দরকার।

পিএইচপি-তে - অবস্থান, সময় অঞ্চল এবং তারিখ / সময় ফেরত দেয়:

// 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 ব্যবহার করে । মনে রাখবেন, আপনি তাদের সাথে একটি এপিআই কী ব্যবহার করতে পারেন এবং যথাযথ দেখায় সরবরাহিত তথ্য পেতে সরাসরি API ব্যবহার করতে পারেন।

টুকিটাকি

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

আপনার যদি কোনও আইপি ঠিকানা থেকে অবস্থানের প্রয়োজন হয় তবে আপনি নির্ভরযোগ্য জিও আইপি পরিষেবা ব্যবহার করতে পারেন, আপনি এখানে আরও বিশদ পেতে পারেন । এটি আইপিভি 6 সমর্থন করে।

বোনাস হিসাবে এটি আইপি ঠিকানাটি টর নোড, পাবলিক প্রক্সি বা স্প্যামার কিনা তা পরীক্ষা করে দেখতে দেয়।

আপনি নীচে জাভাস্ক্রিপ্ট বা পিএইচপি ব্যবহার করতে পারেন।

জাভাস্ক্রিপ্ট কোড:

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

পিএইচপি কোড:

$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

আমি আইপি অ্যাড্রেস পরিষেবাদি দিয়ে অনেকগুলি পরীক্ষামূলক কাজ করেছি এবং আমি নিজে নিজেই এটি করার কয়েকটি উপায়। প্রথমে আমি ব্যবহার করি এমন দরকারী ওয়েবসাইটগুলির লিঙ্কগুলি বন্ধ করুন:

https://db-ip.com/db এর একটি ফ্রি আইপি-লুকিং পরিষেবা রয়েছে এবং আপনি ডাউনলোড করতে পারেন এমন কয়েকটি ফ্রি সিএসভি ফাইল রয়েছে। এটি আপনার ইমেলের সাথে সংযুক্ত একটি ফ্রি এপিআই কী ব্যবহার করে। এটি প্রতিদিন 2000 ক্যোয়ারিতে সীমাবদ্ধ করে।

http://ipinfo.io/ এপিআই-পিএইচপি ফাংশন ছাড়াই ফ্রি আইপি-লুকিং পরিষেবা:

//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 / ডেটাবেস-ip-country-region-city-latitude- দৈর্ঘ্য আপনার ডাটাবেসে আমদানি করার নির্দেশাবলী সহ একগুচ্ছ ডাউনলোডযোগ্য ফাইল সরবরাহ করে। আপনার ডাটাবেসে এই ফাইলগুলি বন্ধ হয়ে গেলে আপনি মোটামুটি সহজেই ডেটা নির্বাচন করতে পারেন।

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

পিএইচপি ফাংশন ip2long () ব্যবহার করুন; আইপি-ঠিকানাটিকে একটি সংখ্যাসূচক মানে পরিণত করতে। উদাহরণস্বরূপ 1.1.1.1 16843009 হয় This এটি আপনাকে ডাটাবেস ফাইল দ্বারা প্রদত্ত আইপি রেঞ্জগুলির জন্য স্ক্যান করতে দেয়।

সুতরাং, যেখানে আমাদের 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

আইপি জিওলোকেশন সম্পাদন করার জন্য দুটি বিস্তৃত পদ্ধতি: একটি হ'ল একটি ডেটাसेट ডাউনলোড করা, এটি আপনার পরিকাঠামোতে হোস্ট করুন এবং এটি আপ টু ডেট রাখুন। এটির জন্য সময় এবং প্রচেষ্টা প্রয়োজন, বিশেষত যদি আপনার উচ্চ সংখ্যক অনুরোধ সমর্থন করতে হয়। আর একটি সমাধান হ'ল একটি বিদ্যমান এপিআই পরিষেবাটি ব্যবহার করা যা আপনার এবং আরও অনেক কিছুর জন্য সমস্ত কাজ পরিচালনা করে।

অনেক এপিআই ভৌগলিক-অবস্থান পরিষেবা অস্তিত্ব: Maxmind, Ip2location, Ipstack, IpInfo, ইত্যাদি সম্প্রতি কোম্পানির আমি কাজ স্যুইচ করেছে Ipregistry ( https://ipregistry.co ) এবং আমি সিদ্ধান্ত ও বাস্তবায়ন প্রক্রিয়ার সঙ্গে জড়িত ছিল। আইপি জিওলোকেশন এপিআই সন্ধানের সময় আপনার কয়েকটি উপাদান বিবেচনা করা উচিত:

  • পরিষেবাটি কি সঠিক? তারা কি তথ্যের একক উত্স ব্যবহার করছে?
  • তারা কি সত্যিই আপনার বোঝা পরিচালনা করতে পারে?
  • তারা কি বিশ্বব্যাপী ধারাবাহিক এবং দ্রুত প্রতিক্রিয়ার বার সরবরাহ করে (যদি আপনার ব্যবহারকারীরা দেশ নির্দিষ্ট করে থাকেন তবে)?
  • তাদের মূল্য মডেল কি?

আইপি জিওলোকেশন তথ্য (উদাহরণস্বরূপ হুমকি এবং ব্যবহারকারীদের এজেন্ট ডেটাও একটি কল ব্যবহার করে) পেতে এখানে একটি উদাহরণ রয়েছে:

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

দ্রষ্টব্য: আমি ইগ্রিগ্রিস্টিকে প্রচার করার জন্য এখানে নেই এবং বলছি এটি সেরা। তবে বিদ্যমান সমাধানগুলি বিশ্লেষণ করতে আমি দীর্ঘ সময় ব্যয় করেছি এবং সেগুলির সমাধান সত্যিই আশাব্যঞ্জক।


-1

আপনি যদি কোনও আপডেট / সঠিক ডাটাবেস অনুসন্ধান করে থাকেন তবে আমি এটি এখানে ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি আমার সঠিক অবস্থানটি দেখিয়েছিল যা আমি পরীক্ষার সময় অন্যান্য অনেক পরিষেবাতে অন্তর্ভুক্ত ছিল না।
(আমার শহরটি ছিল Rashtএবং আমার দেশ Iranএই আইপি ঠিকানার সাথে ছিল : 2.187.21.235যখন আমি পরীক্ষা করছিলাম))

আমি এপিআই পদ্ধতিগুলির পরিবর্তে ডাটাবেস ব্যবহার করার পরামর্শ দিচ্ছি, কারণ এটি স্থানীয়ভাবে আরও দ্রুত প্রক্রিয়া করা হবে।


-1

ঠিক আছে, বন্ধুরা, আপনার পরামর্শের জন্য ধন্যবাদ; যদিও আমার কাছে 6k + আইপি রয়েছে, কিছু পরিষেবা কিছু সীমাবদ্ধতার কারণে আমার অনুরোধগুলি ব্যর্থ করবে; সুতরাং, আপনি সেগুলি ফ্যালব্যাক মোডে ব্যবহার করতে পারেন;

আমাদের যদি নিম্নলিখিত ফর্ম্যাট সহ উত্স ফাইল থাকে:

user_id_1  ip_1
user_id_2  ip_2
user_id_3  ip_1

আপনি Yii এর জন্য এই সাধারণ এক্সপ্যামালাল কমান্ড (পিওসি) ব্যবহার করার চেয়ে:

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

}

এটি এক ধরণের শিট্টি কোড, তবে এটি কার্যকর হয়। ব্যবহার:

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

নির্দ্বিধায় ব্যবহার করুন, এটি পরিবর্তন করুন এবং আরও ভাল করুন)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.