سؤال

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

إذا كان يهم التطبيق هو مكتوب في C++/MFC استخدام CAsyncSocket الطبقات.

تحرير:

لقد حاولت استخدام غير موجودة المضيف ، و أحصل على خطأ مأخذ توصيل:

WSAEINVAL (10022) وسيطة غير صالحة

التالي محاولة استخدام الكسندر'اقتراح من الاتصال إلى منفذ مختلف ، مثل81 (على الخادم الخاص بي على الرغم من).التي عملت كبيرة.بالضبط نفس كما انخفض اتصال (60 ثانية, ثم خطأ).شكرا لك!

هل كانت مفيدة؟

المحلول

الاتصال موجود المضيف ولكن إلى المنفذ الذي تم حظره من قبل جدار الحماية هذا مجرد قطرات TCP SYN الحزم.على سبيل المثال ، www.google.com:81.

نصائح أخرى

الاتصال غير قابل للتوجيه عنوان IP مثل 10.255.255.1.

إذا كنت على نظام يونكس ، يمكنك البدء في منفذ الاستماع باستخدام netcat:

nc -l 8099

ثم تعديل لك خدمة الاتصال أيا كان يفعل عادة إلى هذا المنفذ مثل http://localhost:8099/some/sort/of/endpoint

ثم الخدمة سيتم فتح الاتصال و كتابة البيانات ، ولكن لن تحصل على رد ، و لذلك سوف تعطيك قراءة الوقت (بدلا من رفض الاتصال)

URL التالي دائما يعطي مهلة ، و يجمع بين أفضل @ألكسندر @Emu إجابات أعلاه:

http://example.com:81

باستخدام example.com:81 تحسين الكسندر الجواب لأن example.com محجوز من قبل DNS القياسية ، لذلك سوف تكون دائما قابلة للوصول ، على عكس google.com:81, التي قد تتغير إذا كان Google يشعر مثل ذلك.أيضا, لأن example.com ويعرف أن تكون قابلة للوصول ، لن تكون الفيضانات خوادم Google.

انا اقول انها تحسنا @emu الجواب لأنه من الأسهل أن نتذكر.

يمكنك استخدام بيثون REPL لمحاكاة مهلة أثناء تلقي البيانات (أيبعد إنشاء اتصال بنجاح).سوى بيثون القياسية التثبيت هو مطلوب.

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        
>>> s.bind(('localhost', 9000))
>>> s.listen(0)
>>> (clientsocket, address) = s.accept()

الآن أنه ينتظر اتصال وارد.توصيل ما تريد اختبار localhost:9000.عندما قمت بذلك ، بيثون قبول الاتصال ، accept() سيعود ذلك.إلا إذا قمت بإرسال أي بيانات من خلال clientsocket, المتصل هو المقبس أن الوقت من خلال التالي recv().

  • 10.0.0.0
  • 10.255.255.255
  • 172.16.0.0
  • 172.31.255.255
  • 192.168.0.0
  • 192.168.255.255

كل هذه غير قابلة للتوجيه.

أود أن أذكر الجميع الاهتمام pathod

مع التكوين (تؤخذ من أمثلة) من 200:b@100:dr سوف تحصل على اتصال بشكل عشوائي قطرات.

ماذا عن البرامج الحل:

تثبيت خادم SSH على "ملقم التطبيق".ثم استخدام مأخذ النفق لإنشاء ارتباط بين المحلية ميناء بعد ميناء على "ملقم التطبيق".يمكنك استخدام عميل ssh أدوات للقيام بذلك.لديك تطبيق العميل الاتصال الخاصة بك تعيين منفذ محلي بدلا من ذلك.ثم يمكنك كسر مأخذ نفق في لمحاكاة مهلة الاتصال.

إذا كنت ترغب في استخدام اتصال نشط يمكنك أيضا استخدام http://httpbin.org/delay/#, حيث # هو الوقت الذي تريد الخادم الخاص بهم الانتظار قبل إرسال استجابة.طالما مهلة أقصر من التأخير ...يجب أن محاكاة تأثير.لقد استخدمت بنجاح مع بيثون طلبات الحزمة.

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

هناك الخدمات المتاحة التي تسمح لك لخلق مصطنع الأصل مهلة طريق استدعاء API حيث يمكنك تحديد كم من الوقت الخادم سوف تتخذ للرد.ملقم مهلة على macgyver هو مثال على مثل هذه الخدمة.

على سبيل المثال إذا أردت اختبار طلب أن يأخذ 15 ثانية للرد عليك ببساطة جعل طلب post إلى macgyver API.

سلمان الحمولة:

{
    "timeout_length": 15000
}

استجابة API (بعد 15 ثانية):

{
    "response": "ok"
}

ملقم مهلة البرنامج على macgyver
https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u

قد تثبيت Microsoft Loopback السائق أنه سيتم إنشاء واجهة منفصلة بالنسبة لك.ثم يمكنك الاتصال على خدمة لك (الخاصة المضيف).ثم في اتصالات الشبكة يمكنك تعطيل/تمكين هذه الواجهة...

على الرغم من أنه ليس من الواضح تماما أي واحد OP يريد أن الاختبار:هناك فرق بين محاولة اتصال غير موجودة المضيف/ميناء مهلة بالفعل تأسيس اتصال.وأود أن تذهب مع روب و انتظر حتى يتم الاتصال العامل ثم سحب الكابل.أو - الراحة - لديك جهاز ظاهري يعمل خادم اختبار (مع الشبكات الموصولة) فقط تعطيل الشبكة الافتراضية واجهة بمجرد تأسيس الاتصال.

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

ssh -L 12345:realserver.com:80 localhost

هذا توجيه حركة المرور على localhost:12345 إلى realserver.com:80 يمكنك حلقة هذا حول الخاصة بك في الجهاز المحلي وكذلك ، إذا كنت تريد:

ssh -L 12345:localhost:8080 localhost

حتى تتمكن من نقطة التطبيق الخاص بك في الخاص بك localhost و منفذ مخصص و المرور سوف تحصل على توجيهها إلى الهدف host:port.ثم يمكنك الخروج من هذه القوقعة (قد تحتاج أيضا إلى ctrl+c قذيفة بعد خروج) فإنه يقتل الشحن مما يسبب التطبيق الخاص بك على الخسارة.

توصيل كابل الشبكة إلى التبديل الذي لا يوجد لديه اتصال/الكابلات.التي يجب أن تعمل imho.

هناك بعض التكتيكات التي استخدمتها في الماضي لمحاكاة الشبكات القضايا ؛

  1. سحب كابل الشبكة
  2. إيقاف التبديل (من الناحية المثالية مع تبديل جهاز كمبيوتر موصول لا تزال تعمل حتى الجهاز يحافظ على انها "اتصال الشبكة") بين الجهاز الخاص بك "الهدف" آلة
  3. تشغيل برنامج جدار الحماية على الجهاز الهدف التي بصمت قطرات البيانات الواردة

واحدة من هذه الأفكار قد تعطيك بعض وسائل artifically توليد السيناريو تحتاج

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

أسهل شيء أن إسقاط الخاص بك باستخدام اتصال CurrPorts.

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

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

إذا كنت تفعل ذلك مرة أخرى, كنت وضعت مفتاح (عادة مغلقة لحظة الضغط على زر واحد) في كابل الشبكة.

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

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

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

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

الكثير من الإجابات ولكن أنظف الحل يبدو ، هذه الخدمة

http://httpstat.us/504?sleep=60000

يمكنك تكوين مهلة مدة (تصل إلى 230 ثانية) في نهاية المطاف رمز الإرجاع.

يمكنك محاولة الاتصال من المعروف مواقع ويب على المنفذ الذي قد لا تكون متاحة من الخارج - 200 على سبيل المثال.معظم الجدران النارية في وضع سوف محاكاة مهلة بالنسبة لك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top