• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

MSVS

اعضاء
  • عدد المشاركات

    379
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة MSVS

  1. السلام عليكم ابحث عن برنامج لإدارة المستشفيات / المستوصفات ، يكون متكامل من جميع النواحي شؤون مرضى و شؤون مالية و إدارية . و يطلب فيه ميزة مهمة جداً ..... وهي : أرشفة ألكترونية كاملة للبيانات . يعني المريض يفتح ملف أو يسجل زيارة للطبيب ، لا يحتاج أن ينتقل الملف (ذو الأوراق) بين قسم الملفات و الاستقبال ثم العيادة ، بل يظهر للطبيب في عيادته على جهازه مباشرة " أن المريض "فلان" بانتظار دوره " و يظهر أيضاً للطبيب كافة بيانات المريض و زياراته السابقة و و و و و و و و . يعني الميزة الجديدة في البرنامج ، هو أن يستبدل استخدام الورق باستخدم الحاسب الآلي بشكل كامل ، حتى عند الطبيب و الصيدلية و و و و . فهل أجد مثل هذا البرنامج ؟؟؟؟
  2. السلام عليكم على إختلاف أنواع حماية البرامج ، هل من الممكن أن نختصر الوقت والجهد (بدل دراسة الخوارزميات) أن نبحث عن القفزة التي تغير مسار البرنامج (و التي تأتي بعد مقارنة CMP) ؟ :rolleyes: بانتظاركم :D
  3. ______________.rarالسلام عليكم ورحمة الله وبركاته هذه مشاركة لي في المنتدى الراحل www.vb4arab.com ، أحببت أن أنقلها مع بعض التعديلات . هل سألت نفسك مرة ، كيف تعمل برامج البريد الإلكتروني كـ الأوت لوك ؟ سنحاول في هذه العجالة أن نتعرف على كيفية عمل برامج البريد الإلكتروني . و الأهم أننا سنتعرف بإذن الله على البروتوكول SMTP و البروتوكول POP (البروتوكول هو : ميعار يعرف كيفية تفاهم الحواسيب مع بعضها البعض ) المعايير التي تؤلف البروتوكول كثيرة كـ(حجم الإطار و طول المعطيات و بتات الفحص و .... إلخ ) وبين هذه المعايير (في طبقة التطبيقات) توجد الأوامر والردود بين الحواسيب ، وهذا ما يهم المبرمجين . إن الأوامر و الردود (التراسل) بين الأجهزة التي تعمل على أي بروتوكول لا بد و أن تكون معرّفة مسبقاً . فعلى سبيل المثال ، لا يمكن أن تنشأ من عندك أمر جديد في احد الاجهزة و تتنتظر من الأخر أن يفهم رسالتك فضلاً عن أن يتفاعل معها ! ولهذا ،،، نريد أن نسلط الضوء في هذا الدرس على الأوامر و الردود (المراسلات)التي تتم بين جهازي حاسب (سيرفر و عميل) عبر البروتوكول SMTP لارسال البريد الإلكتروني و البروتوكول POP لاستقبال البريد الإلكتروني . ** ملاحظة : نحن نتحدث في هذه المشاركة عن أوامر و ردود البروتوكول ، وهذا يعني أن الفائدة من هذا الدرس ليست محصورة على مبرمجي الـ VB فقط ** في البداية يفترض أنه سبق أن تعاملت مع أداة Winsock و تعرفت على خصائصها و طرقها و أحداثها ، إن لم تكن عندك خلفية عن استخدام هذه الأداة فأنصحك بدرس الأستاذ رغيد الطيب / درس : في استخدام Winsock للربط بين الاجهزة ( للمبتدئين ) "هذا الدرس كان كالمرجع في منتدى VB4Arab و أرجو من الأستاذ رغيد الطيب أن يضعه في هذا المنتدى من جديد" الآن عودة لموضوعنا ، كيفية التخاطب مع السيرفر عبر البروتوكول SMTP و البروتوكول POP . إن ميكروسوفت أوت لوك ( أو أي برنامج بريد أخر) يقدم لك خدمة إستقبال الإيميل من سيرفر مقدم الخدمة إلى جهازك ، و كذلك العكس فهو يقدم لك خدمة إرسال الإيميلات من جهازك إلى سيرفر مقدم الخدمة ليصدر الإيميل و كأنه من الموقع . هذا يتم دون أن تفتح صفحة موقع مقدمة الخدمة (الياهو مثلاً). والسؤال هنا ،،،،،،، كيف يتم هذا ؟ كيف يتراسل Micrsofit OutLook مع موقع مقدمة الخدمة ، وما هي الحوارات التي تتم بينهم ؟؟ ** البريد الصادر (SIMPLE MAIL TRANSFER PROTOCOL) ويختصر بـSMTP عندما تقوم بتصميم رسالة إلكترونية جديدة لترسلها لصديقك عبر برنامج بريدي ، فإن البرنامج يتخاطب مع سيرفر مقدم الخدمة على المنفذ 25 ، طبعاً فتح المنفذ بواسطة الأداة WinSock "وهذا ما سنشرحه بإذن الله" أو دوال API WinSock هذا المنفذ (25) متفق على أنه محجوز لبروتوكول البريد الصادر SMTP . لنفرض أن لديك العنوان البريدي التالي [email protected] عند مقدم الخدمة www.gawab.com و تريد أن ترسل رسالة إلكترونية من جهازك عبر الأوت لوك لصديقك الذي عنوانه [email protected] إن أول ما يفعله برنامج البريد هو : الإتصال مع السيرفر عبر المنفذ 25 (منفذ البريد الصادر) إن ملقم خدمة البريد الصادر في موقع www.gawab.com هو SMTP.gawab.com (من المفترض)إننا نعلم كيف يتم الاتصال مع السيرفر عبر منفذ باستخدام winsock إنه في الأمر التالي : Winsocl.Connect "SMTP.gawab.com" , 25 نحن الآن طلبنا الاتصال بالسيرفر SMTP.gawab.com عبر المنفذ 25 . الذي سيحدث الآن أن السيرفر سيرد علينا برسالة . ولكن كيف نقرأ الرسالة ؟ إن كانت قد اطلعت على درس الأستاذ رغيد الطيب أو عندك خلفية عن هذه الآداة فستعرف أنك تقرأ الرسائل القادمة من الطرف الأخر تحت الحدث DataArrival التابع للأداة Winsock باستخدام الأمر winsock.GetData إذاً سيكون ملخص هذه الفقرة أن تكتب ما يلي Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Dim strRespone As String Winsock.GetData strRespone ' المتغير سيحمل قيمة الرسالة القادمة من السيرفر End Sub إن المتغير strRespone سيحمل قيمة نصية تمثل الرسالة القادمة من السيرفر . و عبر تحليل هذه الرسالة سنرسل للسيرفر و نستقبل الرسائل الإلكترونية و نعرف عدد الرسائل في صندوق الوارد و نحذف أي رسالة لا نريدها .... إلخ . المهم هذه الرسالة القادمة من السيرفر تختلف من سيرفر لآخر ولكن .... الخانات الثلاث الأول منضبطة وهي تمثل الحالة . أما الخانات التي بعدها فتتغير من سيرفر لأخر ولذلك سنهملها. إن أول رسالة سنستقبلها بعد طلب الاتصال مع السيرفر SMTP.gawab.com ستكون : 220 gawab.com ESMTP الرقم 220 يعني أنها عملية ناجحة أما بقية الخانات فإنها لا تعنينا هنا . إذا علمنا أن عملية الإتصال تمت بناجاح نقوم بالخطوة التالية . نرسل للسيرفر رسالة "Helo gawab" كالتالي : Winsock.SendData "HELO gawab" & vbCrLf إن vbCrLf بمثابة زرEnter أو سطر جديد . سيرد علينا السيرفر برسالة : 250 gawab.com ما يهمنا هنا الرقم 250 أي أن العمية ناجحة . أما ما بعده فيختلف من سيرفر لآخر . عندها نرسل للسيرفر أمر "MAIL FROM:" و نوضح فيه الإيميل الصادر(المرسل) الذي هو [email protected] كالتالي : Winsock.SendData "MAIL FROM: [email protected]"  & vbCrLf سيرد علينا السيرفر بـ : 250 Ok لاحظ أن الرقم 250 يعني أن العملية ناجحة عندها نرسل للسيرفر أمر "RCPT TO:" بأن الإيميل سيذهب للعنوان [email protected] كتالي : Winsock.SendData "RCPT TO: [email protected]"  & vbCrLf و سيرد علينا السيرفر بـ : 250 ok وكما قلنا أن الرقم 250 يعني أن العملية ناجحة بعد ذلك نخبره بأننا سندخل البيانات (موضوع الإيميل و الإيميل)عن طريق ارسال الأمر DATA كالتالي : Winsock.SendData "DATA"  & vbCrLf سيرد علينا السيرفر بـ : 354 go ahead المهم هو الرقم 354 أما ما بعده فقد يتغير من سيرفر لاخر ، على سبيل المثال بعض السيرفرات تقول لك اكتب و اقفل الرسالة بنقطة "." الآن نقوم بإرسال الرسالة كالتالي : Winsock.SendData "Subject: الحمد لله رب العالمين"& vbCrLf Winsock.SendData "هذا بفضل الله وحده فله الحمد و له الشكر"  & vbCrLf أكتب ما بدا لك و لن يرد عليك السيرفر إلا بعد أن تخبره بأنك قد انتهيت من كتابة الرسالة بإرسال نقطة فقط "." كالتالي : Winsock.SendData "." & vbCrLf عندها يعلم السيرفر أنك انتهيت من كتابة الرسالة . فيرسل لك رسالة كالتالي : 250 ok 1046078031 qp 92328 الرقم 250 يعني أن العملية ناجحة . إذا أردت أن تخرج من السيرفر (تنهي تعاملك معه) تكتب الأمر QUIT كالتالي : Winsock.SendData "QUIT" & vbCrLf و سيرد عليك السيرفر بالرسالة : 221 gawab.com الرقم 221 يعني إنهاء الاتصال مع السيرفر . في الملف المرفق تستطيع تطبيق الشرح السابق . آمل أن يكون الدرس واضحاً :rolleyes: و السلام عليكم ورحمة الله أبو عابد
  4. شكرا على ردك أعلم أن هذا مختص في الـ .net ولكني وجدتكم تتحدثون عن AT-Command لذلك طرحت السؤال .
  5. جزاك الله خيراً أنحلت مشكلتي عن طريق حفظ باسم
  6. السلام عليكم طبقت أوامر قراءة الرسائل من الموبايل و لم نتجح علماً بأن جهازي هو نوكيا 6630 و بالبحث وجدت كثير من الاشخاص يواجهون نفس المشكلة . السؤال : ما هو الجهاز المتوفر الآن بالأسواق الذي يدعم AT-Command بحيث نستطيع من خلال Hyper terminal أن نقرأ الرسائل في صندوق الوارد . وشكراً لك
  7. السلام عليكم عندما يبيع الـ ISP باندودث أكثر من المحجوز له فهذا يؤدي لبطء عام عند مزود الخدمة ، تستطيع معرفة ذلك من مشتركين آخرين (لنفس مزود الخدمة ISP) خارج نطاق مدينتك هل عندهم بطء في التصفح أم لا . عندما يكون في المنطقة التي تسكن فيها عدد مشتركين لهم اشتراكات ذات سرعة عالية يفوق مجموعها مجموع الـ Uplike لجهاز الـ DSLAM فإن المشكلة في شركة الاتصالات نفسها ، و يجب عليها توسعة خطوط الـ Uplink التي تربط الـ DSLAM بالـ Backbone ، تستطيع معرفة ذلك عندما يكون أغلب المشتركين في حيكم يشتكون من بطء الإنترنت . إذا فشل الاحتمالان السابقان : بعض أجهزة الـ DSLAM (مثل Stinger Lucent) تقوم بعمل مجموعات Group لكل عدد من خطوط المشتركين ، و تخصص لكل مجموعة مثلاً 1 ميجا فيشتركون بهذا الباندودث ، فإذا كان حظك سيء و كنت أنت و ثلاث مقاهي انترنت بنفس المجموعة قل على نفسك السلام :) ، وهذا احتمال ضعيف . هناك احتمالات تتعلق بالشبكة الخارجية ، أقصد الأسلاك النحاسية من سنترال الاتصالات إلى جهازك (نوعيتها ، المسافة ، المؤثرات الخاجية) . اتوقع أن تكون مشكلتك نفس الاحتمال الأول . و الله أعلم .
  8. كنت أتجول في بعض مواقع البرمجة الأجنبية فوجدت موضوعاً جميلاً عن فحص المنافذ الفعالة بواسطة الدالة GetTcpTable أحببت أن أترجم لكم الدرس لتعم الفائدة ولكني خلال الترجمة وجدت أن الموضوع يحتاج لشرح أكثر فأحببت صياغة الموضوع من جديد ليكون انفع بإذن الله . والآن ننتقل للدرس : دوال الـ IP Helper API كثيرة و تزودنا بفوائد حول الشبكات (الحرفين IP هما اختصار للكلمتين Internet Protocol) فمثلاً الوظيفة GetTcpTable تعطي معلومات عن جميع إتصالات البروتوكول TCP الفعالة . فقط باستدعاء واحد للوظيفة السابقة ستحصل على جدول فيه حالة المنفذ و رقم المنافذ الفتوحة لهذا الاتصال و رقم الأيبي للطرفين . ومع هذا لا تظن أن استخدام الوظيفة GetTcpTable إلى هذا الحد من البساطة :) سنحاول أن نأخذ مثال عملي يوضح لنا كيفية عمل هذه الدالة ثم ننتقل للوثائق ليكون عملنا موثق :) . للإعلان عن الدالة GetTcpTable نكتب السطر التالي : Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As PMIB_TCPTABLE, _                                                 ByRef pdwSize As Long, _                                                 ByVal bOrder As Long) As Long و منه يتضح لنا أن الدالة لها 3 بارامترات (وسائط) : الأول : جدول الاتصالات الفعالة من نوع MIB_TCPTABLE الثاني : حجم جدول الاتصالات الفعالة من نوع Long الثالث: فرز الجدول من نوع Long والآن أول خطوة هي الحصول على حجم البيانات في جدول اتصالاتTCP . نمرر للدالة البارامترات التالية : الأول : 0 الثاني : رقم طويل من نوع Long الثالث : 0 كالتلي : Dim lngSize, lngRetVal As Long lngRetVal = GetTcpTable(ByVal 0&, lngSize, 0) والآن بعد تنفيذ الدالة السابقة سنحصل على معلومتين : الأولى : حجم البيانات في جدول اتصالات TCP و يوضع في المتغير lngSize الثانية : نتيجة العملية وتوضع في المتغير lngRetVal وهي تدل على نجاح العملية أو سبب فشلها . هذه الثوابت هي تحليل للقيمة المعادة من الدالة : Const ERROR_BUFFER_OVERFLOW = 111& Const ERROR_INVALID_PARAMETER = 87 Const ERROR_NO_DATA = 232& Const ERROR_NOT_SUPPORTED = 50& Const ERROR_SUCCESS = 0& والآن و بعد أن حصلنا على حجم بيانات الجدول TCP و تأكدنا من نجاح العملية و أن النظام يدعم الـ IP Helper API نلقي نظرة على وثائق مايكروسوفت عن الدالة GetTcpTable DWORD GetTcpTable(  PMIB_TCPTABLE pTcpTable, // buffer for the connection table  PDWORD pdwSize,          // size of the buffer  BOOL bOrder              // sort the table? ); الكود السابق ييشرح لنا بنية الدالة GetTcpTable ونلاحظ أن الوسيط الأول من نوع PMIB_TCPTABLE . هذه التركيبة (MIB_TCPTABLE) وكما في الوثائق فإن لها البنية التالية : typedef struct _MIB_TCPTABLE {  DWORD dwNumEntries;         // number of entries in the table  MIB_TCPROW table[ANY_SIZE]; // array of TCP connections } MIB_TCPTABLE, *PMIB_TCPTABLE; وهنا نتوقف عند نقطتين : النقطة الأولى : توجد تركيبة أخرى إضافية وهي MIB_TCPROW و بنيتها كالتالي : typedef struct _MIB_TCPROW {  DWORD dwState;      // state of the connection  DWORD dwLocalAddr;  // address on local computer  DWORD dwLocalPort;  // port number on local computer  DWORD dwRemoteAddr; // address on remote computer  DWORD dwRemotePort; // port number on remote computer } MIB_TCPROW, *PMIB_TCPROW; و النقطة الثانية : أن التركيبة MIB_TCPTABLE تحوي على عضوين : 1- dwNumEntries وهو من نوع Long وهذا لا إشكال فيه . 2- table[ANY_SIZE] وهو مصفوفة تركيبة من نوع MIB_TCPROW ، وهنا يقع الإشكال لمبرمجي الفيجوال بيسك . وهو كيف سيتم الإعلان عن تركيبة (MIB_TCPTABLE) تحتوي على تركيبة (MIB_TCPROW) على شكل مصفوفة "متغيرة" ؟ في هذا الموضع لا تستطيع فيجوال بيسك أن تكون بمرونة C++ ولكن يمكن الإلتفاف على هذه النقطة بأن نحدد طول المصفوفة بـ 500 مثلاً أي 500 صف اتصال وهذا سقف لا اظن أن أي جهاز سيفتح اتصالات بهذا الكم . مع أني وجدت في بعض مواقع البرمجة الأجنبية من يحدد هذا العدد بـ 100 إتصال فقط . و اظنه كاف . المهم ، نستطيع أن نحاكي تراكيب الـ C++ :) بالإعلان عن التركيبتين التاليتين : Const MAX_ROW  As Integer = 500 Private Type MIB_TCPROW    dwState As Long    dwLocalAddr As Long    dwLocalPort As Long    dwRemoteAddr As Long    dwRemotePort As Long End Type Private Type MIB_TCPTABLE    dwNumEntries As Long                 ' number of entries in the table    table(MAX_ROW) As MIB_TCPROW         ' array of TCP connections End Type لو كان إعلان التركيبة الثانية بهذا الشكل لأصدر لن االمصرف خطأ : Private Type MIB_TCPTABLE    dwNumEntries As Long                 ' number of entries in the table    table() As MIB_TCPROW         ' array of TCP connections End Type والسبب هو أننا لم نحدد طول مصفوفة الـ MIB_TCPROW : عموماً بهذا الإلتفاف نستطيع أن نعلن عن متغير من نوع MIB_TCPTABLE ونمرره كوسيط أول للدالة GetTcpTable التي ستضف فيها بيانات الاتصالات TCP الفعالة . على النحو التالي : Dim tcpTable As MIB_TCPTABLE     lngRetVal = GetTcpTable(tcpTable, lngSize, 0) ) كما أسلفنا فإن الوسيط الثاني و الذي هو lngSize يعبر عن حجم البيانات في الجدول ، وقد حصلنا عليه من استدعاء سابق لهذه الدالة . إلى هنا نكتفي و سيكون لنا تكملة في القريب بإذن واحد أحد . والسلام عليكم ورحمة الله وبركاته
  9. بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته نواصل بحمد الله تعالى هذه السلسلة من الدروس والتي نرجو من الله أن ينفع بها كاتبها و قارئها إنه سميع مجيب . سبق و أن ذكرنا في درس سابق كيفية عرض جدول اتصالات TCP الفعّالة على جهازك عن طريق الدالة GetTcpTable و التي هي إحدى دوال IP Helper API و الموجوده في المكتبة iphlpapi.dll في هذا الدرس سنتعرف على وظيفة تقدم معلومة إضافية عن الوظيفة السابقة ، نستطيع أن نستثمر تلك المعلومة لنتعرف على البرنامج الذي يتحكم في المنفذ ، لتبنى بعد ذلك قراراتك : هل البرنامج موثوق أم مشبوه ؟ وما هي درجة الأمان لهذا البرنامج ؟ وهل في كل مرة يفتح نفس المنفذ أم أنه يتغير ؟ باختصار تستطيع أن تعمل برنامج مشابه لبرنامج Zone Alarm الشهير . حسناً ،،، الفكرة باختصار هي : أن الوظيفة AllocateAndGetTcpExTableFromStack تعرض جميع اتصالات TCP الفعالة مع أرقام العمليات (Process ID) سنربط بين أرقام العمليات في هذه الوظيفة مع أرقام العمليات الفعالة في نظام التشغيل و المستخرجة بواسطة الوظيفة Process32First و الوظيفة Process32Next وعندها سنتوصل للملف الذي يتحكم بالمنفذ . في ثنايا هذا الدرس سنتعرف على الوظائف التالية : 1 - الوظيفة : AllocateAndGetTcpExTableFromStack و يعلن عنها كالتالي : Declare Function AllocateAndGetTcpExTableFromStack Lib "iphlpapi.dll" _                (pTcpTableEx As Any, _                 ByVal bOrder As Long, _                 ByVal heap As Long, _                 ByVal zero As Long, _                 ByVal flags As Long) As Long هذه الوظيفة لها 5 وسائط (بارامترات) : الأول : pTcpTableEx سيوضع فيه مؤشر الذاكرة الذي سيكون أول بايت للبيانات . الثاني: bOrder سيحدد الفرز ، سنمرر له القيمة صفر . الثالث : heap وهو مقبض كومة المعالجة الحالية ، نحصل على هذه القيمة بواسطة الوظيفة GetProcessHeap الرابع : zero سنمرر له صفر . الخامس:flags و سنمرر له الرقم 2 . للأسف لم أجد أي وثائق في ميكروسوفت تتحدث عن هذه الدالة . ستعود هذه الوظيفة بصفر حال النجاح و غير ذلك حال الفشل . 2 - الوظيفة : CreateToolhelp32Snapshot ويعلن عنها كالتالي : Declare Function CreateToolhelp32Snapshot Lib "kernel32" _                (ByVal lFlags As Long, _                 ByVal lProcessID As Long) As Long وهي لأخذ صورة من العمليات و المسارات الحالية في نظام التشغيل ، تعيد المقبض المفتوح في حال النجاح والذي سيستخدم في وظائف أخرى و -1 في حال الفشل . لها وسيطين : الأول : نوع الصورة المراد إلتقاطها ، ويأخذ أحد قيم هذه الثوابت : Const TH32CS_SNAPHEAPLIST = &H1 Const TH32CS_SNAPPROCESS = &H2 Const TH32CS_SNAPTHREAD = &H4 Const TH32CS_SNAPMODULE = &H8 Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32 CS_SNAPMODULE) Const TH32CS_INHERIT = &H80000000 الثاني : يستخدم في حالة تمرير أحد الثابتين TH32CS_SNAPHEAPLIST أو TH32CS_SNAPMODULE للوسيط الأول ، و ما عدا ذلك يهمل. 3 - الوظيفة : CloseHandle ويعلن عنها كالتالي : Declare Sub CloseHandle Lib "kernel32" _                (ByVal hPass As Long) تستخدم لإغلاق مقبض الكائن ، و سنستخدمها مع مقبض الكائن الذي فتحناه في الوظيفة السابقة . كما يظهر من الوظيفة فهي لا تعود بقيمة . للفائدة : يمكن أن تعود هذه الوظيفة بقيمة (صفر في حال الفشل و غير ذلك في حال النجاح) ولكن يجب أن تعلن عن هذه الوظيفة على النحو التالي : Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long لاحظ أننا استخدمنا Function بدل Sub . على أية حال ،، تأخذ هذه الوظيفة وسيط واحد عبارة عن مقبض الكائن المراد إغلاقه . 4 - الوظيفة : GetProcessHeap ويعلن عنها كالتالي : Declare Function GetProcessHeap Lib "kernel32" () As Long تعيد مقبض كومة المعالجة في حال النجاح ، ليس لها وسائط كما هو مشاهد . 5 - الوظيفة : Process32First و يعلن عنها كالتالي : Declare Function Process32First Lib "kernel32" _                (ByVal hSnapShot As Long, _                 uProcess As PROCESSENTRY32) As Long تزودنا بأول عملية موجودة في الصورة المؤخوذة لعمليات النظام ، لها وسيطين : الأول : hSnapShot وهو مقبض صورة العمليات في النظام و الذي حصلنا على بواسطة الوظيفة CreateToolhelp32Snapshot الثاني : uProcess كائن من نوع PROCESSENTRY32 وهي كالتالي : Private Type PROCESSENTRY32    dwSize As Long    cntUsage As Long    th32ProcessID As Long    th32DefaultHeapID As Long    th32ModuleID As Long    cntThreads As Long    th32ParentProcessID As Long    pcPriClassBase As Long    dwFlags As Long    szExeFile As String * MAX_PATH End Type ستقوم الوظيفة بتعبئة الوسيط الثاني بقيمة أول عملية في الصورة الملتقطة لعمليات النظام . في هذا الوسيط يوجد العضو szExeFile والذي سيحمّل باسم الملف الخاص بالعملية . 6 - الوظيفة : Process32Next وهي شقيقة الوظيفة السابقة ، و يعلن عنها كالتالي : Declare Function Process32Next Lib "kernel32" _                (ByVal hSnapShot As Long, _                 uProcess As PROCESSENTRY32) As Long تزودنا بالعملية التالية في الصورة المأخوذة لعلميات النظام ، تأخذ نفس عدد الوسائط و أنوعها ، وتعبئ الوسيط الثاني بقيمة العملية التالية في النظام . 7 - الوظيفة : CopyMemory ويعلن عنها كالتالي : Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _                (Destination As Any, _                 Source As Any, _                 ByVal Length As Long) و تقوم بنسخ طول محدد من الذاكرة من متغير لأخر أو من بداية مؤشر إلى مكان آخر حسب نوع تمرير الوسائط (بالقيمة أو بالمرجع). و تأخذ الوسائط التالية : الأول : pDst وهو الهدف ، و هذا سيوضع فيه القيمة المراد نسخها . الثاني: pSrc وهو المصدر ، وهذا الذي سوف ينسخ منه . الثالث : ByteLen وهو طول السلسلة المراد نسخها و تقاس بالبايت. هذه الوظيفة لا تعيد قيمة . 8 - الوظيفة : htons ويعلن عنها كالتالي : Declare Function htons Lib "ws2_32.dll" _                (ByVal dwLong As Long) As Long وتقوم بتحويل الرقم الممر لها من رقم طويل Long بحجم 4 بايت إلى رقم قصير Integer بحجم 2 بايت ، و الفائدة هي أن تحول الرقم المعطي إلى رقم منفذ بين 0 و 65535 تأخذ هذه الوظيفة وسيط واحد من نوع Long و تعود برقم قصير Integer يمثل رقم المنفذ . هذه الوظيفة سبق أن صنعنا وظيفة تحاكيها في الدرس السابق (تعلم : كيف تقرأ جدول اتصالات Tcp الفعالة) وكانت على النحو التالي : Private Function GetTcpPortNumber(DWord As Long) As Long    GetTcpPortNumber = DWord / 256 + (DWord Mod 256) * 256 End Function عوماً ،،، تستطيع استخدام إحدى الوظيفتين إما htons API أو الوظيفة GetTcpPortNumber وكلاهما سيعود بنفس النتيجة . والآن على بركة الله نبدأ ... إن أول وظيفة سنستخدمها في برنامجنا هي الوظيفة AllocateAndGetTcpExTableFromStack والتي سبق أن قلنا أنها تأخذ 5 وسائط ، إذن سنكتب التالي : nRet = AllocateAndGetTcpExTableFromStack(pTable, 0, GetProcessHeap, 0, 2) وكما يظهر في السطر السابق فإننا مررنا الوظيفة GetProcessHeap في الوسيط رقم 3 . وقد تلاحظ أننا مررنا للوسيط الأول المتغير pTable و الذي هو من نوع Long و الذي سيوضع فيه رقم مؤشر الذاكرة الذي سيكون أو بايت في جدول الاتصالات الفعالة . كذلك ناتج الوظيفة سيوضع في المتغير nRet و الذي هو من نوع Long . إذن كان الواجب علينا أن نعلن عن متغيرين من نوع Long قبل أن نكتب السطر السابق ، وعلى هذا سيكون أول ما نكتبه في برنامجنا هو التالي :    Dim pTable As Long    Dim nRet As Long nRet = AllocateAndGetTcpExTableFromStack(pTable,0, GetProcessHeap, 0, 2) إن ناتج الوظيفة السابقة (وكما أشرت سابقاً) سيكون : 1 - مؤشر الذاكرة و سيوضع في المتغير pTable 2 - ناتج الوظيفة و سيوضع في المتغير nRet ولكن لنقف قليلاً عند كلمة مؤشر ! ما هو المؤشر ؟ هذا ما سنتحدث عنه في المشاركة التالية بإذن الله تعالى والسلام عليكم ورحمة الله وبركاته
  10. http://popularscreensavers.smileycentral.c...ck_hash=11zzPdX
  11. السلام عليكم طيب الآن وضحت الأمور . أنت عندك أمرين : الـ UPLink وهو الخط الذي سيربطك بشبكة شركة الاتصالات ، يجب أن يكون متوافق مع الـ Backbone المستخدمة في شركة الاتصالات في السنترال . فإذا كانت ATM Backbone فيجب عليك اختيار بورتات الـ UPlink من نوع ATM أما إذا كانت الـ Backbone هي IP Network فأنت تحتاج لبورتات UPLink من نوع Ethernet ، قد يكون الـ DSLAM مصمم ليعمل على أحد هاتين الشبكتين إما ATM أو IP ، لذلك تجد بعض الـ DSLAM أسمه IPDSLAM . الأمر الآخر الـ Access link أو لنقل الـ ADSL Port فتقنية الـ ADSL تدعم إلى سرعة 8 ميجا في مسافة لا تزيد عن 2 كم من السنترال و تقل السرعة إلى بشكل تدريجي إلى الـ 7 كم و بعد ذلك لن تصل (هناك عوامل أخرى تحكم أقصى مسافة يمكن الوصول إليها) بالنسبة لك ستتحكم بسرعة البورت في الـ DSLAM ولكن هذا لا يعني بالضرورة أنها سرعة الاتصال للعميل فهناك أجهزة أخرى لها علاقة بتحديد السرعة مثل الـ BRAS وهذه تكون عند شركة الاتصالات . لو وضعت رابط المواقع التي أخذت منها المعلومات لربما أفدناك أكثر . و الله أعلم والسلام عليكم
  12. في الحقل الوظيفي ربما تطبق 10% مما تعلمته في الجامعة . سمعت هذه الجملة من أحد أساتذتي أيام الكلية ، و علمت مدى مطابقتها للواقع بعد إلتحاقي بالوظيفة . تذكرني عندما تعلم مدى صدق 10% :)
  13. و كيف ستمد كوابل على مسافة 3 كم ؟ هل ستستخدم الشبكة الخارجية لشركة الاتصالات ؟ أين هي المواقع التي جلبت منها الملعومات أعلاه ؟
  14. السلام عليكم في البداية ما هو سبب استخدامك للـ DSLAM ؟ وما هي المسافة بين الأجهزة التي تنوي ربطها بالـ DSLAM ؟ أين هي روابط المواقع التي اخذت منها المعلومات ، كي نفهم أكثر هذه المواصفات . مبدئياً يبدو أنه حصل عندك لبس في منافذ العملاء ADSL Port و منافذ الـ Uplink و التي هي من نوع Ethernet والتي سرعاتها 10/100/1000 مزيد من التفصيل قد يظهر في حال أجبت على الأسئلة في الأعلى . والسلام عليكم
  15. السحر عبر الإنترنت !
  16. السلام عليكم من واقع عملي أقول لك : لا يمكن لك معرفة الـ IP's التي على الـ DSLAM إلا بالدخول عن طريق الـ Management و التي لا يمكن الدخول عليها إلا بطريقين : 1- Local Access 2- VLAN Management بل أستطيع القول بأنك لن تستطيع أن ترى الـ IP's التي على الـ DSLAM حتى لو دخلت عن طريق الـ Management ، لأن الـ DSLAM يعمل على الطبقة 2 ، ولن ترى فيه أكثر من Up أو Down للـ Port أو الكرت أو النود . و أمور أخرى مثل سرعة الخط و التشويش و و ، و لن يظهر لك الـ IP الخاص بالعميل على البورت . يمكنك أن ترى الـ IP's و اسم المستخدم و السرعة و زمن الجلسة و من جهاز الـ BRAS و الذي يعمل ربط و تحكم في الـ Session بين الـ ISPs و الـ Users . لمزيد من المعلومات حول الـ Broadband Remote Access Server - BRAS انظر هذا رابط لأحد المنتجات : http://www.juniper.net/products_and_servic...adband_service/ و ينطبق عليه الكلام في الأعلى : "لا يمكن الدخول عليها إلا بطريقين : 1- Local Access 2- VLAN Management" على كذا لابد لك أن تخترق الـ DSLAM (ولا أتصور كيف سيتم اخترقه من قبل المستخدم ؟) ثم تدخل على الـ Management VLAN ثم تخترق الـ BRAS كي تصل لعناوين المستخدمين في مدينة ما :) و أسهل من ذلك ، شف لك أحد يعمل في شركة الاتصالات و يعطيك المعلومة بدون غلبة :lol: و الله سبحانه أعلم .
  17. 1- يمكن معرفة عناوين الموصولين بالـ DSLAM ولكن هذا يتطلب منك الدخول على الـ DSLAM أو الـ BRAS (وهو الجهاز الذي بعد الـ DSLAM) عن طريق الـ VLAN الخاصة بالإدارة ، يعني لازم تكون من داخل شبكة شركة الإتصالات . 2- الأجهزة التي بين العميل و مزود الخدمة ISP و الذي يعتبر هو الـ Gateway تختلف باختلاف تصميم شبكة الاتصالات . عندما تخرج الباكت من جهاز العميل تذهب للـ DSLAM وهو جهاز لتوزيع خطوط رقمية للمشتركين DSL . و من الـ DSLAM إلى الـ BRAS لتجميع خطوط المشتركين من الـ DSLAM's و فتح قنوات اتصال مع مزودي الخدمة لفحص : اسم المستخدم و كلمة المرورو و الدومين @256.domain.com و من ثم تطبيق الـ Policy الخاصة بالعميل داخل شبكة الاتصال . و يتم داخل هذا الجهاز مراقبة مدة الاتصال للعميل . ثم بعد الـ BRAS تذهب الباكت إلى راوترات أو سوتشات ATM حسب الـ Backbone لشركة الاتصالات . ثم سيرفرات الـ ISP's في الـ Data Center و الذي سيمنح العميل الـ public IP . ثم الـ Gateway الخاص بالإنترنت . 3- لا يمكن دخول العميل من منزله على شبكة الاتصالات الداخلية ، فالعميل على VLAN مختلفة عن VLAN الإدارة و التي عن طريقها يتم الدخول على تلك الأجهزة أو على PVC مختلفة عن PVC الإدارة (حسب الـ Backbone ) و الله أعلم
  18. السلام عليكم ورحمة الله أحاول أجمع معلومات حول الشيربونت و منها أسعار المنتج ووجدت الصفحة التالية : http://office.microsoft.com/en-us/sharepoi...2176831033.aspx أي من الإصدارات أحتاج ؟ و ما هذه الأسعار الخيالية 57,670 $ :blink: وللعلم ، فانا أرغب في تركيبه لدي شركة فيها 4000 موظف . بانتظار مساعدتكم المعهوده :) والسلام عليكم ورحمة الله وبركاته
  19. وعليكم السلام البرنامج API-guide لا يستوعب كل دوال API ولكن المشهور منها فقط . ولن تجد مكان يستوعب كل دوال API حتى MSDN :rolleyes: أنظر مثلاً الدوال المستخدمة في هذا المقال لكن تجدها في MSDN . عن نفسي وصلت لتلك الدالة بالصدفة في أحد المواقع عندما كنت أبحث عن شرح لدالة GetTcpTable والسلام عليكم
  20. http://www.arabteam2000-forum.com/index.ph...c=58948&hl= http://www.arabteam2000-forum.com/index.ph...c=60210&hl=
  21. السلام عليكم هذا برنامج لمراقبة (بعض) رسائل النظام المرسلة لنوافذ البرامج .، طبعاً بواسطة دوال API الدوال الرئيسية في هذا البرنامج : Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" _                         (ByVal lpString As String) As Long هذه الدالة لتحويل قيمة نصية لرسالة من نوع Long ليتعامل معها النظام . Private Declare Function RegisterShellHook Lib "Shell32" Alias "#181" _                         (ByVal hWnd As Long, _                          ByVal nAction As Long) As Long هذه الدالة لإنشاء Hook على النافذة الوسيط الأول مقبض النافذة التي ستستقبل الرسائل الوسيط الثاني نوع الـ Hook : RSH_REGISTER = 1 RSH_REGISTER_PROGMAN = 2 RSH_REGISTER_TASKMAN = 3 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _                         (ByVal hWnd As Long, _                          ByVal nIndex As Long, _                          ByVal dwNewLong As Long) As Long هذه الدالة لتثبيت الخطاف (Hook) على النافذة Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _                         (ByVal hWnd As Long, _                          ByVal nIndex As Long) As Long هذه الدالة نستخدمها لمعرفة عنوان الإجراء الحالي للنافذة ، سنستخدمه عند إعادة الرسائل إلى النافذة الأصلية . Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _                         (ByVal hWnd As Long, _                          ByVal lpString As String, _                          ByVal cch As Long) As Long هذه الدالة تعطينا عنوان النافذة Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" _                         (ByVal hWnd As Long) As Long هذه الدالة تعطينا طول عنوان النافذة (القيمة العائدة من هذه النافذة تستخدم كوسيط ثالث مع الدالة GetWindowText ) Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _                         (ByVal lpPrevWndFunc As Long, _                          ByVal hWnd As Long, _                          ByVal Msg As Long, _                          ByVal wParam As Long, _                          ByVal lParam As Long) As Long هذه الدالة الأم التي ستستقبل جميع الرسائل من النظام . إذا كانت قيمة الوسيط الثاني ( Msg ) = قيمة الرسالة العائدة من الدالة RegisterWindowMessage فإن هذه الرسالة تخص الـ HOOK اترككم مع المرفق :) نسيت هذا الخطاف لا يراقب غير 8 رسائل ، ستعرفها عند الاطلاع على المرفق Hook ALL Windows.rar
  22. السلام عليكم قعطة WiFi على منفذ USB + ملعقتين للقلي + مفك + زراديه = دش WiFi صح أو لا تصدق http://www.usbwifi.orcon.net.nz خبرنا إذا نجحت التجربة :D والسلام عليكم