Home برمجة جافا الحصول على اسم الدولة من خلال عنوان الجهاز
الحصول على اسم الدولة من خلال عنوان الجهاز

الحصول على اسم الدولة من خلال عنوان الجهاز

58
1

عند حصولك على IP شخص ما سواء من خلال تسجيل logging هذا العنوان القادم للسيرفر أو حتى عند قرائتك للSMTP Header من صندوق بريدك حتى تحصل على عنوان مرسل الرسالة الحقيقي أو غيرها من الحالات فإنك في الغالب تود الحصول على الدولة التي يوجد فيها هذا العنوان..

لحسن الحظ أي دولة لديها Range معين من العنواين وبالتالي يمكن بكل سهوله بعد الحصول على الIP هو التحقق من وجوده في المدى المعين للدولة وعند دخوله في ذلك المجال فمباشرة تستطيع القول بأن هذا الIP من الدولة الفلانية..

هناك بعض من المواقع تقدم هذه الخدمة كwhois ip ، وبعض من المواقع تقدم database صغيرة تستطيع تحميلها في جهازك مثلا:
http://ip-to-country.webhosting.info
http://software77.net/geo-ip/
http://www.maxmind.c…p/geoip_country

سوف نأخذ مثال على القاعدة الموجودة في الموقع الأول، فعند تحميلك للملف ip-to-country.CSV ستجده بهذا الشكل:
post-51148-12762812151352

العمود الأول هو أول IP في المجال والعمود الثاني هو أخر IP في المجال، اما العمود الثالث والرابع فما رمز الدولة بحرفين وثلاثه والعمود الأخير هو اسم الدولة لكل من العناوين الموجودة في العمود الاول والثاني.. لاحظ أن العنوان ليست مكتوبة بالصيغة التقليدية A.B.C.D لكنها مكتوبه على شكل عدد صحيح حتى يسهل تخزينها والمقارنة فيما بينهما..

ولكي يتم تحويل الIP على شكل عدد ، يتم استخدام المعادلة:

A.B.C.D = A*256*256*256 + B*256*256 + C*256 + D

طريقة عمل الكلاس بسيطة، نقوم أولا بفتح هذا الملف والقرائه منه ثم تخزين هذه المعلومات في ArrayList ومن ثم ترتيبها ، وعندما تريد الاستعلام عن رقم IP ما ، فيتم البحث في هذه الArrayList باستخدام Binary Search ، أحب أن أشكر الCollections على توفير دوال Sort و BinarySearch للمبرمجين  ..

يمكن القرائه من الملف بالطريقة العادية BufferedReader ولكني استخدمت Memory Mapped في هذا المثال حيث هي أسرع من الأولى في القرائه وان كان فارق السرعه في هذا المثال ليس بكبير ولكنه يوضح في أمثلة أخرى خصوصا عند العمل في الملفات الضخمة ..

عندما نريد عمل sort و binary search لأي كائن في ArrayList يجب أن يطبق implement هذا الكائن الComparable أو أن نرسل Comparator لهذه الدوال (sort,binarysearch) وفي داخل الComparator نوضح كيف تتم المقارنة في الكائن من النوع المعين.. وهذا ما قمت به في المثال using Comparator .

هذه الطريقة تتطلب بضعه ثواني كstartup (حتى يتم تحميل الملف في الذاكرة وترتيبه ).. ولكنها سريعه في البحث (أجزاء من الثانية)..

لاستخدام الكلاس:

 

 

(58)

وجدي عصام مهندس برمجيات مهتم بعلوم الحاسب وبالأخص مجال الخوارزميات وهندسة البرمجيات وحماية التطبيقات،

Comment(1)

  1. قمت منذ فتره بعمل برنامج مشابه .. لكنه يقوم بعمل Query من المواقع سواء بإستخدام api أو crawl لل HTML

    https://github.com/MuhammadHewedy/IpLookup
    فهو كما الصفحه تذكر … يتمتع بخاصيتين Extensible و Intelligent
    فالأولى هو أنك تستطيع أن تقوم بعمل impl لأي خدمه جديده
    الثانيه أنه يقوم بعمل ترقيه سلبيه للمواقع التى لا تقوم بإرجاع نتيجه

    يشرفنى أخى أن تعطينى رأيك فيه …

LEAVE YOUR COMMENT

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مشاركة