۰۷-بهمن-۱۳۹۱, ۱۲:۵۱:۳۸
سلام
همونطور که میدونید آدرسهای IP بر اساس یک نظم بندی خاصی طبقه بندی شدند
هر کشوری که درخواست ip میکنه یک رنج خاصی از آدرس رو به اون کشور اختصاص میدن
تمام اینکار ها برای جلوگیری از بی نظمی ضروریه
در این بین بعضی از سایتها مثل این با دریافت ip از شما بهتون میگن این ip برای کدوم کشور هست و ....
در همین بین بعضی از سایتها یک دیتابیس جامع و کاملی از آدرسهایی که به هر کشور اختصاص دادن رو به صورت رایگان در اختیار عموم قرار دادن
یکی از این سایتها این سایت هستش که آخرین آپدیتشو پیوست کردم
یک خط از این دیتابیس شبیه زیر هستش :
همونطور که معلومه و فیلد اول (2.144.0.0) آدرس شروع ip و فیلد دوم (2.147.255.255) آدرس پایان هستش! یعنی تمام ip هایی که در رنج 2.144.0.0 تا 2.147.255.255 هستند برای کشوره خودمونه.
دو تا فیلد آخر هم که معلومه؛ آخریش نام کامل کشور و یکی مونده به آخری دو حرف اختصاری نام کشور
اما دوفیلد وسطی چیست؟
فیلد سوم:
و چهارم :
یک سری عدد هستند (نمایش عددی ip) که بر مبنای خاصی وجود اومدن؛ در واقع با این دو فیلد کار جست و جو خیلی خیلی آسون میشه!
نحوی محاسبه این اعداد به این شکله:
فرض کنید آدرس ip ما به شکل زیر هست :
برای تبدیل به فرم عددد اول باید
و نهایتان تمام این اعداد باهم جمع میشن! و فرم عددی ip رو نمایش میدن؛
حالا برنامه نویس کافیه فقط ip مورد نظر رو تبدیل کنه به فرم عددی و ببینه بین دو عدد هست یا نه! و از سر و کله زدن با اون آدرسهای ip خودداری کنه!!
توجه:
تمام اینکارها رو توسط دو خط برنامه بش انجام دادم! و قابل اجرا در لینوکس هست؛ که سورسشو میتونید ببینید:
خروجیش:
با ip سایت ایرانلد خودمون:
نتیجه میگیریم سرور توی کاناداست
توجه:
یعد از اینکه هر کشور ip گرفت؛ اونو به شهرهاش اختصاص میده؛ این سایتی که اون بالا گفتم یک دیتابیس دیگه داره که بنا به هر شهر خاص ip هارو جدا کرده!
همونطور که میدونید آدرسهای 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 هستند برای کشوره خودمونه.
دو تا فیلد آخر هم که معلومه؛ آخریش نام کامل کشور و یکی مونده به آخری دو حرف اختصاری نام کشور
اما دوفیلد وسطی چیست؟
فیلد سوم:
کد:
42991616
کد:
43253759
نحوی محاسبه این اعداد به این شکله:
فرض کنید آدرس ip ما به شکل زیر هست :
کد:
AA.BB.CC.DD
کد:
AA * 16777216
BB * 65536
CC * 256
DD
حالا برنامه نویس کافیه فقط 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
نتیجه میگیریم سرور توی کاناداست
توجه:
یعد از اینکه هر کشور ip گرفت؛ اونو به شهرهاش اختصاص میده؛ این سایتی که اون بالا گفتم یک دیتابیس دیگه داره که بنا به هر شهر خاص ip هارو جدا کرده!