محمد منصور فرايتر
02-25-2006, 11:53 PM
السلام عليكم
الملخص (الهدف منه تقديم فكرة مختصرة عن المشروع)
يهدف البحث الى تصميم نظام امني خاص بحماية خدمات الشبكات المحلية المرتبطة بالشبكة العالمية Internet مثل خدمة استعراض المواقع او خدمة ارسال البريد الالكتروني او خدمة ارسال و التبادل المعلومات بين الشبكتين و ذلك في سبيل تحقيق مبدأ الحماية الداخلية تقي شر الاخطار الخارجية ، و حفاضاً في الوقت ذاته على وقت الشبكة و كفاءتها من ان تهدر خلال طلب خدمات غير مجديه لها .
من خلال البحث يتم تصميم نظام قادر على ان يتحكم بالخدمات التي تعطى لأي عضو في الشبكة من غلق تلك الخدمات او فتحها و بشكل مستقل عن باقي اعضاء الشبكة و ذلك مع امكانية تحديد مجموعات معينة من الشبكة ليغلق عنها خدمة ما ، و ايضاً يقوم النظام بتقديم العديد من التقارير التي تفيد مدير الشبكة و تساعده في اتخاذ القرارات حول الخدمات المتاحة للأجهزة الموجودة في الشبكة المحلية و الخدمات المغلقة عن كل جهاز وتاريخ غلق كل خدمة من الخدمات .
تم الاعتماد في تصميم النظام على بعض الادوات التي تدعمها لغة Visual Basic مثل الاداة Winsock و دوال الـ API و كذلك دعم هذه اللغة للإرتباط بقاعدة البيانات Access و ملفات الـ INI .
يحتوي هذا النظام على شاشات عربية سهلة الفهم تتيح لمدير الشبكة استخداماً غير معقد مما يوفر الوقت و المجهود عليه، و نأمل من خلال هذا النظام تحقيق الاهداف المرجوة و ان نقدم الشيء اليسير في مجال حماية الشبكات الداخلية .
_____________
المقدمة (الهدف منها هو التقديم للمشاكل التي يعالجها النظام)
يجلب الارتباط مع شبكة الانترنت تحديات امنية جديدة لشبكات الشركات الكبيرة ، فقد شهد العامان الماضيان دخول آلاف الشركات الي شبكة انترنت، حيث أنشأت هذه الشركات مواقع لها علي شبكة ويب، وزودت موظفيها بخدمات البريد الالكتروني ومتصفحات انترنت واصبح بذلك امام المستخدم الموجود ضمن الشبكة الاستفادة من العديد من الخدمات التي توفرها الشبكة العالمية سواءاً أكان استخدامه لصالح الشركة او لغرض الترفية او حتى لغرض نقل ملفات خاصة بالشركة الى خارج الشبكة عبر خدمة نقل الملفات الى الانترنيت ، مما يؤدي الى احتمالية حدوث خطر كبير على الشركة و ذلك من داخل الشبكة نفسها .
تتصرف بعض الشركات وكأن التحديات الامنية لم تكن خطرا حقيقيا بالامس القريب حيث تتطلع الى البنية التحتية لشبكة انترنت، كوسيلة رخيصة نسبيا، لربط شبكتين او عدة شبكات محلية LAN معزولة جغرافيا مع بعضها البعض او للربط عن بعد مع شبكة ما , وتجدر الاشارة الي ان الاعمال التجارية على شبكة انترنت والتي تتطلب الملايين من التبادلات المصرفية السرية اصبحت قريبة من متناول الكثيرين.
ولن يكون الربط مع شبكة انترنت مثل الربط مع اي نوع آخر من الشبكات آمنا تماما، وبدلا من أن تلجأ الشركات الي تحقيق الامن المطلق عليها ان تقوم بتقدير اهمية المعلومات التي تقوم بحمايتها، وتحقق نوعا من التوازن بين احتمالات خرق الترتيبات الامنية وبين كلفة تحقيق مخترق هذه الترتيبات.
قد يخطر في بال معظم الناس عند الحديث عن امن شبكة انترنت برامج جدران النار Firewalls فعلى الرغم من ان برامج جدران النار لا تعتبر علاجا لجميع مشاكل امن المعلومات علي شبكة الانترنت، الا انها ضرورية لاي استراتيجية متعبة، في مجال امن انترنت.
تعتبر برمجيات جدران النار ببساطة حاجزا بين شبكتين وهما في اغلب الاحيان شبكة داخلية وتسمي الشبكة الموثوقة trusted network شبكة خاجية تسمي untrusted network وهي شبكة انترنت في هذه الحالة وتقوم برمجيات جدران النار بفحص رزم البيانات القادمة والخارجة اعتمادا علي مجموعة قواعد التي يضعها المشرف علي الشبكة، للسماح لهذه الرزم بالمرور او يقوم بحجبها ومنعها من الوصول الي الشبكة الداخلية .
كما ان هذا النوع من البرامج يتيح حضر خدمة ما على الجهاز ( Block Port ) مثل خدمة نقل الملفات FTP او استعراض صفحات الويب HTTP او حتى الدردشة عبر الانترنيت CHAT ، و ذلك عند انزال برنامج الجدار الناري على الجهاز المراد التحكم به .
و من الجدير ذكره ان نظم تشغيل الخاصة بالشبكات مثل Windows 2000 Server قادرة على اداء غرض حظر خدمة ما على الشبكة بحيث ان يتم حضر هذه الخدمة على كل اعضاء الشبكة.
__________________________________________________ _
المشكلة التي يعالجها النظام (الهدف منها هو تسليط الضوء على اهداف النظام ) :
من خلال التقديم السابق ، يتضح انه من الممكن تقيد الخدمات التي تمنح لأعضاء الشبكة الداخلية عن طريق استخدام برامج الجدران النارية ، بحيث يتم انزالها على كل جهاز داخل الشبكة بشكل فردي و عليه فإن حظر خدمة ما يتطلب المرور على الجهاز الهدف و غلق الخدمة عنها يدوياً ، او القيام بعملية حظر خدمة ما على جميع اعضاء الشبكة من خلال الـ Server نفسه بحيث لا تكون مسموحة لأي عضو في الشبكة ، و في كلا الحالتين تكمن المشكلة في عدم وجود نظام قادر على ان يتحكم في الخدمات لكل جهاز في الشبكة بشكل مستقل عن الاخر و ذلك عن طريق نظام وحيد موجود على الشبكة يتم انزاله ( غالباً ) على خادم الشبكة Server أي عن بعد ، حيث أن مدير الشبكة يحتاج إلى نظام بالمواصفات السابقة فيحل له المشكلة ويوفر له الوقت والجهد في التعامل مع خدمات الشبكة .
بالاضافة الى المشكلة الرئيسية السابقة توجد بعض المشاكل الجزئية وهي:-
* وجود عناء في إدارة منافذ كل جهاز بشكل منفرد عن الاخر.
* صعوبة في عملية ادارة الشبكة وعدم توفر المرونة في استخدام الـ Firewall.
* التكلفة المادية العالية للـ Firewall والتي قد تصل قيمته الى خمسين الف دولار.
__________________________________________________ _______
سوف اضع لكم الآن معلومات مختصرة جداً عن الشبكة و البروتوكلات و بالذات البروتوكول TCP/IP .. و عن المنافذ Ports ...
__________________________________________________ _____________
الخلفية النظرية (الهدف منها هو تسهيل المفردات و المصطلحات التي ترد في البحث او عند البحث عن اساليب برمجة الشبكات )
ما المقصود بالشبكة اولاً ؟
الشبكة هي نظام اتصالات يقوم بربط عدة حواسيب والتجهيزات الطرفية المرافقة بعضها ببعض بصورة مشابهة نوعا ما للشبكة الهاتفية بهدف تقديم الخدمات الحاسوبية المختلفة للمستخدمين .
كلمة شبكة (Network ) تشير إلى أثنين أو أكثر من أجهزة الحاسب متصلين معا . وهناك عدة أسباب لربط أجهزة الحاسب فى شبكة أهمها ما يلي :
• اتصال أجهزة الحاسب يسمح باتصال الأشخاص ونقل المعلومات.
• اتصال أجهزة الحاسب يسمح بمشاركة موارد الحاسب.
__________________________________________________ _______________
البروتوكولاتProtocols:
يعرف البروتوكول في مصطلحات الشبكات بأنه طريقة قياسية او لغة متفق عليها عالمياً، تتيح لاجهزة الكمبيوتر المتصلة عبر الشبكة التخاطب فيما بينها وتسهيل نقل وتبادل المعلومات المختلفه ، وكأمثله لهذه المعلومات(تصفح البريد، نقل ملف الى سيرفر، وغيره).
وإذا أردنا تعريف البروتوكول بلغة تقنية، نقول عنه أنه وصف رسمي لهيئة الرسائل والقواعد التي يجب على كمبيوترين اتباعها لتبادل الرسائل.
تستطيع البروتوكولات وصف تفاصيل البنية التحتية للواجهة البينية بين كمبيوترين (مثل ترتيب البتات والبايتات المرسلة عبر الأسلاك) وتستطيع أيضاً وصف عمليات التبادل التي تجري بين البرامج على مستوى البنية الفوقية (مثل الطريقة التي يتبادل بها برنامجان الملفات عبر إنترنت) .
أساسيات في البروتوكول TCP/IP :
يمثل الاختصار TCP/IP العبارة Transmission Control Protocol/Internet Protocol أي بروتوكول التحكم بالنقل / بروتوكول الانترنت، ويتألف TCP/IP من بروتوكولات عديدة ، ولذلك كثيرا ما يشار اليها بعبارة مجموعة TCP/IP، حيث يشكل TCP و IP البروتوكولين الأساسين في المجموعة .
السبب الذي يجعل من TCP/IP مهما للغاية هذه الأيام هو انه يؤمن الاتصال بين أي حاسوبين متصلين الي شبكة تعمل وفقا لهذا البروتوكول، و السماح للشبكات المستقلة بالاتصال مع الانترنت، ويقوم بروتوكولTCP/IP بتقديم حلا لمسألة إمكانية تبادل البيانات بين حاسوبين متصلين إلي الانترانت ذاته ولكنها ينتميان إلي شبكات فيزيائية مختلفة، وياتي حل هذه المسألة في أجزاء متعددة بحيث يؤدي كل عضو من عائلة TCP/IP نصيبه في حل جزء من المسألة، وذلك بأن يرسل بروتوكول IP وهو البروتوكول الأهم في طاقم TCP/IP وحدات منفصلة تسمي حزم بيانات IP (IP PACKET) وذلك عن طريق Router ، ويخفي بروتوكول TCP/IP عمليا الموجهات ومعمارية الشبكة ويجعل كل شيء يبدو كشبكة كبيرة واحدة.
كل محطة عمل TCP/IP اوجهاز على الشبكة يجب أن يحمل رقماً منطقياً يعرف باسم IP Address، ويُعرِّف عنوان IP مكان توضع المحطة ضمن الشبكة بنفس الطريقة التي يتم التعريف بها عن عنوان منزل داخل مدينة ما باستخدام اسم الشارع.
ويتيح الـ IP Address بالاستدلال على رقم الشبكة Network ID ورقم محطة العمل داخل الشبكة Host ID، ويدل رقم الشبكة على النظام المتوضع على نفس الشبكة الفيزيائية، ويجب على جميع محطات العمل الموجودة على شبكة فيزيائية واحدة أن تمتلك نفس رقم الشبكة، و كما يجب أن يكون رقم الشبكة وحيداً ايضاً بين أرقام بقية الشبكات، و يجب أن يكون عنوان كل محطة عمل وحيداً بالنسبة للشبكة.
يحوي عنوان IP على 32 بت ويتألف من أربعة حقول ذات ثمانية بتات مفصولة بوساطة نقاط. تمثل كل ثمانية رقماً عشرياً محصوراً بين0-255 ، تدعى هذه البنية بالتمثيل العشري المنقط Dotted Decimal Notation.
تنقسم البروتوكولات بشكل عام الى قسمين:
1.Connection-Oriented.
2.Connectionless.
يعمل البروتوكول من النوع الأول Connection-Oriented بإعداد إتصال مباشر يسمى دائرة ظاهرية أو افتراضية Virtual Circuit بين الأجهزة المتصلة في الشبكة.
ويحقق هذا الإتصال المباشر موثوقية عالية لتسليم البيانات و لكنه قد يؤدي الى بطئ في عمل و أداء الشبكة.
يعتبر بروتوكول TCP/IP (Transmission Control Protocol/Internet Protocol ) مثالاً واضحاً على البروتوكولات محددة وجهة الإتصال Connection-Oriented.
بينما البروتوكولات من النوع الثاني Connectionless فإنها لا توفر اتصالاَ مباشراً مع الكمبيوتر المستقبل قبل إرسال البيانات، مما يعني أن البيانات تنتقل بسرعة أكبر مما ادى الى تحسين في أداء الشبكة، و لكن هذه الطريقة ليست تامة الموثوقية نظراً لعدم التمكن من معرفة حدوث خطأ أثناء الإرسال أم لا.
وأما النوع الثاني من البروتوكولات عديمة الإتصال Connectionless فيعتبر بروتوكول UDP مثالاً واضحاً عليه.
ينص برتوكول الـ TCP/IP على أن الانترنت مقسمة إلى عدة منافذ Ports لتبادل البيانات، عدد هذه المنافذ يقارب 65535 منفذ، وقد جرى العرف على إعطاء منفذ لكل خدمة من خدمات إنترنت الأساسية، فمنفذ بروتوكول http هو 80، لذلك فإن المتصفح الذي تستعمله يقوم تلقائيا بتوجيه طلباته عبر المنفذ 80، والمنفذ القياسي لبروتوكول نقل الملفات FTP هو 21، وهكذا.
__________________________________________________ _____________
بوابات الاتصال (Ports) :
هي عبارة عن بوابات اومنافذ اتصال و قد يظن البعض بأنها منافذ مادية في امكانه رؤيتها كمنافذ الطابعة والفأرة ولكنها في واقع الأمر جزء من الذاكرة له عنوان معين يتعرف علية الجهاز بأنه منطقة إتصال يتم عبره ارسال واستقبال البيانات ويمكن استخدام عدد كبير من المنافذ للأتصال وعددها يزيد عن 65000 يميز كل منفذ عن الاخر رقمه فمثلا المنفذ رقم 1001 يمكن اجراء اتصال عن طريقة وفي تفس اللحظه يتم استخدام المنفذ رقم 2001 لإجراء اتصال آخر, يتم الاتصال بين الجهازين عبر الـ ports.
شرح مفهوم مصطلح المنافذ الـ Ports :
المنافذ في ابسط اشكالها هي عبارة عن ممرات تسمح بتبادل المعلومات والبيانات بين شبكة الانترنت وجهاز الكمبيوتر حيث ان الشخص الذي يريد ان يتصل بخدمة شكبة الانترنت لابد وان يتسخدم ممر او منفذ للعبور الى هذا العالم الواسع حتى يتم الاتصال والتواصل، ويبلغ عدد البورتات في الجهاز (65535) بورت وكل من هذه المنافذ له وظيفة او خدمة محددة وتستخدم برامج محددة بورتات محددة وعلى سييل المثال من المعروف ان المنفذ 80 غالباً ما يكون مخصصاً لموفر الخدمة كي يتم دخول المستخدم الانترنت وفي بعض الأوقات يكون المنفذ رقمه 8080.
تنقسم المنافذ الى ثلاثة اقسام هي:
1.The Well Known Ports :
هي عبارة عن ارقام ثابية لصالح تظبيقات معينة تم تحديدها من قبل منظمة INAN و هي تقع في المدى 0 –1023.
2.The Registered Ports :
هي التي تقوم الشركات الخاصة بحجزها من اجل تطبيقاتها و هي تقع في المدى 1024 – 49151.
3.The Dynamic and/or Private Ports :
هي التي لا تكون ثابتة بل متغيرة و هي تقع في المدى 49152 – 65535.
__________________________________________________ _____________
ارجوا ان لا اكون اطلت عليكم (لأني اطلت عليكم فعلاً) ... و لكن هذه المفاهيم قد يلم بها البعض غير انها مفيدة .. و قد وضعتها لأني اريد ان اجعل هذا الموضوع يمثل مرجعاً للكل بلا استثناء ...
نظرة عامة عن الأداة(Winsock) :
تستخدم أداة الـ Winsock في عملية الاتصال بين جهازين فقط (جهاز خادم وجهاز عميل) ، أو عملية اتصال متعددة تشمل جهاز خادم واحد وعدة أجهزة عميلة وهذا النوع من الاتصال هو الأكثر ، و تبادل المعلومات معه باستخدم بروتوكول TCP أو البروتوكول UDP
(User Datagram Protocol).
كيفية عملها :
يعتمد عمل هذه الأداة على وجود طرفين أو برنامجين أحد هما وهو البرنامج العميل(Clients) والآخر هو البرنامج الخادم(Server)، وتتم عملية الاتصال على النحو التالي:
أولاً: يقوم أحدا البرنامجين ( غالباً ما يكون برنامج الخادم ) بعملية تحديد رقم المنفذ الذي سوف يستقبل عليه الاتصال ويبدأ عملية انتظار اتصال
ثانياً: يقوم البرنامج العميل بطلب الاتصال وذلك عن طريق معرفة كلاً من رقم المنفذ (Port no) للبرنامج الخادم و عنوانه (IP Address).
ثالثاً: يقوم البرنامج الخادم بإرسال قبول طلب العميل بالاتصال.
رابعاً: يتم الاتصال بين الطرفين.
خامساً: تتم عملية تبادل الملفات وغيرها من الخدمات المتوفرة.
طبعاً في الحقيقة العملية ليست بهذه البساطة ولكن هذه تقريباً أهم الخطوات التي تتم بها عملية الاتصال بين جهازين عبر شبكة الانترنت والشبكات المحلية.
خواص الأداة Winsock :
Bytes Received : هذه الخاصية تخبرك بعدد البايتات المستقبلة حالياً في الذاكرة Buffer وهي خاصية تقرأ فقط – آى لا يمكن تغييرها – والعدد الذي يعبر عن البياتات يكون من نوع Long Integer فمثلاً :
CODE Myvar=MyWinsockControl.BytesReceived
وهذا يساعدك علي معرفة المعلومات الموجودة بالذاكرة .
-----------------------------------
Local Hostname: هذه الخاصية تسترجع returns اسم نظام المضيف المحلي وهي للقراءة فقط وفي الظروف العادية تجد تلك الخاصية تستعيد اسم الكمبيوتر وهو الاسم الذي اخترته لجهازك عند تركيب أو تنصيب ويندوز ، ويمكنك معرفته بفتح لوحة التحكم واختيار شبكة الاتصال – تعريف .
----------------------------------
LocalIP : وهي تستعيد IP لجهازك في صيغته الرقمية وهي للقراءة فقط ونوع ما تستعيده هو حرفي.
CODE Myvar= MyWinsockControl.LocalIP
-----------------------------------
Local Port : تستعيد و تضبط set رقم اللوحة المحلية وهي خاصية (قراءة – كتابة) ونوع ما تسترجعه Long Integer:
CODE Myvar= MyWinsockControl.LocalPort
ولضبط الخاصية علي رقم اللوحة أو المنفذ port رقم 1001 نكتب:
CODE MyWinsockControl.LocalPort=1001
-------------------------------------
Protocol : هذه الخاصية تضبط البروتوكول فلضبط الأداة علي البروتوكول FTP نكتب:
CODE MyWinsockontrol.Protocol=sckTCPProtocpl
ولضبطها علي UDP نكتب :
CODE MyWinsockControl.Protocol=sckUDPProtocol
ولمعرفة البروتوكول المستخدم
CODE Myvar=MyWinsockControl.Protocol
--------------------------------------
Remote Host : وهي تستعيد و تضبط الكمبيوتر البعيد أو عنوانه ويمكن أن تكون رقمية أو ودية –علي شكل اسم معروف – (http://www.microsoft.com/) أو في صورة رقمية 192.143.29.47 ، مثلاً :
CODE Myvar= MyWinsockControl.RemoteH
ost
ولضبطها علي عنوان معين :
CODE MyWinsockControl.RemoteHost=”www.bizland.com”
MyWinsockControl.RemoteHost=”192.143.29.47”
-------------------------------------
Remote Port : وهو يستعيد ويضبط رقم اللوحة أو المنفذ و القيمة المستعادة من نوع long integer
فلقراءة رقم لوحة السرفر
CODE Myvar= MyWinsockControl.RemotePort
ولضبط لوحة السرفر أو منفذه
CODE MyWinsockControl.RemotePort=1001
وبذلك يمكنك اختيار التطبيق الذي ترغب في الاتصال به علي السرفر .
-----------------------------------------
State : تستعيد حالة الأداة علي هيئة عدد صحيح يعبر عن حالة الأداة:
0 SckClosed مغلق
1 SckOpen مفتوح
2 SckListening إصغاء
3 sckConnetionPending ربط الاتصال
4 sckResolvingHost جاري فك شفرة المضيف
5 sckHostResolved تم فك شفرة المضيف
6 SckConnecting جاري الاتصال
7 SckConnected تم الاتصال
8 SckClosing الكمبيوتر المرافق أغلق الاتصال
9 SckError يوجد خطأ
طرق Methods الأداة Winsock (دوال)
الطرق هي دوال معدة سلفاً تؤدي وظائف خاصة على الأداة Winsock وسوف نناقش أهم تلك الخواص :
Accept : تستخدم تلك الخاصية مع فقط مع تطبيق السرفر FTP ، حيث تقبل طلب الاتصال من الكمبيوتر التابع ، وحتي تستخدم تلك الخاصية يجب أن تكون الأداة في حدث الاتصال ConnectionRequest وصيغته:
CODE Private Sub MyWinsockControl ConnectionRequest(ByVal requestedID as Long)
MyWinsockControl.Accept
End Sub
--------------------------------------------------
Close : و تستخدم لغلق الاتصال بين السرفر والتابع :
CODE MyWinsockControl.Close
--------------------------------------------------
GetData : وتستخدم في استعادة Retrieve بلوك البيانات الموجود حالياً في الذاكرة Buffer و اختزانه في متعير من نوع variant
CODE MyWinsockControl.GetData myvar
--------------------------------------------------
Listen : وتستخدم علي تطبيق السرفر لجعله ينتظر لطلب الاتصال TCP من الكمبيوتر التابع
CODE MyWinsockControl.Listen
--------------------------------------------------
SendData : وتستخدم لإرسال بيانات للكمبيوتر البعيد ويستخدم في حالة السرفر والتابع معاً .
CODE MyWinsockControl.SendData myvar
----------------------------------------------------------------------------------------------------
أحداث (Events) الأداة Winsock :
الأحداث هي الشرارة التي تبدأ تشغيل الطرق الخاصة بالأداة Winsock.
Close : يقع هذا الحدث عندما يغلق الكمبيوتر البعيد الاتصال ويمكن استخدامه في نهاية الاتصال.
Connect : ويقع لدي حدوث الاتصال بالكمبيوتر البعيد.
ConnectionRequest : ويقع لدي يستقبل السرفر الاتصال من الكمبيوتر التابع .
DataArrival : ويقع لدي استقبال بيانات من الكمبيوتر البعيد
نظرة عامة عن دوال API :
كلمة API هي اختصار لكلمة Application Programming Interface ويمكن ترجمتها " لواجهة برمجة التطبيقات " ، وعندما نتحدث عن نظام التشغيل ويندوز فإننا نعني واجهة برمجة التطبيقات الخاصة بنظام ويندوز وهذا يقودنا إلى استنتاج أن لكل نظام تشغيل واجهة برمجية مختلفة عن الأخرى ويمكن الاستفادة من هذه الواجهة في عملية اختصار حجم التطبيقات بشكل كبير وذلك فقط باستدعاء العملية التي نريدها من الواجهة وسوف يقوم نظام التشغيل بتنفيذ تلك العملية بدلا من التطبيق ولهذا يمكن اعتبار ذلك من الأشياء المفيدة جدا في عملية البرمجة وذلك ليس فقط بسبب اختصار حجم التطبيق ولكن أيضا بسبب اختصار الوقت اللازم للبرمجة بشكل خيالي وذلك لاحتواء الواجهة على جميع العمليات والدوال الشائعة الاستخدام في عمليات البرمجة مثل عمليات الحفظ واختيار الخطوط والألوان واختيار أبعاد الشاشة والتحكم في الفأرة وغيرها الكثير.
فكرتها هي تجميع مجموعة ضخمة من الدوال والإجراءات داخل ملف واحد ، وهذه الدوال تستخدم من قبل أكثر من برنامج ولها وظائف محددة مسبقاً ، وغالباً ما تكون تلك الملفات من النوع DLL .
استخدام API ليس مقتصر على لغة برمجية معينة ولكن تختلف طريقة استخدامه من لغة إلى أخرى .
ما هي فائدة دوال API ؟
تكمن الإجابة ببساطة في أنه توجد عدة أشياء يقوم بها المبرمجون بشكل متكرر مما يضطرهم لكتابة نفس الخطوات البرمجية في كل برنامج يستخدم ميزة أو خاصية تم برمجتها في برنامج آخر ، وتم حل هذا لاشكال بتوحيد تلك الوظائف وصقلها بحيث تصبح أكثر ملائمة وتوافقية .
متى تستخدم تلك الوظائف ؟
يرجع استخدامها لمهارة المبرمج وقدرته على الاستفادة من تلك الدوال أو عند الحاجة لتنفيذ أمر معين لا توفره لغة البرمجة بشكل ضمني .
----------------------------------------------------------------------------------
و بهذا اكون انهيت المعلومات النظرية التي من المهم الالمام بها من اجل فهم برمجة نظام "التحكم بمنافذ الشبكة عن بعد" .. و ارجوا ان تكونوا استفدوا منها و لو الكم القليل ..
وصف مكونات نظام التحكم بمنافذ الشبكة عن بعد :
+ واجهة رئيسية خاصة بالنظام يتم انزالها على الـ (Server) او الجهاز المتحكم ببقية الاجهزة ويتم من خلالها الوصول الى الواجهات الفرعية في النظام ، و يتم من خلال هذه الواجهة تحديد نوع التحكم المطلوب أي هل هو تحكم بجهاز واحد مستقل او بمجموعة اجهزة .
+ تعرض الواجهة الرئيسية للنظام بعرض جميع المستخدمين المتصلين حالياً بالشبكة من اجل تحديد الجهات الممكن التحكم بها .
+ تقوم واجهة الرئيسية للنظام بالتحكم بمنافذ الشبكة على مستوى مجموعات يتم اختيارها من قائمة المستخدمين المتصليين حالياً بالشبكة .
+ تقوم واجهة الرئيسية للنظام بالتحكم بمنافذ الشبكة على مستوى جهاز محدد يتم اختياره من قائمة المستخدمين المتصليين حالياً بالشبكة .
+ يقوم النظام بتقديم التقارير التالية :
- عرض تقرير الاجهزة المغلق عنها خدمة محددة.
- عرض تقرير الخدمات المغلقة عن جهاز محدد.
- عرض التقرير العام للخدمات المغلقة عن كل جهاز.
+ يقوم النظام بتقديم بعض المهام الثانوية التي يتهدف الى تدعيم عمل مدير الشبكة و توفير الوقت و المجهود عليه و هي:
- غلق جهاز او مجموعة اجهزة في الشبكة عن بعد.
- ارسال رسائل الى جهاز او مجموعة اجهزة في الشبكة عن بعد.
- يعرض قائمة لمدير الشبكة تحتوي على ارقام منافذ جميع الخدمات التي تقدمها شبكة الأنترنيت من اجل توفير عملية البحث عليه.
+ تصميم برنامج خاص بالــ (Client) يعمل تلقائياً عند دخوله الى الشبكة، بحيث يكون البرنامج غير مرئي بالنسبة للمستخدم و يكون ضمن برامج الـ System Tray الموجودة بالقرب من الساعة اسفل شريط المهام في الويندوز.
__________________________________________________ ____________
الشفرة الخاصة ببناء عمليات نظام " المتحكم بمنافذ الشبكة عن بعد " :
نظام " المتحكم عن بعد " عبارة عن برنامجين ، يتم انزال الأول – و الذي يتم من خلاله المتحكم ببقية الاجهزة – على الجهاز المتحكم ، و يتم انزال البرنامج الثاني على الجهاز المراد التحكم به .
بين البرنامجين التابعين للنظام يتم تكوين قناة اتصال (Winsock) يتم عبرها ارسال رسائل تم تعريف معناها مسبقاً بين البرنامجين ، فعندما يقوم المتحكم بإرسال رسالة ما يقوم العميل بتحليل الامر الواصل اليه حتى يتعرف على معناه و منثما يقوم بإستدعاء الشفرة الخاصة بتنفيذ الامر .
http://www.l22l.com/up/vouoohsys_pic.jpg
على سبيل التفصيل ، عندما يريد المتحكم تنفيذ عملية ما لجهاز محدد في الشبكة (مثل غلق/فتح منفذ فيه او ارسال رساله له او حتى غلقه) فإنه في البداية يقوم بتحديد الجهاز من قائمة الجهات المتصلة و هذه القائمة تحتوي على جميع الاجهزة المتصلة الآن داخل الشبكة المحلية ، و بعد تحديد الجهاز يقوم بإرسال الأمر المراد تنفيذه اليه مثل الأمر : BlockRemotePort-80 من اجل غلق الخدمة رقم 80 الخاصة بإستعراض الويب ، و عندما يستقبل العميل هذا الأمر يقوم بتحليله و استخلاص رقم المنفذ المراد غلقة و منثما يستدعي الدالة التي تنفذ هذا الأمر .
كبداية ، كيف يتم استعراض الاجهزة المتصلة حالياً بالشبكة المحلية ؟
توجد العديد من الطرق التي يتم من خلالها استعراض الاجهزة المتصلة و جميعها جيدة ، مثلاً عمل قناة اتصال مع كل اجهزة الشبكة على منفذ محدد و الجهاز الذي يتم تكوين القناة معه بنجاح يعتبر جهاز متصل حالياً بالشبكة ... غير اني لم اعتمد هذه الطريقة كونها مهددة بحدوث أي خلل في تكوين القناة مما يعني امكانية عدم التحكم في جهاز هو اصلاً متواجد داخل الشبكة .. !! (هل وضحت المسألة هنا جيداً) .. ، و هناك طريقة تعتمد على استخدام احدى دوال الـ API غير اني لم اعتمدها كون ان الشفرة كانت معقدة جداً و صعبة (على الأقل بالنسبة لي) و من الممكن وضعها في حالة ارد ذلك أي شخص ...
اما عن الطريقة التي اعتمدها فهي (من وجهة نظري) بسيطة و سهلة و مجدية ... و فيها اقوم بتنفيذ الأمر Net View داخل الـ Dos عن طريق جملة Shell من داخل الـ VB حيث ان الأمر Net View خاص بإستعراض جميع الأجهزة المتصلة بالشبكة الآن ، و من اجل الحصول على ناتج هذا الأمر يتم نسخ النواتج الى ملف في السواقة C:\ و قرأته من الـ VB سطر تلو الآخر على انه تدفقي Stream File ...
الامر الذي يقوم بذلك هو :
CODE Shell "cmd /c net view >C:\comName.txt"
و بشكل عام الدالة التي تقوم بذلك :
CODE Private Sub Computers_Name_List()
On Error Resume Next
' تفريغ قائمة الجهات المتصلة
Computers_List.Clear
' انشاء الملف التدفقي
Shell "cmd /c net view >C:\comName.txt", vbHide
Dim FileSystemObject, TextStream As Object
Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
'
Set TextStream = FileSystemObject.OpenTextFile("C:\comName.txt")
' قراءة محتويات الملف التدفقي سطر تلو الأخر
x = 0
Do Until TextStream.AtEndOfStream
x = x + 1
strLine(x) = TextStream.ReadLine
strLine(x) = Mid(strLine(x), 3, 18)
strLine(x) = Trim(strLine(x((
Loop
' غلق الملف التدفقي
TextStream.Close
' اظهار النتائج في قائمة الأتصال
For i = 4 To x - 2
Computers_List.AddItem strLine(i(
Computers_List2.AddItem strLine(i(
Next i
End Sub
و هنا اعرض لكم الشاشة الرئيسية للنظام (لأول مرة .. و حصرياً على منتديات الفريق العربي للبرمجة http://www.arabteam2000-forum.com/html/emoticons/regular_smile.gif ) و التي تظهر الأجهزة المتصلة حالياً بالشبكة ...
متابعة الحديث عن شفرات آلية التحكم بالمنافذ عن بعد :
كما قلت سابقاً ان آلية التحكم عن بعد تعتمد في الاساس على مجموعة من الرسائل المعرفة مسبقاً بين المتحكم و العميل ، و بالتالي اي رسالة تصل الى العميل فإنه تتطلب منه القيم بتنفيذ شفرة معينة موجودة في برنامجه ...
آلية غلق منفذ (خدمة) عن بعد :
بناء على ما سبق فإن الفكرة التي تأتي حالياً الى الذهن هي انه بمجرد ارسال امر معين الى جهة العميل من المتحكم تطلب منه غلق منفذ او خدمة معينة فإنه سوف يتم استدعاء شفرة غلق المنفذ .. ، لكن الذي يحدث في الحقيقة كما يلي :
1. تحليل الرسالة القادمة من المتحكم من اجل استخلاص شيئين منها ، الاول هو الامر المراد تنفيذه و الثاني هو عبارة عن رقم معين (و هو يدل على رقم منفذ ما ) ، و من خلال الشفرة التالية ، نلاحظ انه تم استقبال الامر و استدعاء الدالة do_comm و التي تعمل على تحليل الامر :
CODE Private Sub Winsock_controller_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim data As String
Winsock_controller.GetData data
do_comm (data)
End Sub
-------------------------------------------------------------------
الدالة do_comm(data) الخاصة بتحليل و الاوامر القادمة من المتحكم ..
Private Sub do_comm(data As String)
On Error Resume Next
Dim comm As String
Dim port_no As Integer
pos = InStr(data, "-")
comm = Left(data, pos - 1)
port_no = Right(data, Len(data) - pos)
If (comm = "BlockRemotePort") Then
Add_BlockRemPortList (port_no)
End If
If (comm = "OpenRemotePort") Then
Del_BlockRemPortList (port_no)
End If
If (comm = "OpenAllBlockedPort") Then
Blocked_RPort_List.ListItems.Clear
End If
If (comm = "ShutDown") Then
Call ShutDown
End If
End Sub
2. في حالة ان الامر القادم من السيرفر هو BlockRemotePort-80 ، فإنه سوف يتم استدعاء الدالة Add_BlockRemPortList (لأن الامر الذي تم استخلاصه هو BlockRemotePort) و هذه الدالة تتوقع ان يتم يمرير رقم المنفذ اليها port_no (الذي هو الرقم 80 ) ، و كل ما تقوم به هذه الدالة هو اضافة رقم المنفذ الى قائمة تعرف بقائمة المنافذ المغلقة ...
3. هل تمت عملية الغلق الى الآن ؟؟ .. نعم .... فالذي يحدث في الاساس ان هناك دالة اخرى تستدعى كل نصف ثانية من خلال Timer تقوم هذه الدالة بمراقبة أي منفذ يطلبه العميل الآن ... دالة الـ Timer كما يلي :
CODE Private Sub Tcp_Tab_Timer_Timer()
On Error Resume Next
Call block_port
End Sub
و الداله التي يتم استدعاءها كل نصف ثانية هي block_port و كما قلت تقوم هذه الدالة بمراقبة أي منفذ يطلبه العميل الآن (كيف .. ؟ ) عند طريق الدالة GetTcpTable ، و هي احدى دوال الـ API و الذي تقوم به بكل اختصار هو نفس العمل الذي يقوم به الامر net stat التي نستخدمها في الـ Dos من اجل معرفة معلومات عن الجهات التي الاتصال قائم بيننا و بينها حالياً .. هذه المعلومات هي مثل المنفذ الذي نحن نطلبه للأتصال بالجهاز المتصل و المنفذ الذي فتح في الجهاز من اجل عملية الاتصال و الـ IP للجهاز المتصل .. و غيرها من المعلومات المفيدة .. ، و الذي يفيدنا حالياً هو المنفذ الذي اطلب الاتصال به ، فإذا كان هذا المنفذ هو 80 فهذا يعني انني اطلب خدمة استعراض الويب http لأن هذا المنفذ محجوز لهذا الغرض .. و بعد ان تعرف الدالة block_port المنفذ الذي اريد الاتصال به الآن تقوم بمقارنة رقمه مع الارقام الموجودة في قائمة المنافذ المغلقة .. فإن كان الرقم موجود في قائمة المنافذ المغلقة فإنة تقوم بغلق الاتصال (هل اسمع كيف مرة اخرى ؟؟ http://www.arabteam2000-forum.com/html/emoticons/regular_smile.gif ) ... من الجدير ذكره ان من المعلومات التي احصل عليها عن طريق الدالة GetTcpTable ايضاً حالة الاتصال بين الجهاز و الجهاز المتصل و هي تكون حالة من 12 حالة (مغلق – متصل – استقبال شيئ – ارسال شيء – تأسيس اتصال – انتظار ...... و حذف اتصال ) ... و عليه ، فإني حتى الغي اتصال بمنفذ غير مرغوب فيه اقوم بتغير حالة الاتصال الى حالة حذف الاتصال و التي يعطى لها الرقم 12 مما يعني انهاء الاتصال ، او غلق هذا المنفذ .. و الشفرة التالية هي الخاصة بالدالة block_port() :
CODE Private Sub block_port()
On Error Resume Next
Dim no_port As Long
Dim flag As Boolean
flag = False
'------------------------------------------------
For i = 1 To lngRows
CopyMemory TcpTableRow, arrBuffer(4 + (i - 1) * Len(TcpTableRow)), Len(TcpTableRow)
Counter = 0
no_port = GetTcpPortNumber(TcpTableRow.dwRemotePort)
For j = 1 To Blocked_RPort_List.ListItems.Count
If no_port = Blocked_RPort_List.ListItems.Item(j) Then
flag = True
TcpTableRow.dwState = 12
SetTcpEntry TcpTableRow
DoEvents
End If
Next j
Next i
If (flag) Then
MsgBox " الخدمة التي تطلبها غير متاحة لك ... تستطيع مراجعة مدير الشبكة ", 1048576 + 524288 + 16, "المتحكم"
End If
End Sub
----------------------------------------------------------------------------
الملخص (الهدف منه تقديم فكرة مختصرة عن المشروع)
يهدف البحث الى تصميم نظام امني خاص بحماية خدمات الشبكات المحلية المرتبطة بالشبكة العالمية Internet مثل خدمة استعراض المواقع او خدمة ارسال البريد الالكتروني او خدمة ارسال و التبادل المعلومات بين الشبكتين و ذلك في سبيل تحقيق مبدأ الحماية الداخلية تقي شر الاخطار الخارجية ، و حفاضاً في الوقت ذاته على وقت الشبكة و كفاءتها من ان تهدر خلال طلب خدمات غير مجديه لها .
من خلال البحث يتم تصميم نظام قادر على ان يتحكم بالخدمات التي تعطى لأي عضو في الشبكة من غلق تلك الخدمات او فتحها و بشكل مستقل عن باقي اعضاء الشبكة و ذلك مع امكانية تحديد مجموعات معينة من الشبكة ليغلق عنها خدمة ما ، و ايضاً يقوم النظام بتقديم العديد من التقارير التي تفيد مدير الشبكة و تساعده في اتخاذ القرارات حول الخدمات المتاحة للأجهزة الموجودة في الشبكة المحلية و الخدمات المغلقة عن كل جهاز وتاريخ غلق كل خدمة من الخدمات .
تم الاعتماد في تصميم النظام على بعض الادوات التي تدعمها لغة Visual Basic مثل الاداة Winsock و دوال الـ API و كذلك دعم هذه اللغة للإرتباط بقاعدة البيانات Access و ملفات الـ INI .
يحتوي هذا النظام على شاشات عربية سهلة الفهم تتيح لمدير الشبكة استخداماً غير معقد مما يوفر الوقت و المجهود عليه، و نأمل من خلال هذا النظام تحقيق الاهداف المرجوة و ان نقدم الشيء اليسير في مجال حماية الشبكات الداخلية .
_____________
المقدمة (الهدف منها هو التقديم للمشاكل التي يعالجها النظام)
يجلب الارتباط مع شبكة الانترنت تحديات امنية جديدة لشبكات الشركات الكبيرة ، فقد شهد العامان الماضيان دخول آلاف الشركات الي شبكة انترنت، حيث أنشأت هذه الشركات مواقع لها علي شبكة ويب، وزودت موظفيها بخدمات البريد الالكتروني ومتصفحات انترنت واصبح بذلك امام المستخدم الموجود ضمن الشبكة الاستفادة من العديد من الخدمات التي توفرها الشبكة العالمية سواءاً أكان استخدامه لصالح الشركة او لغرض الترفية او حتى لغرض نقل ملفات خاصة بالشركة الى خارج الشبكة عبر خدمة نقل الملفات الى الانترنيت ، مما يؤدي الى احتمالية حدوث خطر كبير على الشركة و ذلك من داخل الشبكة نفسها .
تتصرف بعض الشركات وكأن التحديات الامنية لم تكن خطرا حقيقيا بالامس القريب حيث تتطلع الى البنية التحتية لشبكة انترنت، كوسيلة رخيصة نسبيا، لربط شبكتين او عدة شبكات محلية LAN معزولة جغرافيا مع بعضها البعض او للربط عن بعد مع شبكة ما , وتجدر الاشارة الي ان الاعمال التجارية على شبكة انترنت والتي تتطلب الملايين من التبادلات المصرفية السرية اصبحت قريبة من متناول الكثيرين.
ولن يكون الربط مع شبكة انترنت مثل الربط مع اي نوع آخر من الشبكات آمنا تماما، وبدلا من أن تلجأ الشركات الي تحقيق الامن المطلق عليها ان تقوم بتقدير اهمية المعلومات التي تقوم بحمايتها، وتحقق نوعا من التوازن بين احتمالات خرق الترتيبات الامنية وبين كلفة تحقيق مخترق هذه الترتيبات.
قد يخطر في بال معظم الناس عند الحديث عن امن شبكة انترنت برامج جدران النار Firewalls فعلى الرغم من ان برامج جدران النار لا تعتبر علاجا لجميع مشاكل امن المعلومات علي شبكة الانترنت، الا انها ضرورية لاي استراتيجية متعبة، في مجال امن انترنت.
تعتبر برمجيات جدران النار ببساطة حاجزا بين شبكتين وهما في اغلب الاحيان شبكة داخلية وتسمي الشبكة الموثوقة trusted network شبكة خاجية تسمي untrusted network وهي شبكة انترنت في هذه الحالة وتقوم برمجيات جدران النار بفحص رزم البيانات القادمة والخارجة اعتمادا علي مجموعة قواعد التي يضعها المشرف علي الشبكة، للسماح لهذه الرزم بالمرور او يقوم بحجبها ومنعها من الوصول الي الشبكة الداخلية .
كما ان هذا النوع من البرامج يتيح حضر خدمة ما على الجهاز ( Block Port ) مثل خدمة نقل الملفات FTP او استعراض صفحات الويب HTTP او حتى الدردشة عبر الانترنيت CHAT ، و ذلك عند انزال برنامج الجدار الناري على الجهاز المراد التحكم به .
و من الجدير ذكره ان نظم تشغيل الخاصة بالشبكات مثل Windows 2000 Server قادرة على اداء غرض حظر خدمة ما على الشبكة بحيث ان يتم حضر هذه الخدمة على كل اعضاء الشبكة.
__________________________________________________ _
المشكلة التي يعالجها النظام (الهدف منها هو تسليط الضوء على اهداف النظام ) :
من خلال التقديم السابق ، يتضح انه من الممكن تقيد الخدمات التي تمنح لأعضاء الشبكة الداخلية عن طريق استخدام برامج الجدران النارية ، بحيث يتم انزالها على كل جهاز داخل الشبكة بشكل فردي و عليه فإن حظر خدمة ما يتطلب المرور على الجهاز الهدف و غلق الخدمة عنها يدوياً ، او القيام بعملية حظر خدمة ما على جميع اعضاء الشبكة من خلال الـ Server نفسه بحيث لا تكون مسموحة لأي عضو في الشبكة ، و في كلا الحالتين تكمن المشكلة في عدم وجود نظام قادر على ان يتحكم في الخدمات لكل جهاز في الشبكة بشكل مستقل عن الاخر و ذلك عن طريق نظام وحيد موجود على الشبكة يتم انزاله ( غالباً ) على خادم الشبكة Server أي عن بعد ، حيث أن مدير الشبكة يحتاج إلى نظام بالمواصفات السابقة فيحل له المشكلة ويوفر له الوقت والجهد في التعامل مع خدمات الشبكة .
بالاضافة الى المشكلة الرئيسية السابقة توجد بعض المشاكل الجزئية وهي:-
* وجود عناء في إدارة منافذ كل جهاز بشكل منفرد عن الاخر.
* صعوبة في عملية ادارة الشبكة وعدم توفر المرونة في استخدام الـ Firewall.
* التكلفة المادية العالية للـ Firewall والتي قد تصل قيمته الى خمسين الف دولار.
__________________________________________________ _______
سوف اضع لكم الآن معلومات مختصرة جداً عن الشبكة و البروتوكلات و بالذات البروتوكول TCP/IP .. و عن المنافذ Ports ...
__________________________________________________ _____________
الخلفية النظرية (الهدف منها هو تسهيل المفردات و المصطلحات التي ترد في البحث او عند البحث عن اساليب برمجة الشبكات )
ما المقصود بالشبكة اولاً ؟
الشبكة هي نظام اتصالات يقوم بربط عدة حواسيب والتجهيزات الطرفية المرافقة بعضها ببعض بصورة مشابهة نوعا ما للشبكة الهاتفية بهدف تقديم الخدمات الحاسوبية المختلفة للمستخدمين .
كلمة شبكة (Network ) تشير إلى أثنين أو أكثر من أجهزة الحاسب متصلين معا . وهناك عدة أسباب لربط أجهزة الحاسب فى شبكة أهمها ما يلي :
• اتصال أجهزة الحاسب يسمح باتصال الأشخاص ونقل المعلومات.
• اتصال أجهزة الحاسب يسمح بمشاركة موارد الحاسب.
__________________________________________________ _______________
البروتوكولاتProtocols:
يعرف البروتوكول في مصطلحات الشبكات بأنه طريقة قياسية او لغة متفق عليها عالمياً، تتيح لاجهزة الكمبيوتر المتصلة عبر الشبكة التخاطب فيما بينها وتسهيل نقل وتبادل المعلومات المختلفه ، وكأمثله لهذه المعلومات(تصفح البريد، نقل ملف الى سيرفر، وغيره).
وإذا أردنا تعريف البروتوكول بلغة تقنية، نقول عنه أنه وصف رسمي لهيئة الرسائل والقواعد التي يجب على كمبيوترين اتباعها لتبادل الرسائل.
تستطيع البروتوكولات وصف تفاصيل البنية التحتية للواجهة البينية بين كمبيوترين (مثل ترتيب البتات والبايتات المرسلة عبر الأسلاك) وتستطيع أيضاً وصف عمليات التبادل التي تجري بين البرامج على مستوى البنية الفوقية (مثل الطريقة التي يتبادل بها برنامجان الملفات عبر إنترنت) .
أساسيات في البروتوكول TCP/IP :
يمثل الاختصار TCP/IP العبارة Transmission Control Protocol/Internet Protocol أي بروتوكول التحكم بالنقل / بروتوكول الانترنت، ويتألف TCP/IP من بروتوكولات عديدة ، ولذلك كثيرا ما يشار اليها بعبارة مجموعة TCP/IP، حيث يشكل TCP و IP البروتوكولين الأساسين في المجموعة .
السبب الذي يجعل من TCP/IP مهما للغاية هذه الأيام هو انه يؤمن الاتصال بين أي حاسوبين متصلين الي شبكة تعمل وفقا لهذا البروتوكول، و السماح للشبكات المستقلة بالاتصال مع الانترنت، ويقوم بروتوكولTCP/IP بتقديم حلا لمسألة إمكانية تبادل البيانات بين حاسوبين متصلين إلي الانترانت ذاته ولكنها ينتميان إلي شبكات فيزيائية مختلفة، وياتي حل هذه المسألة في أجزاء متعددة بحيث يؤدي كل عضو من عائلة TCP/IP نصيبه في حل جزء من المسألة، وذلك بأن يرسل بروتوكول IP وهو البروتوكول الأهم في طاقم TCP/IP وحدات منفصلة تسمي حزم بيانات IP (IP PACKET) وذلك عن طريق Router ، ويخفي بروتوكول TCP/IP عمليا الموجهات ومعمارية الشبكة ويجعل كل شيء يبدو كشبكة كبيرة واحدة.
كل محطة عمل TCP/IP اوجهاز على الشبكة يجب أن يحمل رقماً منطقياً يعرف باسم IP Address، ويُعرِّف عنوان IP مكان توضع المحطة ضمن الشبكة بنفس الطريقة التي يتم التعريف بها عن عنوان منزل داخل مدينة ما باستخدام اسم الشارع.
ويتيح الـ IP Address بالاستدلال على رقم الشبكة Network ID ورقم محطة العمل داخل الشبكة Host ID، ويدل رقم الشبكة على النظام المتوضع على نفس الشبكة الفيزيائية، ويجب على جميع محطات العمل الموجودة على شبكة فيزيائية واحدة أن تمتلك نفس رقم الشبكة، و كما يجب أن يكون رقم الشبكة وحيداً ايضاً بين أرقام بقية الشبكات، و يجب أن يكون عنوان كل محطة عمل وحيداً بالنسبة للشبكة.
يحوي عنوان IP على 32 بت ويتألف من أربعة حقول ذات ثمانية بتات مفصولة بوساطة نقاط. تمثل كل ثمانية رقماً عشرياً محصوراً بين0-255 ، تدعى هذه البنية بالتمثيل العشري المنقط Dotted Decimal Notation.
تنقسم البروتوكولات بشكل عام الى قسمين:
1.Connection-Oriented.
2.Connectionless.
يعمل البروتوكول من النوع الأول Connection-Oriented بإعداد إتصال مباشر يسمى دائرة ظاهرية أو افتراضية Virtual Circuit بين الأجهزة المتصلة في الشبكة.
ويحقق هذا الإتصال المباشر موثوقية عالية لتسليم البيانات و لكنه قد يؤدي الى بطئ في عمل و أداء الشبكة.
يعتبر بروتوكول TCP/IP (Transmission Control Protocol/Internet Protocol ) مثالاً واضحاً على البروتوكولات محددة وجهة الإتصال Connection-Oriented.
بينما البروتوكولات من النوع الثاني Connectionless فإنها لا توفر اتصالاَ مباشراً مع الكمبيوتر المستقبل قبل إرسال البيانات، مما يعني أن البيانات تنتقل بسرعة أكبر مما ادى الى تحسين في أداء الشبكة، و لكن هذه الطريقة ليست تامة الموثوقية نظراً لعدم التمكن من معرفة حدوث خطأ أثناء الإرسال أم لا.
وأما النوع الثاني من البروتوكولات عديمة الإتصال Connectionless فيعتبر بروتوكول UDP مثالاً واضحاً عليه.
ينص برتوكول الـ TCP/IP على أن الانترنت مقسمة إلى عدة منافذ Ports لتبادل البيانات، عدد هذه المنافذ يقارب 65535 منفذ، وقد جرى العرف على إعطاء منفذ لكل خدمة من خدمات إنترنت الأساسية، فمنفذ بروتوكول http هو 80، لذلك فإن المتصفح الذي تستعمله يقوم تلقائيا بتوجيه طلباته عبر المنفذ 80، والمنفذ القياسي لبروتوكول نقل الملفات FTP هو 21، وهكذا.
__________________________________________________ _____________
بوابات الاتصال (Ports) :
هي عبارة عن بوابات اومنافذ اتصال و قد يظن البعض بأنها منافذ مادية في امكانه رؤيتها كمنافذ الطابعة والفأرة ولكنها في واقع الأمر جزء من الذاكرة له عنوان معين يتعرف علية الجهاز بأنه منطقة إتصال يتم عبره ارسال واستقبال البيانات ويمكن استخدام عدد كبير من المنافذ للأتصال وعددها يزيد عن 65000 يميز كل منفذ عن الاخر رقمه فمثلا المنفذ رقم 1001 يمكن اجراء اتصال عن طريقة وفي تفس اللحظه يتم استخدام المنفذ رقم 2001 لإجراء اتصال آخر, يتم الاتصال بين الجهازين عبر الـ ports.
شرح مفهوم مصطلح المنافذ الـ Ports :
المنافذ في ابسط اشكالها هي عبارة عن ممرات تسمح بتبادل المعلومات والبيانات بين شبكة الانترنت وجهاز الكمبيوتر حيث ان الشخص الذي يريد ان يتصل بخدمة شكبة الانترنت لابد وان يتسخدم ممر او منفذ للعبور الى هذا العالم الواسع حتى يتم الاتصال والتواصل، ويبلغ عدد البورتات في الجهاز (65535) بورت وكل من هذه المنافذ له وظيفة او خدمة محددة وتستخدم برامج محددة بورتات محددة وعلى سييل المثال من المعروف ان المنفذ 80 غالباً ما يكون مخصصاً لموفر الخدمة كي يتم دخول المستخدم الانترنت وفي بعض الأوقات يكون المنفذ رقمه 8080.
تنقسم المنافذ الى ثلاثة اقسام هي:
1.The Well Known Ports :
هي عبارة عن ارقام ثابية لصالح تظبيقات معينة تم تحديدها من قبل منظمة INAN و هي تقع في المدى 0 –1023.
2.The Registered Ports :
هي التي تقوم الشركات الخاصة بحجزها من اجل تطبيقاتها و هي تقع في المدى 1024 – 49151.
3.The Dynamic and/or Private Ports :
هي التي لا تكون ثابتة بل متغيرة و هي تقع في المدى 49152 – 65535.
__________________________________________________ _____________
ارجوا ان لا اكون اطلت عليكم (لأني اطلت عليكم فعلاً) ... و لكن هذه المفاهيم قد يلم بها البعض غير انها مفيدة .. و قد وضعتها لأني اريد ان اجعل هذا الموضوع يمثل مرجعاً للكل بلا استثناء ...
نظرة عامة عن الأداة(Winsock) :
تستخدم أداة الـ Winsock في عملية الاتصال بين جهازين فقط (جهاز خادم وجهاز عميل) ، أو عملية اتصال متعددة تشمل جهاز خادم واحد وعدة أجهزة عميلة وهذا النوع من الاتصال هو الأكثر ، و تبادل المعلومات معه باستخدم بروتوكول TCP أو البروتوكول UDP
(User Datagram Protocol).
كيفية عملها :
يعتمد عمل هذه الأداة على وجود طرفين أو برنامجين أحد هما وهو البرنامج العميل(Clients) والآخر هو البرنامج الخادم(Server)، وتتم عملية الاتصال على النحو التالي:
أولاً: يقوم أحدا البرنامجين ( غالباً ما يكون برنامج الخادم ) بعملية تحديد رقم المنفذ الذي سوف يستقبل عليه الاتصال ويبدأ عملية انتظار اتصال
ثانياً: يقوم البرنامج العميل بطلب الاتصال وذلك عن طريق معرفة كلاً من رقم المنفذ (Port no) للبرنامج الخادم و عنوانه (IP Address).
ثالثاً: يقوم البرنامج الخادم بإرسال قبول طلب العميل بالاتصال.
رابعاً: يتم الاتصال بين الطرفين.
خامساً: تتم عملية تبادل الملفات وغيرها من الخدمات المتوفرة.
طبعاً في الحقيقة العملية ليست بهذه البساطة ولكن هذه تقريباً أهم الخطوات التي تتم بها عملية الاتصال بين جهازين عبر شبكة الانترنت والشبكات المحلية.
خواص الأداة Winsock :
Bytes Received : هذه الخاصية تخبرك بعدد البايتات المستقبلة حالياً في الذاكرة Buffer وهي خاصية تقرأ فقط – آى لا يمكن تغييرها – والعدد الذي يعبر عن البياتات يكون من نوع Long Integer فمثلاً :
CODE Myvar=MyWinsockControl.BytesReceived
وهذا يساعدك علي معرفة المعلومات الموجودة بالذاكرة .
-----------------------------------
Local Hostname: هذه الخاصية تسترجع returns اسم نظام المضيف المحلي وهي للقراءة فقط وفي الظروف العادية تجد تلك الخاصية تستعيد اسم الكمبيوتر وهو الاسم الذي اخترته لجهازك عند تركيب أو تنصيب ويندوز ، ويمكنك معرفته بفتح لوحة التحكم واختيار شبكة الاتصال – تعريف .
----------------------------------
LocalIP : وهي تستعيد IP لجهازك في صيغته الرقمية وهي للقراءة فقط ونوع ما تستعيده هو حرفي.
CODE Myvar= MyWinsockControl.LocalIP
-----------------------------------
Local Port : تستعيد و تضبط set رقم اللوحة المحلية وهي خاصية (قراءة – كتابة) ونوع ما تسترجعه Long Integer:
CODE Myvar= MyWinsockControl.LocalPort
ولضبط الخاصية علي رقم اللوحة أو المنفذ port رقم 1001 نكتب:
CODE MyWinsockControl.LocalPort=1001
-------------------------------------
Protocol : هذه الخاصية تضبط البروتوكول فلضبط الأداة علي البروتوكول FTP نكتب:
CODE MyWinsockontrol.Protocol=sckTCPProtocpl
ولضبطها علي UDP نكتب :
CODE MyWinsockControl.Protocol=sckUDPProtocol
ولمعرفة البروتوكول المستخدم
CODE Myvar=MyWinsockControl.Protocol
--------------------------------------
Remote Host : وهي تستعيد و تضبط الكمبيوتر البعيد أو عنوانه ويمكن أن تكون رقمية أو ودية –علي شكل اسم معروف – (http://www.microsoft.com/) أو في صورة رقمية 192.143.29.47 ، مثلاً :
CODE Myvar= MyWinsockControl.RemoteH
ost
ولضبطها علي عنوان معين :
CODE MyWinsockControl.RemoteHost=”www.bizland.com”
MyWinsockControl.RemoteHost=”192.143.29.47”
-------------------------------------
Remote Port : وهو يستعيد ويضبط رقم اللوحة أو المنفذ و القيمة المستعادة من نوع long integer
فلقراءة رقم لوحة السرفر
CODE Myvar= MyWinsockControl.RemotePort
ولضبط لوحة السرفر أو منفذه
CODE MyWinsockControl.RemotePort=1001
وبذلك يمكنك اختيار التطبيق الذي ترغب في الاتصال به علي السرفر .
-----------------------------------------
State : تستعيد حالة الأداة علي هيئة عدد صحيح يعبر عن حالة الأداة:
0 SckClosed مغلق
1 SckOpen مفتوح
2 SckListening إصغاء
3 sckConnetionPending ربط الاتصال
4 sckResolvingHost جاري فك شفرة المضيف
5 sckHostResolved تم فك شفرة المضيف
6 SckConnecting جاري الاتصال
7 SckConnected تم الاتصال
8 SckClosing الكمبيوتر المرافق أغلق الاتصال
9 SckError يوجد خطأ
طرق Methods الأداة Winsock (دوال)
الطرق هي دوال معدة سلفاً تؤدي وظائف خاصة على الأداة Winsock وسوف نناقش أهم تلك الخواص :
Accept : تستخدم تلك الخاصية مع فقط مع تطبيق السرفر FTP ، حيث تقبل طلب الاتصال من الكمبيوتر التابع ، وحتي تستخدم تلك الخاصية يجب أن تكون الأداة في حدث الاتصال ConnectionRequest وصيغته:
CODE Private Sub MyWinsockControl ConnectionRequest(ByVal requestedID as Long)
MyWinsockControl.Accept
End Sub
--------------------------------------------------
Close : و تستخدم لغلق الاتصال بين السرفر والتابع :
CODE MyWinsockControl.Close
--------------------------------------------------
GetData : وتستخدم في استعادة Retrieve بلوك البيانات الموجود حالياً في الذاكرة Buffer و اختزانه في متعير من نوع variant
CODE MyWinsockControl.GetData myvar
--------------------------------------------------
Listen : وتستخدم علي تطبيق السرفر لجعله ينتظر لطلب الاتصال TCP من الكمبيوتر التابع
CODE MyWinsockControl.Listen
--------------------------------------------------
SendData : وتستخدم لإرسال بيانات للكمبيوتر البعيد ويستخدم في حالة السرفر والتابع معاً .
CODE MyWinsockControl.SendData myvar
----------------------------------------------------------------------------------------------------
أحداث (Events) الأداة Winsock :
الأحداث هي الشرارة التي تبدأ تشغيل الطرق الخاصة بالأداة Winsock.
Close : يقع هذا الحدث عندما يغلق الكمبيوتر البعيد الاتصال ويمكن استخدامه في نهاية الاتصال.
Connect : ويقع لدي حدوث الاتصال بالكمبيوتر البعيد.
ConnectionRequest : ويقع لدي يستقبل السرفر الاتصال من الكمبيوتر التابع .
DataArrival : ويقع لدي استقبال بيانات من الكمبيوتر البعيد
نظرة عامة عن دوال API :
كلمة API هي اختصار لكلمة Application Programming Interface ويمكن ترجمتها " لواجهة برمجة التطبيقات " ، وعندما نتحدث عن نظام التشغيل ويندوز فإننا نعني واجهة برمجة التطبيقات الخاصة بنظام ويندوز وهذا يقودنا إلى استنتاج أن لكل نظام تشغيل واجهة برمجية مختلفة عن الأخرى ويمكن الاستفادة من هذه الواجهة في عملية اختصار حجم التطبيقات بشكل كبير وذلك فقط باستدعاء العملية التي نريدها من الواجهة وسوف يقوم نظام التشغيل بتنفيذ تلك العملية بدلا من التطبيق ولهذا يمكن اعتبار ذلك من الأشياء المفيدة جدا في عملية البرمجة وذلك ليس فقط بسبب اختصار حجم التطبيق ولكن أيضا بسبب اختصار الوقت اللازم للبرمجة بشكل خيالي وذلك لاحتواء الواجهة على جميع العمليات والدوال الشائعة الاستخدام في عمليات البرمجة مثل عمليات الحفظ واختيار الخطوط والألوان واختيار أبعاد الشاشة والتحكم في الفأرة وغيرها الكثير.
فكرتها هي تجميع مجموعة ضخمة من الدوال والإجراءات داخل ملف واحد ، وهذه الدوال تستخدم من قبل أكثر من برنامج ولها وظائف محددة مسبقاً ، وغالباً ما تكون تلك الملفات من النوع DLL .
استخدام API ليس مقتصر على لغة برمجية معينة ولكن تختلف طريقة استخدامه من لغة إلى أخرى .
ما هي فائدة دوال API ؟
تكمن الإجابة ببساطة في أنه توجد عدة أشياء يقوم بها المبرمجون بشكل متكرر مما يضطرهم لكتابة نفس الخطوات البرمجية في كل برنامج يستخدم ميزة أو خاصية تم برمجتها في برنامج آخر ، وتم حل هذا لاشكال بتوحيد تلك الوظائف وصقلها بحيث تصبح أكثر ملائمة وتوافقية .
متى تستخدم تلك الوظائف ؟
يرجع استخدامها لمهارة المبرمج وقدرته على الاستفادة من تلك الدوال أو عند الحاجة لتنفيذ أمر معين لا توفره لغة البرمجة بشكل ضمني .
----------------------------------------------------------------------------------
و بهذا اكون انهيت المعلومات النظرية التي من المهم الالمام بها من اجل فهم برمجة نظام "التحكم بمنافذ الشبكة عن بعد" .. و ارجوا ان تكونوا استفدوا منها و لو الكم القليل ..
وصف مكونات نظام التحكم بمنافذ الشبكة عن بعد :
+ واجهة رئيسية خاصة بالنظام يتم انزالها على الـ (Server) او الجهاز المتحكم ببقية الاجهزة ويتم من خلالها الوصول الى الواجهات الفرعية في النظام ، و يتم من خلال هذه الواجهة تحديد نوع التحكم المطلوب أي هل هو تحكم بجهاز واحد مستقل او بمجموعة اجهزة .
+ تعرض الواجهة الرئيسية للنظام بعرض جميع المستخدمين المتصلين حالياً بالشبكة من اجل تحديد الجهات الممكن التحكم بها .
+ تقوم واجهة الرئيسية للنظام بالتحكم بمنافذ الشبكة على مستوى مجموعات يتم اختيارها من قائمة المستخدمين المتصليين حالياً بالشبكة .
+ تقوم واجهة الرئيسية للنظام بالتحكم بمنافذ الشبكة على مستوى جهاز محدد يتم اختياره من قائمة المستخدمين المتصليين حالياً بالشبكة .
+ يقوم النظام بتقديم التقارير التالية :
- عرض تقرير الاجهزة المغلق عنها خدمة محددة.
- عرض تقرير الخدمات المغلقة عن جهاز محدد.
- عرض التقرير العام للخدمات المغلقة عن كل جهاز.
+ يقوم النظام بتقديم بعض المهام الثانوية التي يتهدف الى تدعيم عمل مدير الشبكة و توفير الوقت و المجهود عليه و هي:
- غلق جهاز او مجموعة اجهزة في الشبكة عن بعد.
- ارسال رسائل الى جهاز او مجموعة اجهزة في الشبكة عن بعد.
- يعرض قائمة لمدير الشبكة تحتوي على ارقام منافذ جميع الخدمات التي تقدمها شبكة الأنترنيت من اجل توفير عملية البحث عليه.
+ تصميم برنامج خاص بالــ (Client) يعمل تلقائياً عند دخوله الى الشبكة، بحيث يكون البرنامج غير مرئي بالنسبة للمستخدم و يكون ضمن برامج الـ System Tray الموجودة بالقرب من الساعة اسفل شريط المهام في الويندوز.
__________________________________________________ ____________
الشفرة الخاصة ببناء عمليات نظام " المتحكم بمنافذ الشبكة عن بعد " :
نظام " المتحكم عن بعد " عبارة عن برنامجين ، يتم انزال الأول – و الذي يتم من خلاله المتحكم ببقية الاجهزة – على الجهاز المتحكم ، و يتم انزال البرنامج الثاني على الجهاز المراد التحكم به .
بين البرنامجين التابعين للنظام يتم تكوين قناة اتصال (Winsock) يتم عبرها ارسال رسائل تم تعريف معناها مسبقاً بين البرنامجين ، فعندما يقوم المتحكم بإرسال رسالة ما يقوم العميل بتحليل الامر الواصل اليه حتى يتعرف على معناه و منثما يقوم بإستدعاء الشفرة الخاصة بتنفيذ الامر .
http://www.l22l.com/up/vouoohsys_pic.jpg
على سبيل التفصيل ، عندما يريد المتحكم تنفيذ عملية ما لجهاز محدد في الشبكة (مثل غلق/فتح منفذ فيه او ارسال رساله له او حتى غلقه) فإنه في البداية يقوم بتحديد الجهاز من قائمة الجهات المتصلة و هذه القائمة تحتوي على جميع الاجهزة المتصلة الآن داخل الشبكة المحلية ، و بعد تحديد الجهاز يقوم بإرسال الأمر المراد تنفيذه اليه مثل الأمر : BlockRemotePort-80 من اجل غلق الخدمة رقم 80 الخاصة بإستعراض الويب ، و عندما يستقبل العميل هذا الأمر يقوم بتحليله و استخلاص رقم المنفذ المراد غلقة و منثما يستدعي الدالة التي تنفذ هذا الأمر .
كبداية ، كيف يتم استعراض الاجهزة المتصلة حالياً بالشبكة المحلية ؟
توجد العديد من الطرق التي يتم من خلالها استعراض الاجهزة المتصلة و جميعها جيدة ، مثلاً عمل قناة اتصال مع كل اجهزة الشبكة على منفذ محدد و الجهاز الذي يتم تكوين القناة معه بنجاح يعتبر جهاز متصل حالياً بالشبكة ... غير اني لم اعتمد هذه الطريقة كونها مهددة بحدوث أي خلل في تكوين القناة مما يعني امكانية عدم التحكم في جهاز هو اصلاً متواجد داخل الشبكة .. !! (هل وضحت المسألة هنا جيداً) .. ، و هناك طريقة تعتمد على استخدام احدى دوال الـ API غير اني لم اعتمدها كون ان الشفرة كانت معقدة جداً و صعبة (على الأقل بالنسبة لي) و من الممكن وضعها في حالة ارد ذلك أي شخص ...
اما عن الطريقة التي اعتمدها فهي (من وجهة نظري) بسيطة و سهلة و مجدية ... و فيها اقوم بتنفيذ الأمر Net View داخل الـ Dos عن طريق جملة Shell من داخل الـ VB حيث ان الأمر Net View خاص بإستعراض جميع الأجهزة المتصلة بالشبكة الآن ، و من اجل الحصول على ناتج هذا الأمر يتم نسخ النواتج الى ملف في السواقة C:\ و قرأته من الـ VB سطر تلو الآخر على انه تدفقي Stream File ...
الامر الذي يقوم بذلك هو :
CODE Shell "cmd /c net view >C:\comName.txt"
و بشكل عام الدالة التي تقوم بذلك :
CODE Private Sub Computers_Name_List()
On Error Resume Next
' تفريغ قائمة الجهات المتصلة
Computers_List.Clear
' انشاء الملف التدفقي
Shell "cmd /c net view >C:\comName.txt", vbHide
Dim FileSystemObject, TextStream As Object
Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
'
Set TextStream = FileSystemObject.OpenTextFile("C:\comName.txt")
' قراءة محتويات الملف التدفقي سطر تلو الأخر
x = 0
Do Until TextStream.AtEndOfStream
x = x + 1
strLine(x) = TextStream.ReadLine
strLine(x) = Mid(strLine(x), 3, 18)
strLine(x) = Trim(strLine(x((
Loop
' غلق الملف التدفقي
TextStream.Close
' اظهار النتائج في قائمة الأتصال
For i = 4 To x - 2
Computers_List.AddItem strLine(i(
Computers_List2.AddItem strLine(i(
Next i
End Sub
و هنا اعرض لكم الشاشة الرئيسية للنظام (لأول مرة .. و حصرياً على منتديات الفريق العربي للبرمجة http://www.arabteam2000-forum.com/html/emoticons/regular_smile.gif ) و التي تظهر الأجهزة المتصلة حالياً بالشبكة ...
متابعة الحديث عن شفرات آلية التحكم بالمنافذ عن بعد :
كما قلت سابقاً ان آلية التحكم عن بعد تعتمد في الاساس على مجموعة من الرسائل المعرفة مسبقاً بين المتحكم و العميل ، و بالتالي اي رسالة تصل الى العميل فإنه تتطلب منه القيم بتنفيذ شفرة معينة موجودة في برنامجه ...
آلية غلق منفذ (خدمة) عن بعد :
بناء على ما سبق فإن الفكرة التي تأتي حالياً الى الذهن هي انه بمجرد ارسال امر معين الى جهة العميل من المتحكم تطلب منه غلق منفذ او خدمة معينة فإنه سوف يتم استدعاء شفرة غلق المنفذ .. ، لكن الذي يحدث في الحقيقة كما يلي :
1. تحليل الرسالة القادمة من المتحكم من اجل استخلاص شيئين منها ، الاول هو الامر المراد تنفيذه و الثاني هو عبارة عن رقم معين (و هو يدل على رقم منفذ ما ) ، و من خلال الشفرة التالية ، نلاحظ انه تم استقبال الامر و استدعاء الدالة do_comm و التي تعمل على تحليل الامر :
CODE Private Sub Winsock_controller_DataArrival(ByVal bytesTotal As Long)
On Error Resume Next
Dim data As String
Winsock_controller.GetData data
do_comm (data)
End Sub
-------------------------------------------------------------------
الدالة do_comm(data) الخاصة بتحليل و الاوامر القادمة من المتحكم ..
Private Sub do_comm(data As String)
On Error Resume Next
Dim comm As String
Dim port_no As Integer
pos = InStr(data, "-")
comm = Left(data, pos - 1)
port_no = Right(data, Len(data) - pos)
If (comm = "BlockRemotePort") Then
Add_BlockRemPortList (port_no)
End If
If (comm = "OpenRemotePort") Then
Del_BlockRemPortList (port_no)
End If
If (comm = "OpenAllBlockedPort") Then
Blocked_RPort_List.ListItems.Clear
End If
If (comm = "ShutDown") Then
Call ShutDown
End If
End Sub
2. في حالة ان الامر القادم من السيرفر هو BlockRemotePort-80 ، فإنه سوف يتم استدعاء الدالة Add_BlockRemPortList (لأن الامر الذي تم استخلاصه هو BlockRemotePort) و هذه الدالة تتوقع ان يتم يمرير رقم المنفذ اليها port_no (الذي هو الرقم 80 ) ، و كل ما تقوم به هذه الدالة هو اضافة رقم المنفذ الى قائمة تعرف بقائمة المنافذ المغلقة ...
3. هل تمت عملية الغلق الى الآن ؟؟ .. نعم .... فالذي يحدث في الاساس ان هناك دالة اخرى تستدعى كل نصف ثانية من خلال Timer تقوم هذه الدالة بمراقبة أي منفذ يطلبه العميل الآن ... دالة الـ Timer كما يلي :
CODE Private Sub Tcp_Tab_Timer_Timer()
On Error Resume Next
Call block_port
End Sub
و الداله التي يتم استدعاءها كل نصف ثانية هي block_port و كما قلت تقوم هذه الدالة بمراقبة أي منفذ يطلبه العميل الآن (كيف .. ؟ ) عند طريق الدالة GetTcpTable ، و هي احدى دوال الـ API و الذي تقوم به بكل اختصار هو نفس العمل الذي يقوم به الامر net stat التي نستخدمها في الـ Dos من اجل معرفة معلومات عن الجهات التي الاتصال قائم بيننا و بينها حالياً .. هذه المعلومات هي مثل المنفذ الذي نحن نطلبه للأتصال بالجهاز المتصل و المنفذ الذي فتح في الجهاز من اجل عملية الاتصال و الـ IP للجهاز المتصل .. و غيرها من المعلومات المفيدة .. ، و الذي يفيدنا حالياً هو المنفذ الذي اطلب الاتصال به ، فإذا كان هذا المنفذ هو 80 فهذا يعني انني اطلب خدمة استعراض الويب http لأن هذا المنفذ محجوز لهذا الغرض .. و بعد ان تعرف الدالة block_port المنفذ الذي اريد الاتصال به الآن تقوم بمقارنة رقمه مع الارقام الموجودة في قائمة المنافذ المغلقة .. فإن كان الرقم موجود في قائمة المنافذ المغلقة فإنة تقوم بغلق الاتصال (هل اسمع كيف مرة اخرى ؟؟ http://www.arabteam2000-forum.com/html/emoticons/regular_smile.gif ) ... من الجدير ذكره ان من المعلومات التي احصل عليها عن طريق الدالة GetTcpTable ايضاً حالة الاتصال بين الجهاز و الجهاز المتصل و هي تكون حالة من 12 حالة (مغلق – متصل – استقبال شيئ – ارسال شيء – تأسيس اتصال – انتظار ...... و حذف اتصال ) ... و عليه ، فإني حتى الغي اتصال بمنفذ غير مرغوب فيه اقوم بتغير حالة الاتصال الى حالة حذف الاتصال و التي يعطى لها الرقم 12 مما يعني انهاء الاتصال ، او غلق هذا المنفذ .. و الشفرة التالية هي الخاصة بالدالة block_port() :
CODE Private Sub block_port()
On Error Resume Next
Dim no_port As Long
Dim flag As Boolean
flag = False
'------------------------------------------------
For i = 1 To lngRows
CopyMemory TcpTableRow, arrBuffer(4 + (i - 1) * Len(TcpTableRow)), Len(TcpTableRow)
Counter = 0
no_port = GetTcpPortNumber(TcpTableRow.dwRemotePort)
For j = 1 To Blocked_RPort_List.ListItems.Count
If no_port = Blocked_RPort_List.ListItems.Item(j) Then
flag = True
TcpTableRow.dwState = 12
SetTcpEntry TcpTableRow
DoEvents
End If
Next j
Next i
If (flag) Then
MsgBox " الخدمة التي تطلبها غير متاحة لك ... تستطيع مراجعة مدير الشبكة ", 1048576 + 524288 + 16, "المتحكم"
End If
End Sub
----------------------------------------------------------------------------