ايران ويج

نسخه‌ی کامل: GeoIP چیست؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام

همونطور که میدونید آدرسهای IP بر اساس یک نظم بندی خاصی طبقه بندی شدند
هر کشوری که درخواست ip میکنه یک رنج خاصی از آدرس رو به اون کشور اختصاص میدن
تمام اینکار ها برای جلوگیری از بی نظمی ضروریه

در این بین بعضی از سایتها مثل این با دریافت ip از شما بهتون میگن این ip برای کدوم کشور هست و ....

در همین بین بعضی از سایتها یک دیتابیس جامع و کاملی از آدرسهایی که به هر کشور اختصاص دادن رو به صورت رایگان در اختیار عموم قرار دادن

یکی از این سایتها این سایت هستش که آخرین آپدیتشو پیوست کردم

یک خط از این دیتابیس شبیه زیر هستش :
کد php:
"2.144.0.0","2.147.255.255","42991616","43253759","IR","Iran, Islamic Republic of" 

همونطور که معلومه و فیلد اول (2.144.0.0) آدرس شروع ip و فیلد دوم (2.147.255.255) آدرس پایان هستش! یعنی تمام ip هایی که در رنج 2.144.0.0 تا 2.147.255.255 هستند برای کشوره خودمونه.

دو تا فیلد آخر هم که معلومه؛ آخریش نام کامل کشور و یکی مونده به آخری دو حرف اختصاری نام کشور

اما دوفیلد وسطی چیست؟ Biggrin

فیلد سوم:
کد:
42991616
و چهارم :
کد:
43253759
یک سری عدد هستند (نمایش عددی ip) که بر مبنای خاصی وجود اومدن؛ در واقع با این دو فیلد کار جست و جو خیلی خیلی آسون میشه!

نحوی محاسبه این اعداد به این شکله:

فرض کنید آدرس ip ما به شکل زیر هست :
کد:
AA.BB.CC.DD
برای تبدیل به فرم عددد اول باید
کد:
AA * 16777216
BB * 65536
CC * 256
DD
و نهایتان تمام این اعداد باهم جمع میشن! و فرم عددی ip رو نمایش میدن؛
حالا برنامه نویس کافیه فقط ip مورد نظر رو تبدیل کنه به فرم عددی و ببینه بین دو عدد هست یا نه! و از سر و کله زدن با اون آدرسهای ip خودداری کنه!!

توجه:
کد:
2 ^ 24 = 16777216
2 ^ 16 = 65536
2 ^ 8 = 256
2 ^ 0 = 1

تمام اینکارها رو توسط دو خط برنامه بش انجام دادم! و قابل اجرا در لینوکس هست؛ که سورسشو میتونید ببینید:

کد php:
i=`echo $1|awk -F. '{print $1*(2**24)+$2*(2**16)+$3*(2**8)+$4*(2**0)}'`

cat GeoIPCountryWhois.csv  |cut -d, -f3-6|sed 's/"//g' awk -F, -v i=$i '($1<=i && $2 >= i ){print $4}' 

خروجیش:
با ip سایت ‌ایران‌لد خودمون:
کد php:
./search 174.142.150.198                                                                               
Canada 

نتیجه میگیریم سرور توی کاناداست Biggrin

توجه:
یعد از اینکه هر کشور ip گرفت؛ اونو به شهرهاش اختصاص میده؛ این سایتی که اون بالا گفتم یک دیتابیس دیگه داره که بنا به هر شهر خاص ip هارو جدا کرده!
-این ip4 مگه تموم نشد؟
-یامه تو شبکه میگفتن ip6 موقعیت جغرافیای رو هم به صورت کد شده توش داره. آیا؟
تموم شدن رو که منم شنیدم تموم شد؛ اما خب بلا استفاده که نشده!
یهو دیدین مثلا آمریکا خواست ip6 استفاده کنه؛ ip های ورژن ۴ رو داد به ایران Biggrin

واسه ip6 هم فکر نکنم! چون واسه این هم یک دیتا بیس داده بیرون!
http://www.maxmind.com/download/geoip/database/
اگه از توی خود آدرس میشد مشخص کرد قانونا نباید دیتابیس میومد بیرون! فقط باید روششو توضیح میدادن که کد منطقه چطور بدست میاد
آخه مسئله اینه اگه تموم شده چرا هنوز تغییر میکنه؟ که دیتابیس اینا آپدیت بشه؟
چند وقت پیش یکی دیگه همچین چیزی پیدا کردم. آیپی خودمو زدم توش نداشت.
ip شما کلا مشکل داره انگار Biggrin من الا ip شما رو زدم نوشت کانادا Biggrin با چیز پی ان که وصل نشدی؟!
----------------------
ادیت:
ایپیتون رو هم تو این سایت زدم نوشت کانادا Biggrin
geoiptool.com
--------------------

--------
در مورد یحث آپدیت هم نظر من اینه که هنوز تقاضا هست دیگه!‌ مثلا کشوری مثل ایران که زورش میاد تجهیزات ip6 خریداری کنه و ... ترجیح میده از همون ip4 استفاده کنه؛ و چون تموم شده میاد از کشوری مثل آمریکا که داره ip6 کار میکنه و تا چند وقت دیگه ip4 هاشو نمیخواد! میخره!
و در نتیجه اون لیست باید به روز رسانی بشه!
یه همچنین سناریوهایی میشه تعریف کرد واسه توجیه آپدیت شدن دیتا بیسشون Biggrin

Biggrin
من نرمالا با چیز پی ان میام نت Biggrin راحت ترم. ولی اسمش این بود که برا آمریکاست Biggrin کرده تو پاچم
ُسلام

من می خوام روی سایتم یک شهر رو بلاک کنم - سایت منجوملا 3 هست - مثلا  اگر از شهر بجنورد کسی سایت من رو دید براش بلاک باشه یا نتونه سایت منر وببینه یا اینکه یه صفحه دیگه براش طراحی کنم  - خواستم ببینم با مطالب بالا این امکان را می شود فراهم کرد -  ؟

با تشکر از همه اساتید
ممنون میشم که اگر همه کمک کنن  که بتونم این کار رو انجام بدم  -
متاسفانه ISP های ایران؛ هاییIP که برای سرویس دهی گرفتند رو به تفیکیک شهر در بانک اطلاعاتی جهانی ثبت نکردند!

مثلا خود من گیلان هستم ولی چون شرکت اصلی در تهران هستش؛ وقتی IP من رو سرچ میکنید مینویسه تهران!!! 

برای همین چیزی که شما میخوایین رو نمیشه به صورت صد در صد پیاده سازی کرد؛‌

ولی اگه برای کشور میخواهید اینجا در وبلاگم توضیح دادم
میتونید شهر ها هم بر اساس همون بلاک کنید -که البته همونطور که ذکر کردم دقیق نیست-
و صد البته با کمی تغییر بالا میتونید بجای پیاده سازی در سیستم عامل؛ توی کدهای php‌ هم اینکارو کنید (که البته توضیه نمیشه)