تحويل إتصال TCP إلى IP ومنفذ اخر

22-05-2015 Networking | Servers
إعلان

قد تحتاج في بعض الأحيان إلى عمل Redirect لكافة المعلومات التي تصل على Port معين إلى IP و Port مختلفين لمعالجة الطلب, فعلى سبيل المثال إريد أن اقوم بتحويل إي إتصال يصل إلى كمبيوتري الشخصي على Port رقم 1433 إلى جهاز أخر على نفس الشبكة الموجود عليها, يمكن فعل ذلك من خلال تحويل كافة الطلبات الواصلة على رقم المنفذ المعني إلى IP و Port مختلفين من خلال rinetd.

المنفذ رقم 1433 هو خاص للإتصال بقواعد البيانات Microsoft SQL Server, ويمكن تعديل هذه المعلومات من خلال SQL Configuration Manager - ومن ثم Protocols for SQLEXPRESS أو إسم ال INSTANCE الخاص بك - ومن ثم TCP/IP قم بتغيير الحالة إلى Enabled ثم اختر IP Addresses Tab لتعديل الإعدادات 

rinetd وبكل بساطة يقوم بعملية تحويل الإتصال من نوع TCP على منفذ معين إلى IP و Port تقوم أنت بتعيينها 

Rinetd: Redirects TCP connections from one IP address and port to another

يمكنك تحميل البرنامج مباشرة من هنا

قم بفك ضغط البرنامج داخل C, ومن ثم أدخل إلى مجلد rinetd وقم بإنشاء ملف جديد بإسم rinetd.conf وقم بكتابة المعلومات على الشكل التالي: 

192.168.100.198 25 192.168.100.251 1433
  • 192.168.100.198 هو IP الذي سيستقبل الإتصال
  • 25 هو المنفذ الذي سيفتح عليه الإتصال
  • 192.168.100.251 هو IP الذي ستقوم بتحويل الإتصال عليه
  • 1433 هو المنفذ الذي سيحول عليه الإتصال

وبعدها تقوم بفتح Command Prompt لتكتب عليه السطر التالي

C:\rinetd> rinetd -c rinetd.conf 

إذا ظهر لك الخطأ التالي بعد تنفيذ الأمر, قم بالتأكد من IP المدخل ورقم المنفذ

rinetd: couldn't bind to address 192.168.100.198 port 25

عن محمد جمال

مهندس حاسوب ومطور برمجيات, أعمل Freelancer في تطوير تطبيقات الويب من خلال ASP.NET منذ عام 2007 قمت بإنشاء عدة مشاريع في مجالات مختلفة (المتحكمات الدقيقة, الأنظمة المضمنة, الروبوت, برامج سطح المكتب, أنظمة قواعد البيانات) ومن هواياتي الخط العربي

subscribe

إعلان
إعلان

تجربة استخدام نظام تدوين شخصي

27-02-2014 Blogging
إعلان

عند إطلاقي لمدونتي الشخصية كنت مصرا على إستخدام نظام تدوين خاص بي أقوم من خلاله بنشر المقالات نظرا لأن الموضوع بسيط ولن يأخذ من وقتي شيئ, يمكنني القول أنه أول نظام أقوم بإنشاءة لأقوم بإستخدامة شخصيا, فهو أولا واخرا مجرد جدول في قاعدة البيانات أقوم بإضافة وتعديل البيانات من خلاله لا أكثر ولا أقل لذلك لن أكون مضطرا لفعل الكثير من الأمور التي عادة ما أفعلها مع التطبيقات التي أقدمها للأشخاص !, وهذا ما كنت أعتقدة.

بالفعل قمت بإنشاء نظام Pager والذي كان مجرد ما تم وصفه سابقا, جدول في قاعدة البيانات أقوم بإضافة وتعديل البيانات داخلة, لا يحتوي على محرر نصوص أو حتى نظام مستخدمين, يوجد فقط مستخدم واحد في النظام وهو أنا, لا داعي لذكر أنه لا يوجد نظام قوالب فالسابق ذكره يعطي فكرة عن بدائية النظام, بعد الإنتهاء من المشروع قمت بالإهتمام قليلا بشكل الروابط ليظهر عنوان الموضوع في الرابط بدلا من رقم الصف في قاعدة البيانات URL Rewrite Mode المدعومة بشكل تلقائي داخل ASP.NET MVC لذلك لم يكن هناك أي جهد يذكر في هذه الميزة, كذلك قمت بإنشاء محرك بحث بسيط للمدونة معتمدا على جملة Contains من خلال LINQ.

قمت بنشر النظام والبدء بالتدوين وكانت هذه التدوينة أول التدوينات التي أقوم بكتابتها على المدونة متفائلا بالنظام الجديد غير مبالي بأنظمة إدارة المحتوى الأخرى ولكن فترة اللامبالة تلك لم تدم طويلا, بعد فترة لاحظت عدم وجود تغذية للمدونة "Feeds" وكأي مدونة يجب أن يكون هناك رابط خاص يستطيع الأشخاص الإشتراك به ليصلهم كل جديد, لم أنتبه لهذا الجزء لأني شخصيا لا أستخدمها ولكن بالتأكيد هناك من يستخدمها لذلك يجب توفيرها لهم, وقمت بذلك !

الوقت بالنسبة لي أصبح ضيقا في الفترة التالية ولم أستطع أن أجد أي وقت لأتابع تطوير البرنامج مع ملاحظتي لوجود أشياء أخرى يجب إضافتها مثل Drafts, الأقسام لم أرغب بإستخدامها منذ بداية الأمر ولكن القرار لم يكن سليما فحتى التغذية "Feeds" يجب أن تكون مرتبطه بأقسام معينة, ثم إن نظام المستخدمين غير مهم حقا ؟ لم أجد أني بحاجة لنظام قوالب ولكن نظام المستخدمين شيئ مهم في أي نظام ويجب أن يكون متوفرا, العديد من الأشياء التي قررت أن أقوم بتعديلها وتطويرها وتحسين أدائها لا أجد الوقت حاليا لأقوم بمتابعتها ! لم يكن الأمر بسيطا كما أعتقدت, وأعترف أني أعطيت النظام أقل من حجمة بكثير, فأي نظام تدوين يجب أن يكون متقنا مراعيا لكافة ما يحتاجه الكاتب, ليس لأني الشخص الوحيد الذي سأقوم بإستخدامة يعني أن لا أضع فيه إلا المكونات الأساسية ! فأنا كذلك بحاجتها ويجب أن تكون متوافرة.

إنتهى المطاف بي إلى الإقلاع عن استخدامه وبدلا منه قمت باستخدام ASP.NET BlogEngine, نظام تدوين في منتهى القوة والروعة, تعديل القالب ليتوافق مع النظام الجديد لا يشكل أي عقبة أمام مبرمج ASP.NET لأن النظام أساسا مكتوب بها, أعترف أن Wordpress أقوى منه من ناحية محرر النصوص الموجود, سهولة الإستخدام, السرعة أيضا, إلا أني أفضل إستخدامه لأنه مكتوب بواسطة ASP.NET.

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

  • قم ببناء تصميم يؤهلك لإستخدام كافة مكونات التطبيق بكل سهولة ويسر
  • قم ببناء محتويات النظام بشكل متين كما لو أن شخصا محترفا سيقوم بإستخدام نظامك بعد بنائه
  • إذا كنت ترغب بإستدعاء ملف معين قم بإستخدام Browse File Dialog ولا تكتفي فقط بوضع رابط مطلق للملف على إعتبار أنك لن تستخدم سوى هذا الملف
  • لا تهمل أبدا وجود محرر نصوص بسيط ومريح للمستخدم وأبتعد عن MultiLine Textbox
  • لا تعتمد على إعادة تشغيل نظامك لحل الأخطاء التي تحدث وقت التنفيذ
  • قم بالتحقق من القيم المدخلة عند تقديم أي نموذج
  • قم بتوثيق مشروعك بإستخدام التعليقات "comments" ومن خلال Git
  • قم بتقديم شرح بسيط عن كل حقل ولماذا يستخدم في أي نموذج واحرص على تقديم رسائل واضحة للأخطاء التي يرتكبها المستخدم

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

قمت بإرفاق مجلد Controller ومجلد Model للتطبيق بنسخته الأولى للفائدة, يمكنك تحميله من هنا

عن محمد جمال

مهندس حاسوب ومطور برمجيات, أعمل Freelancer في تطوير تطبيقات الويب من خلال ASP.NET منذ عام 2007 قمت بإنشاء عدة مشاريع في مجالات مختلفة (المتحكمات الدقيقة, الأنظمة المضمنة, الروبوت, برامج سطح المكتب, أنظمة قواعد البيانات) ومن هواياتي الخط العربي

subscribe

إعلان
إعلان

رسالة Invalid Query على المحاكي الخاص بـ Windows Phone 8

11-01-2014 WP8
إعلان

كالعادة بين الفترة والاخرى أقوم بتنظيف الجهاز كليا وعمل Format كامل لأتخلص من كم هائل من الملفات لا أعلم ما وأين هي ولماذا قمت بتحميلها أصلا ليعود الحاسوب خالي الوفاض, كنت أواجه عادة مشاكل في إعادة تثبيت بعض البرامج وأقوم بحلها بسرعة, أو على أقل تقدير أكون على معرفة بسبب المشكلة, ولكن في اخر مرة حدثت معي مشكلة بعد تثبيت Visual Studio 2013 مع Windows Phone SDK, المشكلة كانت في Emulator, لم يكن يعمل, وفي كل مرة أحاول أن اقوم بتشغيله يعطيني الخطأ Invalid Query !

في البداية ظننت أن المشكلة تتعلق بـ Hyper-V فقمت بالذهاب للوحة التحكم لأقوم بتفعيلة ولكني وجدته مفعلا ! "ستجد شرح كامل لكيفية تفعيلة على هذا الرابط".

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

ذهبت إلى ملف المحاكي "XDE.exe" لاقوم بتشغيلة من خارج بيئة Visual Studio, فعاد وظهر لي الخطأ التالي : 

 

الرسالة طبيعية فمن المنطقي أن لا يتم تشغيل Virtual Machine بشكل مباشر ومن دون معلومات, على أية حال إذا كنت تريد تشغيل Windows Phone Emulator من خارج بيئة التطوير Visual Studio يمكنك إستخدام هذا السطر :

xde -vhd "C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Emulation\Images\Flash.vhd"

ولكن وللأسف لم يحل ذلك المشكلة أبدا, لا يعني أن تقوم بتشغيل المحاكي من خارج بيئة التطوير بالضرورة أن يعمل من خلالها أيضا, لذلك قمت بإعادة تثبيت نسخة Windows 8 مرة أخرى وأيضا من دون فائدة !

حاليا لم أجد سبب أو حل لهذه المشكلة ولكن ما فعلته لتجاوزها في الوقت الحالي هو أني قمت بتثبيت نسخة Windows 7 Professional على الحاسوب ثم قمت بإستخدام برنامج VMWare وبعدها أنشئت Virtual Machine بنسخة Windows 8 ثم قمت بتحميل Windows Phone SDK. كل شيئ كان يعمل بشكل رائع !

يمكنك مشاهدة هذا الشرح لتوضيح كيف يمكنك تثبيت Windows Phone SDK على Virtual Machine

أعجبتني الفكرة فقمت بتثبيت نسخة إضافية من Windows XP لوجود بعض البرامج التي أحتاجها في العمل مثل Sound Recorder و Hyper Terminal. برنامج Sound Recorder في النسخ الحديثة لا يقوم بتخصيص ملفات الصوت بشكل جيد فكلها تصدر بصيغة "wma" وأنا أريدها بصيغة "wav" ضمن مواصفات معينة.

وأيضا لا أنسى أن أقول أني قمت بأخذ نسخة أحتياطية لكل Virtual Machine حتى لا أضطر لاحقا لإعادة التثبيت من جديد, يمكنكم فعل ذلك أيضا.

عن محمد جمال

مهندس حاسوب ومطور برمجيات, أعمل Freelancer في تطوير تطبيقات الويب من خلال ASP.NET منذ عام 2007 قمت بإنشاء عدة مشاريع في مجالات مختلفة (المتحكمات الدقيقة, الأنظمة المضمنة, الروبوت, برامج سطح المكتب, أنظمة قواعد البيانات) ومن هواياتي الخط العربي

subscribe

إعلان
إعلان

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

26-12-2013 Networking
إعلان

 

خدمة توصيل المحتوى "CDN" التي عادة ما تستخدمها الشركات الضخمة والتي تملك عددا لا بأس به من الزوار والمستخدمين لخدماتها الإلكترونية تحرص كل الحرص على إبقاء الخدمة متاحة بشكل دائم مع إمكانية الوصول لها بسرعة كبيرة من خلال إستخدام خدمة CDN التي تقوم على مجموعة من الخوادم الموزعة "Distributed Servers" على مناطق جغرافية متعددة وكل خادم في منطقة ما يحتوي على بعض من محتويات الخادم الأصلي "Origin Content Provider" مثل Static Files وفي بعض الأحيان يتم عمل Cache لمعظم محتوى الموقع ويتم تحديثه بشكل مستمر.

لن أخصص حديثي هنا للتكلم حول كيفية عمل CDN وما هي الملفات التي يتم حفظها فقد أكتفيت بوضع فيديو توضيحي في الأعلى ليعطي فكرة عامة عن شبكات توصيل المحتوى, حاليا سأحاول التحدث عن مبدأ DNS-based load balancing والذي يقوم بتوزيع الطلبات من المستخدمين إلى أقرب خادم وهو الأسلوب المستخدم في إعادة توجيه المستخدمين داخل CDNs.

DNS-Based Load Balancing

عند طلبك لموقع معين وليكن على سبيل المثال jemo.me وخادمه الأصلي في الولايات المتحدة, وهو متوفر بخدمة توصيل المحتوى ومحتوياته موجودة على مجموعة من الخوادم حول العالم, فإذا قمت بالدخول إليه من الأردن كيف سيتم تحويلك إلى خادم الشرق الأوسط "الأقرب" بدل من الذهاب إلى الخادم الرئيسي "الولايات المتحدة" ؟

من المعروف أن لكل موقع IP Address خاص به يمكن استخدامه عوضا عن اسم الموقع ويكون مخزن داخل DNS Server تابع لشركة الإستضافة التي تم شراء المساحة منها وعادة لا يتوافر في مكان اخر بإستثناء Local DNS Servers التابعة لمزودي خدمة الإنترنت أو غيرهم ولفترة محدودة - "Cached".

عند قيامك بربط المساحة الخاصة بك مع اسم الموقع "Domain Name" يجب عليك تعبئة حقل Name Server في لوحة التحكم الخاصة باسم الموقع "Domain Name Panel" بالبيانات التي تزودك بها شركة الإستضافة وهي عنوان الخادم "DNS Server" الذي يحتوي على IP Address الخاص بموقعك وعادة ما يكون بالشكل التالي : 

ns1.hostingcompany.com

ns2.hostingcompany.com

في الغالب يكون هناك أكثر من DNS Servers لدى شركة الإستضافة وعادة ما يكون هناك خادمان, أحدهما رئيسي "Primary" والاخر ثانوي "Secondary" وبداخلهم نفس المحتوى ولكن لغايات الاحتياط في حال تعطل أحدهم يبقى هناك اخر.

ما الذي يحدث تحديدا ؟

  • تقوم بداية بكتابة موقع الإنترنت على Address Bar داخل المتصفح الخاص.
  • يتم البحث عن IP Address الخاص به في الكاش الخاصه بالمتصفح.
  • إذا لم يكن موجودا يتم البحث عنه في ملف hosts بالنظام نفسه.
  • إذا لم يكن موجودا يتم إرسال طلب إلى Local DNS Server بإسم الموقع المطلوب للحصول على IP Address الخاص به, فإذا كان محفوظا داخل Local DNS Server فيتم إرساله إلى المتصفح.
  • إذا لم يكن موجودا يتم إرسال طلب إلى Root Servers للإستعلام عن المكان الذي يمكن أن يجد به من يعرف IP Address لهذا العنوان.
  • يقوم Root Server بإرساله إلى Namespace خاصة بإمتداد الموقع المطلوب, فإذا كان الموقع com يقوم بإرساله إلى com Namespace.
  • عند الذهاب إليها يتم إعطاءه عنوان DNS Server الذي سيجد بداخله IP Address وهو نفسه الذي تم وضعة داخل لوحة تحكم اسم الموقع.
  • في المثال السابق كان العنوان ns1.hostingcompany.com ليذهب إليه, وبعدها يقوم DNS Server بإرسال IP الخاص بالموقع إلى Local DNS Server ليقوم بإرجاعها إلى المتصفح.

 

ما الذي يحدث عند إستخدام CDN ؟

  • تقوم بداية بكتابة موقع الإنترنت على Address Bar داخل المتصفح الخاص.
  • يتم البحث عن IP Address الخاص به في الكاش الخاصه بالمتصفح.
  • إذا لم يكن موجودا يتم البحث عنه في ملف hosts بالنظام نفسه.
  • إذا لم يكن موجودا يتم إرسال طلب إلى Local DNS Server بإسم الموقع المطلوب للحصول على IP Address الخاص به, فإذا كان محفوظا داخل Local DNS Server فيتم إرساله إلى المتصفح.
  • إذا لم يكن موجودا يتم إرسال طلب إلى Root Servers للإستعلام عن المكان الذي يمكن أن يجد به من يعرف IP Address لهذا العنوان.
  • يقوم Root Server بإرساله إلى Namespace خاصة بإمتداد الموقع المطلوب, فإذا كان الموقع com يقوم بإرساله إلى com Namespace.
  • عند الذهاب إليها يتم إعطاءه عنوان DNS Server الذي سيجد بداخله IP Address وهو نفسه الذي تم وضعة داخل لوحة تحكم اسم الموقع.
  • في المثال السابق كان العنوان ns1.hostingcompany.com ليذهب إليه, وبعدها يقوم DNS Server "بعمل حسابات خاصة معتمدا على موقع Local DNS Server الجغرافي ليقوم بعدها بإرسال IP Address لأقرب خادم على Local DNS Server الذي قام بالإستعلام عن الموقع" لتعود إلى Local DNS Server ثم يقوم بإرجاعها إلى المتصفح.

الذي يحدث تماما مشابه لما حدث سابقا بإستثناء خطوة واحدة فقط, فعند سؤال DNS Server عن عنوان الموقع يقوم أولا بعمل تقييم لموقعك الجغرافي اعتمادا على موقع Local DNS Server, فمن الطبيعي أن يكون مزود الأسماء المحلي الذي قمت بالإستعلام من خلاله قريب من منطقتك وهو ما يحدث غالبا وهذا ما يعتمد عليه مزودي شبكات توصيل المحتوى, وبناء عليه فيقوم بتزويدك بـ IP Address لخادم قريب منك, وعلى ذلك فستكون إستجابة DNS Server متغيرة تبعا لموقعك الجغرافي, فالعنوان الذي يقوم بتزويده لك في حال كنت في بريطانيا على سبيل المثال سيكون مختلفا عن العنوان في حال متصلا من الهند, وعليه قس.

في حال كان Local DNS Server يبعد عنك أكثر من خادم المحتوى الأصلي, فكيف سيتم معالجة مثل هذه الطلبات ؟

من الجدير بالذكر أن أي خادم داخل شبكة توصيل المحتوى يقوم بعمل تحديد للمدة بينة وبين المستخدم قبل البدء بالإستجابة على الطلبات من خلال إرسال بيانات واستقبالها وقياس الوقت المستغرق لهذه العملية "RTT", فإن كان ضمن قيمة معينه فيقوم الخادم بإرسال البيانات, وإذا كانت القيمة أكبر من المسموح بها فيتم إتخاذ إجراء خاص بخصوص هذه المسألة من خلال إرسال طلب خاص إلى DNS Server تحتوي على معلومات المستخدم ليتم تحويله إلى أقرب خادم.

الدكتور زكريا القضاة من جامعة اليرموك-كلية الحجاوي للهندسة التكنولوجية في قسم هندسة الحاسوب حصل على براءة إختراع في مجال CDNs من خلال عمل Routing للمستخدم إلى أقرب خادم مستخدما IP Address حقيقي للمستخدم عوضا عن إستخدام Local DNS Server لتحديد موقع المستخدم بشكل تقريبي, رابط الخبر


المعلومات التي قمت بكتابتها في الأعلى حلصت عليها من خلال قراءة مجموعة من المقالات تتحدث حول هذا الموضوع ولم أجد اي تناقض فيما بينها, فإن كانت لديك معلومة تناقض ما ورد في الأعلى أرجو أن يتم وضعها هنا ليتم التحقق من صحتها وتضمينها في هذه المقالة.

https://blogs.akamai.com/2013/03/intelligent-user-mapping-in-the-cloud.html

عن محمد جمال

مهندس حاسوب ومطور برمجيات, أعمل Freelancer في تطوير تطبيقات الويب من خلال ASP.NET منذ عام 2007 قمت بإنشاء عدة مشاريع في مجالات مختلفة (المتحكمات الدقيقة, الأنظمة المضمنة, الروبوت, برامج سطح المكتب, أنظمة قواعد البيانات) ومن هواياتي الخط العربي

subscribe

إعلان
إعلان

حصلت على رقم لتتبع الشحنة التي تحمل ما قمت بشراؤه عبر الإنترنت

19-12-2013 Blogging
إعلان

قمت بشراء مجموعة من الأدوات الإلكترونية المتعلقة ببعض المشاريع من خلال متجر microcontrollershop, مؤخرا تم تزويدي برقم لتتبع الشحنة على عكس متجر SparkFun الذي زودني برقم الحقيبة التي تحمل ما قمت بشراؤه, وهذا ما اراه من خلال موقع usps.

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

عن محمد جمال

مهندس حاسوب ومطور برمجيات, أعمل Freelancer في تطوير تطبيقات الويب من خلال ASP.NET منذ عام 2007 قمت بإنشاء عدة مشاريع في مجالات مختلفة (المتحكمات الدقيقة, الأنظمة المضمنة, الروبوت, برامج سطح المكتب, أنظمة قواعد البيانات) ومن هواياتي الخط العربي

subscribe

إعلان
إعلان

تنويه : الأراء في هذا الموقع شخصية ولا تبت لأحد بصلة تحت أي حال من الأحوال