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

برمجة الشبكات ..

مغلقرائج
بدأه HGB في 17 ديسمبر 2003 · 67 رد · 20,865 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم ,,

أختي بنت اليمن ,, سأرد على بعض الاسئلة وأترك الباقي ل chik ,,

اقتباس
سؤالي : نحن هنا فتحنا اتصال مع البوابة 12345 فهل معنا ذلك ان بقيت البوابات مغلقة (مثلاً البوابة 80 الخاصة بتصفح الويب HTTP عبر السيرفر لا تكون متاحة للـ Client ..؟)

يمكن في لحظة واحدة أن أفتح ال 65000 بوابة كلها ,, ولايؤثر مطلقا فتح بوابة على اغلاق أخرى ,, لاتغلق البوابة الا اذا أغلقناها نحن بأمر برمجي ,,

اقتباس
2 - هل من الممكن ان يعرف الـ Server رقم الـ IP Address للـ Client المتصل معه عبر الـ Socket (مثلاً قناة الاتصال soc بين الـ Server و Client ما .. هل يقدر الـ Server ان يعرف الـ IP ذلك الـ Client)؟

نعم وال soc2 في مثال أخي chik تحتوي على المعلومات الخاصة بال client ,,من ال IP وحتى ال PORT ,, ويتم استلام soc3 من الامر accept ,, وأعتقد أن ال Server سيتفاهم مع ال Client با PORT الذي أرسل به ال Client ,, والله أعلم ,,

اقتباس
soc=socket(AF_INET,SOCK_STREAM,0)

ما هو المقصود بالباراميتر 0 صفر ؟

البارمتر الثالث مخصص للبرتوكول ("على آخر مستوى تغليف") المستخدم في التخاطب ,, والصفر تعني برتوكول ال IP ,, ويمكن كتابة IPPROTO_IP بدل الصفر ,, وسيعمل المثال ,, حيث يتم تغليف ال Packet بال IP HEADER هنا,,

اقتباس
Family Address يقصد به نوع التطبيقات التي سوف يتم تبادلها عبر قناة الاتصال Socket ، على سبيل المثال AF_INET يرمز الى التطبيقات المرتبطة بالشبكة ..؟

هنا يتم التعامل على مستوى ال NetWork كما أعتقد ,, وهي هنا بريوكول ال TCP/IP والخاص بالتعامل على شبكة الانترنت ويعتمده الوندوز بشكل كبير أيضا ,, في السابق من عصر الوندوز 98 كان يتم التعامل بشكل أكبر مع ال NETBIOS ,, وتوجد برتوكولات أخرى خاصة بكل نظام تشغيل ,, مثلا IPX/SPX برتوكول خاص بنظام NetWare ,, كل هذه يتم تخصيصها هنا ,, وأريد أن أتأكد من شيء ,, هل هذه هي ماتدعى بطبقة ال NetWork ,, لأنه ليس لدي معرفة جيدة بهذه الطبقات !!

اقتباس
* htons();-Host to Network Short

* htonl();-Host to Network long

* htons();-Host to Network Short

* htonl();-Host to Network long

أعتقد أنك كنتي تريدين أن تكتبي

ntohs و ntohl ,, وهما للقيام بالعملية العكسية :)

أترك الباقي ل chik , ,

بارك الله فيكم ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#27

السلام عليكم,

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

وللرد عن الأسئلة أضن أن الأخ HGB قام بالواجب .وفيما يخص البقية

bind(soc,(SOCKADDR*)&socin,sizeof(socin));

هنا يجب تحويل SOCKADD_IN إلى SOCKADDR وهدا ليس إلا أمر لغاية Compatibility وأضن أن الأمر ربما يكون تاريخيا فقط. فكان في الأول السوكيت ل unix وكان استعمال sockaddr وأضن أن sockaddr_in هو من فعل مايكروسوفت - لست متأكدا من هده الكلمة الأخيرة - ولدا نحولها إلى الأخرى ليكون تقابل مع جميع الأجهزة. والخلاف بينهم ليس خلاف كبير بل الخلاف الأساسي هو طول struct وحين نحول الستراكت التي بحوزتنا فإن دلك سيملؤها ب 0 حتى تكون لهما نفس الطول.

- اممممممممممم بعد ان تم بناء الــ Socket ، و اسناد المعلومات الى SOCKADDR_IN ...و كان هذا من اجل تعريف الـ Socket على مستوى برنامج السيرفر .. و عملنا SOCKET ثاني للإتصال بأول كلابنت سوف يتصل .. (soc2) ... 
سؤالى : لو اراد Client اخر ( جديد ) الحصول على قناة اتصال جديدة Socket فكيف سيتم التعامل مع ذلك في نفس البرنامج ..؟ ( وضح السؤال ؟؟؟ )

كما قلت سابقا في المثال.عندما نشأنا soc الأولى هده ستكون مهمتها الإستماع إلى الإتصالات ومهمتها أنه حين يكون عندنا اتصال ما تنشئ قناة خاصة بهدا الإتصال كما جاء في المثال سميناها soc2 وهدا أمر طبيعي فلو نفترض أن الكلاينت المتصل عبر soc2 قد غادر الإتصال فهدا لن يؤثر عن السيرفر لأن soc الأولى لا زالت تؤدي مهمتها وهي الإستماع.

فلنفرض أنه عندنا اتصال على soc2 بأحد الكلاينت فحين يكون هناك اتصال بكلاينت آخر يجب أن نخلق سوكيت جديدة مثلا soc3 وهده تتكلف بالتحاور مع هدا الكلاينت الجديد والسيرفر يمكنه إد داك الحوار مع الإثنان وبدون تداخل بينهما إدا أردنا دلك ويكونا هدين الإثنين مستقلين وإدا غادر أحدهما لن يضر بالآخر حيث يبقى دائما على اتصال بسوكيته.

[ioctlsocket(soc2,FIONREAD,&cmd)

الباراميتر الأول بدون نقاش. السوكيت الدي يتم التحاور معه.

الثاني هو مادا ستفعل هده الدالة والبارامتر الثالث يكون متعلق بهدا. فنحن اخترنا FIONREAD أننا نريد أن نعرف هل هناك أشيء يمكن قراءتها . والقيم الأخرى لهدا منها من يحدد إن كنا نريد استعمال blocking mode أو لا وغيرها.

والبارامتر الثالث وبما أننا اخترنا القراءة فهو مؤشر على رقم وإدا كانت في السوكيت أشياء وصلت ويمكن قراءتها فإن هدا الرقم ستضع فيه هده الدالة العدد الدي يمكن قراءته من هده السوكيت.

9- ما الذي تقوم به بالضبط الدالة WSACleanup() ... ؟

نعلم أنه حين نستدعي WSAStartup فالشغل الأساسي الدي تقوم به وهو تحميل المكتبة WS2_32.DLL الخاصة بالسوكيت وأما هده الأخيرة فهي ستعمل العكس إد هي ستزيلها من الداكرة هدا بالطبع إدا لم يكن هناك برنامج آخر يستعملها أو هي ستقوم بالإعلان أنها لم تعد بحاجة إليها وهدا سينقص من العداد المكلف بهده المكتبة.

أتمنى أن يكون هدا يرد على أسئلتك وأتمنى أن أكون هده المرة أخدت بنصائحك وكتبت ما يمكن كتابته داخل الكود .

إلى اللقاء.

تم تعديل هذه المشاركة بواسطة chik في 23 ديسمبر 2003 في 20:01

#28

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

الاخوة الكرام HGB,chik تحية طيبة ...

اشكركم فعلاً .. و المسألة اني لا املك لكم اكثر من الشكر و الدعاء في ظهر الغيب ...

الآن احس نفسي قادرة على استيعاب الموضوع بشكل افضل و القدرة على فهم اي شيء لاحقاً بخصوص قنوات الاتصال بين الـ Server و الـ Client تحت ما يسمى بالــ Socket

........

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

و هو بخصوص وضع المنافذ عند بناء الــ Socket ... و هو ما رد عليه الاخ HGB مشكوراً على ذلك ..

اقتباس
اقتباس
سؤالي : نحن هنا فتحنا اتصال مع البوابة 12345 فهل معنا ذلك ان بقيت البوابات مغلقة (مثلاً البوابة 80 الخاصة بتصفح الويب HTTP عبر السيرفر لا تكون متاحة للـ Client ..؟)

يمكن في لحظة واحدة أن أفتح ال 65000 بوابة كلها ,, ولايؤثر مطلقا فتح بوابة على اغلاق أخرى ,, لاتغلق البوابة الا اذا أغلقناها نحن بأمر برمجي ,,

كيف افتح المنافذ كلها او اغلاقها بأمر برمجي ؟؟؟

ارجوا ان لا اكون اثقلت عليكم ...

و جزاكم الله عنا كل خير ...

بنت اليمن ...

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#29

السلام عليكم,

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

فيما يخص سؤالك حول المنافد أو البوابات فكما قال الأخ HGB عددها 64 كيلو بالوزن المتعارف عنه في البايت وهي مقسمة على نوعين .نوع خاص ونوع للجميع.أقصد بالخاص هي التي خصصت لبعض الإستعمالات مثل المنفد 80 وغيرها وهي تبتدأ من الصفر إلى الرقم x لأنني لم أتدكر الرقم بالتدقيق وأما الأرقام بين x وما فوق فيمكن استعمالها لأغراض شخصية.

وهده المنافد قد نشغلها وغالبا ما نقول فتحها عند برمجة السيرفر.وإدا رجعت إلى الكود ستجدين أننا نعطي للسيرفر المنفد الدي سيستمع من خلاله وحين يبدأ السيرفر بالإستماع فهو سيفتح معه المنفد المشار إليه.وعلى العموم فإن الوندوز يمكن أن لا يفتح نفس رقم المنفد في حالات إدا ما لم يكن دلك ممكنا ولكنه سيسجل أن هدا المنفد الدي فتحه هو سيطابق للمنفد الدي طلبناه نحن ونحن كمستعملين لا نلاحظ هده الأمور ويبدو لنا أن كل شيء على ما يرام.وحين نغلق السيرفر فإن المنفد سيغلق معه.

وللعلم فإن هده هي التقنية التي تستعملها البرامج المعروفة بالتروجينات.فكل ما تفعله هده البرامج وهي كالتالي :

لو أردت أن أخترق جهازك سأرسل إليك سيرفر على شكل من الأشكال إما داخل برنامج ما أو عبر الإيميل أو غير دلك وسيكون مبرمجا حيث أنه يبدأ التشغيل مع النضام وسيفتح بابا أكون عرفتها له وفي غالب الأحيان عندما يشتغل هدا السيرفر سأكون برمجته من أن يرسل عنوانك الأيبي لي والسيرفر يكون مبرمجا ليتجاوب مع بعض الأمور أكون قد حددتها من قبل وحسب ما أريد أن أقوم به.

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

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

إلى اللقاء.

#30

السلام على الإخوة الطيبون

كلامك أخي chik جميل و أما عن x التى لم تساعدك ذاكرتك في تذكرها هي 1023 أي أن المنافذ من 0-1023 محجوزة كما قد تكون بعض المنافذ التالية محجوزة :

1900 Universal Plug and Play - Simple Service Discovery Protocol

2302-2400 DirectPlay device address default

2234 Internet sharing and firewall support for Windows Millennium Edition (Windows Me) and Windows XP

6073 DirectPlay enumerations using DPNSVR

47624 Deprecated DirectPlay enumeration

بارك الله لكم جميعا

#31

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

الاخوة الكرام HGB,chik تحية طيبة ...

اشكركم على الاستجابة لتسألواتي ... الف شكر ...

الموضوع الآن بالنسبة لي مفهوم جداً ...

و عندي تعديل على ملاحظة وضعتها ...

[quote* htons();-Host to Network Short

* htonl();-Host to Network long

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#32

السلام عليكم,

أشكر الأخ PerfectStranger عن التوضيحات وأتمنى أن تكون أديت امتحاناتك بنجاح.

وأقول للأخت بنت اليمن الآن ننتظر أن تأتينا ببعض محاولاتك الخاصة في هدا الموضوع.

أتمنى التوفيق للجميع وإلى اللقاء.

#33

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

الاخ الكريم chik ... جمعة مباركة .. :)

تنتظروا محاولاتي .... ؟؟ :)

ليش الاحراج ...

عموما .. اوكي راح احاول ان شاء الله .. اقدم لكم فكرة كنت احاول عليها ..

ان شاء الله ،،،،

و السلام ..،

بنت اليمن ،،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#34

السلام عليكم,

إلى الأخت بنت اليمن:

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

وكم من مرة نقرأ أشياءا وتبدو لنا سهلة ومفهومة نظريا ولكن حين نريد أن نشغلها في الواقع فقد نجد صعوبات لم لكن نتوقعها ولم نضرب لها حسابا من قبل وكان هدا مقصودي.

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

أعانك الله وإلى اللقاء.

#35

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

الاخ .. تحية طيبة

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

في الحقيقة لقد جمعت العديد من المفاهيم النظرية ( و انا احب الدقة في المفاهيم النظرية حتى لا يكون التطبيق فيما بعد معقداً .. ) و انا ارى انه حان الوقت للبدأ في عملية البرمجة ...

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

و السلام ...

بنت اليمن ،،،

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#36

السلام عليكم ,,

تمام ,, أعتقد اننا انتهينا من البرنامج الاول ,, والان فلنبدأ في الثاني ,,

مارأيكم بكتابة برنامج Port Scanner ,, كالذي يتم استخدامه من قبل ال hackers الذين يريدون الدخول لجهاز معين من منفذ معين ,, بحيث يتم التحقق هل المنفذ x مفتوح أم لا ,, اذا كان مفتوحا ففي الغالب ال Trojan الخاص به قد فتح هذا المنفذ وهو حاليا يقوم بعملية Listen ,, ليتلقى التعليمات من الخارج !!

لكن نحن سنكتب البرنامج من الطرف المسالم ,, وفقط لمعرفة المنافذ المفتوحة في الجهاز ,, والتي تستخدم من قبل برامج مشبوهة غالبا ,, ليقوم برنامجنا باغلاقها ,,

في انتظار التعليقات ,, لنبدأ ان شئتم ,,

بالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#37

السلام عليكم,

سأقوم بسفر إن شاء الله غدا وابتداءا من الأسبوع المقبل سأضع الجديد هنا إن شاء الله.

وفقكم الله وإلى اللقاء.

#38

السلام عليكم ,,

بالتوفيق أخي chik ,, وننتظر عودتك سالما ,, فنعم المشرف :)

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

سأطرح الفكرة المبدأية غدا باذن الله للبرنامج لكي نتابع ,,

بارك الله فيكم ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#39

السلام عليكم ,,

كما وعدت بالامس ,, هذا بريمج بسيط للغاية ,, لايفعل الا أنه يعمل مسح لجميع المنافذ في الجهاز وعددها 65000 منفذ ,, ليعرف المفتوح منها والمغلق ,,

هنا فقط سيعلمك الجهاز بالمنفذ المفتوح ,, ويكتب اسمه مع الرسالة 10048 ,, ومعناها أن المنفذ الذي نريد فتحه حاليا في الاصل مفتوح !!

وهذه هي طريقة عمل البرنامج ,, فهو يحاول فتح جميع المنافذ ,, فاذا فتح كان بها ,, أما اذ لم يفتح فسيرجع رسالة خطأ برقم 10048 ومعناها أن المنفذ مفتوح في الاصل ,, وبهذا نعرف المنافذ المفتوحة من المغلقة ,, ومن الملاحظ أن بعضها سيكون مفتوح كما في 80 الخاص بال HTTP و 25 الخاص بال SMTP ,, وغيرها ,,

لم أكتب كود اغلاق المنفذ حيث أنه تحت البحث حاليا ,, وهنا تكمن روعة العمل الجماعي ,, فمن لديه معرفة فليتحفنا ,,

وسنجد الحل قريبا ,,

اليكم البرنامج ,, يجب ربط الكتبة wsock32.lib به بالطبع ,,

بارك الله فيكم ,,

PORTS.rar

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#40

السلام عليكم و رحمة الله و بركاته

الله يعطيك العافية أخي HGB و إن شاء الله بالسلامة أخونا chik

أخي HGB الكود الذي كتبته فعلا يمسح المنافذ المفتوحة و لكن فقط منافذ ال TCP لأن ال socket التي بنيتها هي SOCK_STREAM و حتى تتمكن من كشف المنافذ المفتوحة على UDP ما عليك إلا مسح المنافذ مرة أخرى ب socket من نوع SOCK_DGRAM و الكود المرفق هو تطبيق ما ذكرت

هناك سؤالان يطرحان نفسيهما على بساط البحث و بقوة شديدة ألا و هما :

الأول : لابد أن هناك طريقة أسرع بكثير من هذه كالطريقة التي يستخدمها أمر netstat -a و الذي لا يعرف هذا الأمر فليجربه من command promt و سيجد نفس لبنتيجة لكن بسرعة صاروخية

الثاني : ما فعلناه هو كشف لمنافذ الجهاز المحلي و لكن ماذا من أجل مسح منافذ جهار بعيد remote computer ؟

السلام عليكم

port_scanning.zip

#41

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

الاخ الكريم PerfectStranger تحية ...

في الحقيقة لقد سبقتني في وضع هذا البرنامج Port_Scaner كونه برنامج جيد ... فأشكرك على ذلك ،،

بالنسبة لعملية الفحص التي طُرحت في برنامج الذي وضعه الاخ الكريم HGB ،، فأنا اعتقد ان فكرة البرنامج تعتمد على اساس انه لا يمكن ان يحصل ربط Bind بين قناة متغير قناة الاتصال soc و السجل الذي يحتوى على معلومة المنفذ الذي سيتم عبره الاتصال الا اذا كان المنفذ مفتوح ... و ذلك من اجل اعداد قناة اتصال Socket سليمة ،،،

للتوضيح :

bind(soc,(SOCKADDR*)&addr,sizeof(addr));

لان تكون عملية الربط (التي تجهز قناة الاتصال) صحيحة اذا كان المنفذ الذي يتم الاتصال عبره مغلق ..،،

في الحقيقة ،، هذا ما استنتجتهُ من خلفيتي ( الوليدة ) في برمجة الشبكات ,, فإن اخطأت ارجوا ان اجد من يصوب لي ...

ملاحظة : بالنسبة لغلق و فتح المنافذ عبر اوامر برمجية فانا ابحث في الموضوع حالياً تحت لغة VB من اجل ان احصل على الاسماء التي تدعمها Microsoft (كون VB يتبع Microsoft) للدوال التي تقوم بذلك ... على امل ان اجد نفس المسميات لاحقاً في ++C .. و حالما اصل الى شيء - ان شاء الله - ساضعه بين يديك من اجل المناقشة ...

و السلام ،،،

بنت اليمن ...

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#42

السلام عليكم ,,

بارك الله فيك أخي PerfectStranger على التعقيب وعلى بريمجك الكامل :)

أختي بنت اليمن فهمك صحيح تماما ,,

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

تعقيب : طريقة التحقق من المنافذ المفتوحة السابقة ,, قمت بتخمينها فقط ,, ولم أقرأ عنها شيئا ,, فقط أخذت أبحث عن رسائل الخطأ التي تطرأ من استدعاء الدالة bind ,, فوجدت أن الرسالة 10048 تدل على أن النفذ مفتوح أصلا ,, فتبنيت الفكرة على الفور ,,

لكن أعتقد أنها ليست الطريقة المثلى لفعل ذلك !!

أولا : تعليق بسيط على البرنامج السابق ,, توجد ملاحظة غريبة ,. لم أحاول أن أدقق فيها لأعرف سببها تماما حتى الآن ,, وهي أنه في أي برنامج لل Port_scanner ,, كتبته أنا أو أخي PerfectStranger ,, اذا مسحت أمر closesocket ,, ستصبح سرعة عمل البرنامج أبطأ بكثير ,, وعملية تفحص المنافذ أبطأ بحوالي 4 -5 مرات ,,

السبب في ذلك لايعود الى شيء له علاقة بالبنية الداخلية لل socket ,, لكن الامر كما أعتقد والله أعلم له علاقة بعملية تحرير ال socket القديمة ,, بشكل غير شرعي لانشاء الجديد ,, مما يأخذ وقتا أطول بكثير ,,

عموما سأتأكد من ذلك بمعرفة عدد دورات ال CPU ,, اللازمة لفعل ذلك في كلا الحالتين ,, لكن الفحص سيأخذ وقتا ,,لذا سأتركه قليلا ,,

ثانيا : حتى الآن لاأعلم كيف يتعامل هذا ال netstat داخليا ,, لكن أعتقد وبنسبة كبيرة أنه يتعامل مع جدول يتم تغييره بشكل دوري كلما تم انشاء أو اغلاق اتصال جديد ,,

عموما لم أتأكد من هذه المعلومة بعد ,, لكن ماتوصلت اليه هو : معرفة كيفية برمجة هذا ال netstat !! ,,

عند اختيار الامر netstat -a :

يتم استدعاء دالتين :

الاولى: GetTcpTable ,, وهي لل TCP ,,

الثانية : GetUdpTable ,, وهي بالطبع لمعلومات ال UDP ,,

وموجدتان في المكتبة ,,

 Iphlpapi.lib 
Iphlpapi.h

وتعيد المعلومات بنفس سرعة وأداء ال netstat -a ,,

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

عموما هذه مشكلة تم حلها جزئيا ,, وهي في الغالب أن المنافذ المفتوحة تسجل في ملف أو جدول في مكان ما في الوندوز ,, وسنتأكد من ذلك ,,

أيضا يمكن كتابة أي برنامج من البرامج التي في سطر الأوامر باستخدام ملفات ال dll الموجودة في مجلد ال System32 ,, أمثال ipconfig وال route وال finger وال ftp وكل هذه الأمور ,,

ثالثا : كيفية عمل Port Scan لجهاز آخر بعيد ؟ حتى الان لم أعرف ,,

وسنعرف قريبا أيضا ,, ان شاء الله ,,

رابعا وأخيرا : اغلاق المنافذ ,, لم تعرف أيضا حتى الآن ,,,

من أين عرفت أنا معلومات netstat -a هذه ؟ بالطبع يمكن أن نبحث في الانترنت ,, وسنجد كل مانريد ,, لك لدي كتيب آخر هنا رائع فعلا ,, وهو لميكروسوفت ,, اسمه

NetWork Programming ,, يتحدث فيه عن NetBios وال WinSock وال RAS ,, وحجمه 2.1 ميجابايت ,, وسأرفقه بعد قليل ,,

أرجو منكم متابعة البحث في هذه الأمور ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#43

السلام عليكم,,

مشكلة الحجم الكبير مازالت قائمة حيث ينقطع رفع الملف الكبير دائما ,, هل يعرف أحدكم طريقة سريعة لتقسيم الملفات ببرنامج مشهور ,,

بارك الله فيكم

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#44

السلام عليكم و رحمة الله و بركاته

بارك الله فيكم جميعا و بجهودكم

أظن أن تصوراتك أخي HGB حول ال netstat صحيحة و شكرا على توضيح التوابع المستخدمة من قبله و لقد سبقتني في الإشارة إلى هذا الكتاب القيم الذي كنت على وشك وضعه هنا و أما يالنسبة لتقسيم الملفات فال winzip يفي بالغرض

ادعولنا

السلام عليكم

#45

السلام عليكم ,,

أخي PerfectStranger بارك الله فيك ,, ال WinZip طار من ذهني نهائيا ,,

اليكم الكتاب وهو مقسم لأربعة أقسام بحجم 550 كيلوبايت لكل قسم ,, وهو ممتاز كما ذكرت وسيفيدكم كثيرا ,,

لكن يبدو أن لدينا هنا مشكلة مع ال ISP أو مع الموقع نفسه لم أتأكد بعد ,, فهو يرفض عمليات ال UpLoad في بعض الأحيان ,, لكن ستحل المشكلة قريبا ان شاء الله

تم تعديل هذه المشاركة بواسطة HGB في 3 يناير 2004 في 06:30

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#46

السلام عليكم ,,

تعقيب للأخت بنت اليمن في الرابط

http://www.arabteam2000.com/ib/index.php?s...=0entry185909

اقتباس
السلام عليكم ...

و كل عام و الجميع بخير ...،،

مشرفنا العزيز HGB ارجوا ان لا يزعجك فتح ملف برمجة الشبكات من جديد و لكني اردت وضع برنامج عن فتح و غلق المنافذ TCP/UDP Ports كوننا كنا نريد التحدث عن ذلك عند فتح موضوع برمجة الشبكات ... مشكلة البرنامج انه مكتوب بلغة VB و ليس بالـ C ،،، عموما انا ارفق لكم البرنامج على امل ان تتم مناقشة هذا الموضوع ،،،

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

بنت اليمن ،،

البرنامج موجود في الرابط أعلاه ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#47

السلام عليكم ,,

بداية آسف على التأخير ,, كنت أبحث في أمر ال netstat ,, وأردت أن أخرج بنتيجة قبل أن أكتب شيئا ,, المهم :

برنامج الاخت بنت اليمن المكتوب بال VB يستخدم ال netstat ,, وهي عبارة عن دوال تسمى بال IpHelper ,, أو الدوال المساعدة ,, ويوجد غيرها خاص بال route وال IpConfig ,, وغيرها ,,

عموما برنامج ال Port Scanner الذي كتبناه سابقا يمكن كتابته بطريقة أخرى كما أشرنا سابقا ,, حيث طريقة البحث السابقة بطيئة قليلا ,, وأمر ال Netstat أسرع منها بكثير ,, حيث يقوم بوضع جدول به مداخل خاصة بمعلومات عن الاتصالات الجارية من والى الجهاز ,, ببرتوكولي ال TCP وال UDP ,,

طريقة استعمال ال netstat IpHelper سهلة لحسن الحظ ,, وتعطينا معلومات أكثر حيوية من طريقة معرفة المنافذ السابقة ,, حيث نستطيع معرفة المنفذ الذي يتم الاتصال به حاليا والمنفذ الذي يتم الاتصال به من الجهاز البعيد ,, ورقم ال Ip أيضا لكل من الجهاز والجهاز البعيد ,, وأخيرا معرفة حالة الاتصال من 12 نوع مختلف ,, تتغير من وضعية الانصات Listening و Close وdelete وهذه الاخيرة هي الخاصة باغلاق المنافذ ,,

حيث مصطلح اغلاق منفذ حسب علمي حتى الآن ليست دقيقة تماما ,, بل يجب أن يقال عمل BLOCK للاتصالات التي تتم من أو الى هذا المنفذ ,, وبعملية مسح بسيطة كل 500 ميلي ثانية مثلا نقوم بعمل BLOCK لأي اتصال الى هذا المنفذ ,, وبهذا نكون قد أغلقنا المنفذ !!

هكذا دخلنا ونحن لانعلم الى امكانية كتابة برامج FireWall أمثال ال ZoneAlarm حيث يمكن التحكم بشكل كامل ,, بالمنافذ ,,

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

في السابق عرفنا كيف يمكن استرجاع البيانات من ال netstat وقد ذكرنا أن ذلك يمكن أن يتم بواسطة الدوال GetTcpTable و GetUdpTable ,, من المكتبة

IpHlpApi.h
IpHlpApi.LIB

هذا لمعرفة المعلومات ,, أما لتغير المدخلات لهذا الجدول ,, نستخدم SetTcpEntry ,, ونحدد المدخل الذي نريد أن نغير فيه ,, لكن أمر مهم جدا ,, لانستطيع أن نغير مافي هذا الجدول الا لأمر واحد فقط ,, ولحسن الحظ هو الامر الذي نحتاجه تماما ,, وهو خاص بوضعية الاتصال ,, حيث نقوم بتحويلها الى MIB_TCP_STATE_DELETE_TCB وتعني احذف الاتصال المحدد ,, وسقوم فورا بحذفه من جدول التعاملات !! ويكون قد أغلق الاتصال بالطبع برقم منفذ حددناه سلفا ,,

لن يكون الكلام مفهوما الا لو جربناه بالكود ,,

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

اليكم الكود ولنا عودة ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#48

الكود:

#include <iostream.h>
#include <winsock2.h>

#include <iphlpapi.h>

SOCKET soc;
SOCKADDR_IN addr;

void DisplayTcpTable()
{

	DWORD size =0;
  GetTcpTable(NULL, &size, FALSE);
  BYTE* Buff_tcp = new BYTE[size];
  PMIB_TCPTABLE tcp = new MIB_TCPTABLE;

if (GetTcpTable((PMIB_TCPTABLE)Buff_tcp, &size, TRUE) != NO_ERROR)
  {
 	 cout << "BAAAAAAAAAAANG"<<endl;
  }
  tcp = (PMIB_TCPTABLE)Buff_tcp;
	in_addr stAddr,stAddr_remote;

	cout << " TCP TABLE :"<<endl;
	for(int y=0;y<tcp->dwNumEntries-1;y++)
  {	
 	 u_long ulLocalAddress = static_cast<u_long>(tcp->table[y].dwLocalAddr);
 	 stAddr.s_addr = ulLocalAddress;

 	 u_long ulRemoteAddress = static_cast<u_long>(tcp->table[y].dwRemoteAddr);
 	 stAddr_remote.s_addr = ulRemoteAddress;

 	 cout <<"Local Addr :"<<inet_ntoa(stAddr)<<" Port: "<<ntohs(tcp->table[y].dwLocalPort)<<"  State Num :"<<tcp->table[y].dwState<<endl;
 	 cout <<"Remote Addr :"<<inet_ntoa(stAddr_remote)<< " Port: "<<ntohs(tcp->table[y].dwRemotePort)<<endl;

  }

  cout <<endl<<endl;
}

void DisplayUdpTable()
{

	DWORD size =0;
  GetUdpTable(NULL, &size, FALSE);
  BYTE* Buff_udp = new BYTE[size];
  PMIB_UDPTABLE udp = new MIB_UDPTABLE;

if (GetUdpTable((PMIB_UDPTABLE)Buff_udp, &size, TRUE) != NO_ERROR)
  {
 	 cout << "BAAAAAAAAAAANG"<<endl;
  }
  udp = (PMIB_UDPTABLE)Buff_udp;

	in_addr stAddr;

	cout <<"UDP Table :"<<endl;

	for(int y=0;y<udp->dwNumEntries-1;y++)
	{u_long ulLocalAddress = static_cast<u_long>(udp->table[y].dwLocalAddr);
 	 stAddr.s_addr = ulLocalAddress;

  cout <<"Local Adress:"<<inet_ntoa(stAddr)<<" Local Port:"<<udp->table[y].dwLocalAddr<<endl;}
  
	cout <<endl<<endl;
}
void main()
{

	WSADATA data;
	WSAStartup(MAKEWORD(2,2),&data);


	DisplayTcpTable();
	DisplayUdpTable();

	cin.get();
}

لم أستطع تحميل الملف الى الموقع مطلقا :angry: (mo)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#49

السلام عليكم و رحمة الله و بركاته

لقد أضفت الكود الازم لأغلاق منفذ TCP معين عن طريق الدالة SetTcpEntry و لكم لم ينجح الأمر :(

الأمر الآخر هو اغلاق منفذ UDP ؟؟ كيف ذلك ؟

استخدم ال parameter -close مع اسم الملف لأغلاق منفذ معين و ان شاء الله بهمتكم تنحل

#include <stdio.h>
#include <winsock2.h>
#include <iphlpapi.h>

char* state[] = {	"CLOSED",
   	 "LISTEN",
   	 "SYN_SENT",
   	 "SYN_RCVD",
   	 "ESTAB",
   	 "FIN_WAIT1",
   	 "FIN_WAIT2",
   	 "CLOSE_WAIT",
   	 "CLOSING",
   	 "LAST_ACK",
   	 "TIME_WAIT",
   	 "DELETE_TCB"
};

BYTE* Buff_tcp;
BYTE* Buff_udp;
PMIB_TCPTABLE tcp;
PMIB_UDPTABLE udp;

void DisplayTcpTable()
{
	DWORD size =0;
	GetTcpTable(NULL, &size, FALSE);
	Buff_tcp = new BYTE[size];

	if (GetTcpTable((PMIB_TCPTABLE)Buff_tcp, &size, TRUE) != NO_ERROR)
	{
  printf("Error reading TCP table\n");
  return;
	}
	tcp = (PMIB_TCPTABLE)Buff_tcp;
	in_addr stAddr,stAddr_remote;

	printf("TCP active connections :\n");
    printf("Local Address :\t\t\tRemote Address :\t\tState :\n");

	for(u_long y = 0; y < tcp->dwNumEntries; y++)
	{
  u_long ulLocalAddress = static_cast<u_long>(tcp->table[y].dwLocalAddr);
  stAddr.s_addr = ulLocalAddress;

  u_long ulRemoteAddress = static_cast<u_long>(tcp->table[y].dwRemoteAddr);
  stAddr_remote.s_addr = ulRemoteAddress;

  printf("%s : %d\t\t\t", inet_ntoa(stAddr), ntohs(tcp->table[y].dwLocalPort));
        u_short port = (tcp->table[y].dwState == MIB_TCP_STATE_LISTEN ? 0 : ntohs(tcp->table[y].dwRemotePort));
  printf("%s : %d\t\t\t%s\n", inet_ntoa(stAddr_remote), port, state[tcp->table[y].dwState -1]);
	}
	printf("\n");
}

void DisplayUdpTable()
{

	DWORD size =0;
	GetUdpTable(NULL, &size, FALSE);
	Buff_udp = new BYTE[size];

	if (GetUdpTable((PMIB_UDPTABLE)Buff_udp, &size, TRUE) != NO_ERROR)
	{
  printf("Error reading UDP table\n");
  return;
	}
	udp = (PMIB_UDPTABLE)Buff_udp;

	in_addr stAddr;

	printf("UDP active connections : \n");
    printf("Local Address :\n");

	for(u_long y = 0; y < udp->dwNumEntries; y++)
	{
  u_long ulLocalAddress = static_cast<u_long>(udp->table[y].dwLocalAddr);
  stAddr.s_addr = ulLocalAddress;

  printf("%s : %d\n", inet_ntoa(stAddr), ntohs(udp->table[y].dwLocalPort));
	}
	printf("\n");
}

void main(int argc, char* args[])
{
	WSADATA data;
	WSAStartup(MAKEWORD(2,2),&data);

	DisplayTcpTable();
	DisplayUdpTable();
    if (argc != 1 && strcmp(args[1], "-close") ==0)
    {
        u_short port;
        printf("Enter a TCP port to close : ");
        scanf("%d", &port);

        MIB_TCPROW mib_tcp;
        mib_tcp.dwState = 0;
        for (u_long i = 0; i < tcp->dwNumEntries; i++)
            if (tcp->table.dwLocalPort == htons(port))
            {
                memcpy(&mib_tcp, &tcp->table, sizeof (mib_tcp) );
                mib_tcp.dwState = MIB_TCP_STATE_DELETE_TCB;
                break;
            }

        if (mib_tcp.dwState == MIB_TCP_STATE_DELETE_TCB)
        {
            DWORD ret = SetTcpEntry(&mib_tcp);
            if (ret != NO_ERROR)
            {
                LPVOID lpMsgBuf;
                FormatMessage(  FORMAT_MESSAGE_ALLOCATE_BUFFER |
                                FORMAT_MESSAGE_FROM_SYSTEM |
                                FORMAT_MESSAGE_IGNORE_INSERTS,
                                NULL,
                                ret,
                                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                                (LPTSTR) &lpMsgBuf,
                                0,
                                NULL
                                );

                MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
                LocalFree( lpMsgBuf );
            }
            else
                printf("port %d closed\n", port);
        }
        else
            printf("port %d is not opened\n", port);
    }
    delete []Buff_tcp;
    delete []Buff_udp;
}

السلام عليكم

ports.zip

#50
بنت اليمن كتب:
السلام عليكم ...

دائما انا متأخرة في المشاركة ( و تفوتني الفاكهة في وقتها ..) :)

الاخوة HGB ، chik  .. و جميع المشاركين في التعليم الجماعي .. تحية طيبة ..

ارفق لكم ( مع كل الاسف ) باقة من الاسئلة و التعليقات على ما مضى .. و ارجوا ان الاقي صدى جيد عندكم ... 

--------

1/ كيف تتم اضافة الملف الرأسي winsock.h الى ++Cالاصدارة ( Borland C++ 5.02 ) ؟

(لقد قمت بعمل نسخ/لصق للملف الى داخل المجلدات BIN و LIB هل هذا صحيح ؟)

--------

2/ ( سؤال غبي لطالما اسأله ... ) ما هو الفرق بين الملفات الرأسية Header File و المكتبات Libary الا تحوي جميعها على دوال جاهزة ؟؟؟؟ ...

و كيف يتم تضمين المكتبة wsock32.LIB في Borland C++ 5.02 هل يتم ذلك برمجياً فقط عن طريق الامر التالي :

#pragma commment(lib, "wsock32.lib")

---------

3/

اقتباس
الدالة التي تبتدأ لنا خدمات ال winsocket هي :

WSAStartup(wVersionRequested, &wsaData);

ما تقوم به فعلياً هذه الدالة هو ان تسمح للبرنامج بتحديد رقم الاصدارة Version الخاص بالـ Windows Sockets API المطلوب ،، و منثما تعيد تفاصيل هذه الاصدارة ،، اعتقد من اجل التعامل معها ..

سؤالي : لاحقاً عند كتابة البرنامج هل سيكون الامر :

WORD wVersionRequested = MAKEWORD(1,1);

بل عملية استدعاء الدالة WSAStartup او بعدها ... ( سؤال غبي .. ها ) ؟

-------

4/

اقتباس
من الملاحظ أن النوع WORD هو 2 بايت أي أنه تماما مثل ال short ,, لكن يفضل لأن نتعامل مع WORD ,,

سؤالي : هل المقصود بالـباراميتر الثاني هو wsaData& ..و كيف سيكون نوع المعلومات التي سيستقبلها؟

---------

5/

اقتباس
ومن يعرف مواقع أخرى فليتحفنا ,,

اليكم هذا الوقع .. الذي اعتقد انه تحفة ..

http://www.planet-source-code.com

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

----------

6/

اقتباس
البرامج :

1) معرفة ال IP الخاص بمستخدم معين ,,

2) عمل scan للمنافذ ومعرفة المفتوح منها ,,

3) الاستعلام من DNS Server لمعرفة اسم ال Host لرقم IP أو العكس ,, مثلا اذا كان ال IP هو فان ال HOST سيكون www.microsoft.com ,,

4)عمل برنامج Client/Server بسيط ,, chating مثلا ,, كالذي كتبه chik سابقا ,,

هذا للمرحلة الاولى حتى ندخل في الامور الاخرى لاحقا ,,

برامج حلوة كبداية ... لكن هل نعتمد على API الآن او لا .. فانا اقول ان دخلنا في الــ Win32 Api لازم يكون الدخول ( بشويش ) بهدوء لأن خلفيتي فيها معدومه !! .. و ان معاكم في اي اختيار تختاره ..

--------

ع جزيل الشكر ... سلفاً ..

و السلام

بنت اليمن ...

نفس أسئلة الأخت... جزاها الله خير

لكن لـ ++MS visial C

ما عد السؤال عن الفرق بين الهدر فايل و اللايبرري

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

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