الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال صعب في IP adress

مغلق
بدأه مستشار. في 9 يوليو 2003 · 12 رد · 1,003 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اود عمل كود يتعرف على بلد الزائر ويعطيه رسالة ترحيبية حسب البلد الذي اتي منه .

اود ان اعرف طريقة التمييز بين الدول من حيث الاي بي ادرس السعودية مثلاً تبدأ بـ 212 هل جميع الــ 212 مخصصة دولياً للسعودية واذا كانت نعم

212.123.456.789

هل تبدأ من 212.000.000.001

وتنتهي عند 212.999.999.999

#2

نعم يا اخي الكريم تستطيع عمل ذلك بحيث أنك تقوم بتخزين رقم كل اي بي لكل دوله داخل قاعدة بيانات، وعندما يقوم المستخدم بالتسجيل داخل الموقع، تفحص عن طريق اليبي إذا كان يساوي نفس الايبي اخرج له البل الفلانيه، وهكذا، وليس بها صعوبة بالفحص، لانه فحصها مثل فحص كلمة المرور وليس اكثر، وبدك طبعاً تستخدم جملة if بحيب لما يساوي الايبي هذا اطبع الجمله التاليه، else وبعديه if لما تنتهي من باقي الدول، وعبده اطلع من جملة if

#3

شكرا اخي الكريم

اين يمكن ان اجد الاي بي ادرس المخصص لكل دولة ؟

#4

السلام عليكم ..

مع إحترامي للأخ المجيب لكن يبدو انه لم يجرب حل ذلك فقط تخيل الطريقة ..

الأمر ليش جملة IF كما قال بكل بساطة ..

الان ال IP عبارة عن عدة مفاصل رقمية و ها هذه عينة كأمثلة :

213.0.1.55

65.45.112.1

الان يجب أن تستخدم دوال الفي بي سكريبت مثل ال mid و ال left لم ذاك ؟

الان انت تود أن تعرف أول 3 أرقام و التي تعنينا من أجل معرفة البلد .. يجب أخذ فقط أول 3 ارقام و فحصها و ليس كل الاي بي لانك لو أخذته كله كيف ستقارن ؟

أيضا لا تضمن أن اول مجموعة مكونة من 3 أرقام .. ربما كانت من رقمين مثلما رأينا بالاي بي الثاني ..

اذا الخطوة الأولى تحديد عدد أرقام اول مجموعة .. يجب تحديد مكان اول نقطة في الكود مثلا في أول مثال كانت الرابعة .. إذا استخدمنا الدالة left لأخذ ما على يسار النقطة بعد تمرير باراميتر للدالة و هو اسم المتغير و هو الاي بي و الاخر هو مكان القص للنص ..

هذا مثال كتبه مشرفنا السابق محمد خليل أبو صلاح

// ip=request("ip")   

//or

// ip=request.ServerVariables(32) 



 dotPosition=inStr(ip,".")

 firstIPpart=left(ip,dotPosition-1)

 response.write ip & "<BR>"



 response.write dotPosition &"<BR>"

 response.write firstIPpart
#5

بس عفوا يا اخي الكريم كل واحد واسلوبه بختلف عن الأخر ، لأنه انا بصراحه ما بعمل زي باقي الأشخاص وادخل على مواقع اجنبيه واخذ منه الشي جاهز، لانه هذا لا يعتبر مبرمج asp طالما يحصل على الشي جاهز، لازم هو الواحد يفكر كيف، مو يطلع على شغله جاهز وبعدين يجي يشرحه ويقول انه هو الي عمله، انا قلت هيك لأنه انا ما اطلعت على شغله جاهزه وكل واحد بيختلف عن الآخر، وممكن أصلا نستخدم عملية ال array لحل ذلك.

#6

يا اخي مستشار ممكن طريقه ثانيه إنك تعمله مو شرط إنك تعمل جملة if ممكن تخزن داخل قاعدة البيانات اليبي لكل دوله وتخزن أسماء الدول كمان، وتستخدم جملة select بحيث تعمل where اليبي بساوي هذا اطبع القيمه التي تساوي من حقل الدول

يعني

select city form country where ip='"&قيمة المتغير المخزنه بداخله ال ip &"'

وهذه الطريقه تكون أسهل من استخدام جملة if

وأنت أمامك الخيار يا اخ مستشار إما أن تستخدم طريقة الفي بي سكربت او طريقة قاعدة البيانات

#7

:D يظهر أخي انك مالك بالبرمجة ..

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

اوكي سوف أمشي على طريقتك انت .

نفرض عندي اي بي كالتالي : 213.24.26.1

جملة الاستعلام التي انت وضعتها في قاعدة البيانات سوف ابحث عن نفس رقم الاي بي كاملا بجميع فقراته ال 4 فهل هذا معقول ؟

هل ستخزن كل أرقام الأي بي لكل العالم في قاعدة بيانات ؟

أم ستخزن أول مقطع منها لتتم مقارنته .. مثلا 212 معروف انه للسعودية .

لا تفكر إطلاقا أني أنسخ أكواد بل أفهم ما أكتب من كود و أدرك منطقيا الحاجة له قبل أن أكتب و السلام .

راجع حساباتك أخي و أرجع للمواضيع السابقة .

أتمنى أن يعود أستاذنا محمد خليل أبو صلاح أو عبد الرحمن المعزاب فلهم صولات و جولات هنا جعلتنا لا نقل عن مستواهم :)

#8

عند معرفة اصغر ip واكبر ip لكل دولة لا نحتاج الى كتابة كل ارقام الاي بي وانما نكتب اصغر واحد واكبر واحد ونكتب كود شرطي

اذا كان الآي بي اكبر من الصغير أو اصغر من الكبير و يساويهما يكون الزائر من دولة كذا وهكذا بالنسبة لكل دولة

ما رأيكم ان نتعاون لانجاز الكود

#9

أخي مستشار تفضلت و طرحت فكرة لكن أنت تعتمد المقارنة الرياضية .. فهل الأي بي رقم أم String ؟؟

هذه نقطة و الشيء الاخر هل هناك دولة غير السعودية أول مقطع رقمي بها هو 212 ؟ إذا لم نبحث عن أصغر و أكبر رقم ؟

الخلاصة أن تبحث داخل سلسلة نصية و أكبر دليل حاول انك تعرف حقل داخل قاعدة بيانات للأي بي هل ستعرفه من نوع integer ؟؟ لا أعتقد بل سيكون Text ..

راجع حلي الموجود بالأعلى ستجده بإذن الله هو المناسب :)

#10

ربما هكذا

	If Not Request.Form("ipaddress") = "" Then

  

   

  ipaddress = Request.Form("ipaddress")

  ipno = Dot2LongIP(ipaddress)

  

  

  If (ipno < 3400892416) or (ipno > 3412281343) Then

 	 Response.Write	"IP address " & ipaddress & " is not in the earth.
" & vbCrLf

  Else



 	 Dim conn, rs, sql, accessdb, strconn

 	 

 	 ' select MS-Access database using DSNless connection

 	 accessdb = server.mappath("ipcountry.mdb")

 	 strconn = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE="

 	 strconn = strconn & accessDB & ";"

 	 Set conn = Server.CreateObject("ADODB.Connection")

 	 conn.open strconn

 	 

 	 ' query string to lookup the country by matching the range of IP address number

 	 strsql = "SELECT * FROM ipcountry WHERE " & ipno & " BETWEEN ipFROM AND ipTO"

 	 

 	 ' execute the query

 	 Set rs = conn.execute(strsql)



 	 Response.Write	"<p>"

 	 Response.Write	"<h1>Lookup Result</h1>"

 	 Response.Write	"<table>"

 	 

 	 ' display results

 	 If Not rs.EOF Then

    Response.Write	"<tr><td>IP Address : </td><td>" & ipaddress & "</td></tr>" & vbCrLf

    Response.Write	"<tr><td>Country Name (Short) : </td><td>" & rs("countrySHORT") & "</td></tr>" & vbCrLf

    Response.Write	"<tr><td>Country Name (Long)  : </td><td>" & rs("countryLONG") & "</td></tr>" & vbCrLf

 	 Else

    Response.Write	"<tr><td>IP Address : </td><td>" & ipaddress & "</td></tr>" & vbCrLf

    Response.Write	"<tr><td>Country Name (Short) : </td><td>-</td></tr>" & vbCrLf

    Response.Write	"<tr><td>Country Name (Long)  : </td><td>-</td></tr>" & vbCrLf

 	 End If



 	 Response.Write	"</table>"

 	 Response.Write	"</p>"

 	 rs.close

 	 set rs = nothing

 	 conn.close

 	 Set conn = nothing

  End if

	End If





	' Convert dotted IP address into IP number in long

	Function Dot2LongIP (ByVal DottedIP)

  Dim i, pos

  Dim PrevPos, num

  If DottedIP = "" Then

 	 Dot2LongIP = 0

  Else

 	 For i = 1 To 4

    pos = InStr(PrevPos + 1, DottedIP, ".", 1)

    If i = 4 Then 

   	 pos = Len(DottedIP) + 1

    End If

    num = Int(Mid(DottedIP, PrevPos + 1, pos - PrevPos - 1))

    PrevPos = pos

    Dot2LongIP = ((num Mod 256) * (256 ^ (4 - i))) +   Dot2LongIP

 	 Next

  End If

	End Function

%>
#11

لكن يا شباب يبقى السؤال كيف يمكن الحصول على قائمة بأرقام الآي بي لكل دولة وتخزينها في قاعدة بيانات؟

أيضاً ماذا لو كان المتصفح مرتبطاً بالإنترنت عبر شبكة خارجية ، مثلاً هو في دبي ومرتبط بالإنترنت عبر مورد للخدمة في هونغ كونغ كما هو حال الكثير من الشركات؟ الرقم الذي سيظهر هو رقم هونغ كونغ وليس دبي ، مع أن الشخص في دبي.

#12

هل توجد طريقة للحصول على الدولة من الخيارات الاقليمية للجهاز ؟

#13

يا شباب في سؤال أعتقد أنه أهم :confused:

كيف أطلع ال IP الخاص بالمستخدم أو المتصفح ؟؟؟ :confused:

هل الأمر سهل أم لا ؟

أرجوكم أفيدوني :)

هذا الموضوع مغلق.

مواضيع مشابهة