it-swarm-tr.com

Yapay olarak bir bağlantı zaman aşımı hatası oluştur

Yazılımımızda, bir bağlantı zaman aşımı aldığımda oluşan bir hata oluştu. Bu hatalar çok nadir görülür (genellikle bağlantım iç ağımız tarafından kesildiğinde). Bu tür bir etkiyi yapay olarak nasıl üretebilirim, böylece yazılımımızı test edebilirim? 

Önemli ise, uygulama CAsyncSocket sınıfları kullanılarak C++/MFC dilinde yazılmıştır.

Düzenle:

Var olmayan bir Ana Bilgisayar kullanmayı denedim ve yuva hatasını alıyorum:

WSAEINVAL (10022) Geçersiz değişken

Bir sonraki denemem Alexander 'in farklı bir limana bağlanma önerisini kullanmaktı. 81 (kendi sunucumda olsa). Harika çalıştı. Tamamen kesik bağlantıyla aynı (60 saniye bekledikten sonra hata). Teşekkür ederim!

246
Mark Ingram

Mevcut bir Host cihazına, ancak TCP SYN paketlerini düşüren güvenlik duvarı tarafından engellenen bir bağlantı noktasına bağlayın. Örneğin, www.google.com:81.

261
Alexander

10.255.255.1 gibi yönlendirilemez bir IP adresine bağlanın.

391
emu

Bir unix makinesindeyseniz, netcat kullanarak dinleyen bir bağlantı noktası başlatabilirsiniz:

nc -l 8099

Ardından, hizmetinizi genellikle o bağlantı noktasına ne yaparsa yapsın; http: // localhost: 8099/bazı/sort///endpoint

Ardından, servisiniz bağlantıyı açacak ve veri yazacak, ancak hiçbir zaman bir yanıt alamayacak ve böylece size bir Okuma Zaman Aşımı verecek (Bağlantı Reddedilmeden) 

32
Tom Chamberlain

Aşağıdaki URL her zaman zaman aşımına uğrar ve yukarıdaki @Alexander ve @ Emu'nun en iyi yanıtlarını birleştirir:

http://example.com:81

example.com:81 kullanmak, Alexander'in cevabındaki bir gelişmedir, çünkü example.com, DNS standardına göre ayrılmıştır, bu nedenle, Google'ın istediği gibi değişebilecek olan google.com:81'dan farklı olarak, her zaman erişilmez olacaktır. Ayrıca, example.com erişilemez olarak tanımlandığından, Google sunucularını su basmayacaksınız.

@ Emu'nun cevabında bir gelişme olduğunu söyleyebilirim çünkü hatırlaması çok daha kolay.

18
speedplane

Veri alırken zaman aşımını benzetmek için Python REPL 'ı kullanabilirsiniz (örneğin, bağlantı başarıyla kurulduktan sonra). Standart bir Python kurulumundan başka bir şey gerekmiyor.

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()

Şimdi gelen bir bağlantıyı bekler. Test etmek istediğiniz her şeyi localhost:9000 adresine bağlayın. Bunu yaptığınızda, Python bağlantıyı kabul edecek ve accept() geri döndürecektir. clientsocket üzerinden herhangi bir veri göndermezseniz, arayanın soketi bir sonraki recv() sırasında zaman aşımına uğramalıdır.

16

10.0.0.0, 10.255.255.255, 172.16.0.0, 172.31.255.255, 192.168.0.0, 192.168.255.255  

bütün bunlar yönlendirilemez. 

13
rajesh_kw

Herkesin dikkatini patod ye dikkat çekmek isterim

200:[email protected]:dr bir yapılandırmasıyla (örneklerinden alınmış) rasgele açılan bir bağlantı elde edersiniz.

9
amenthes

Bir yazılım çözümüne ne dersiniz:

Uygulama sunucusuna SSH sunucusunu yükleyin. Ardından, yerel portunuzla uygulama sunucusundaki uzak port arasında bir bağlantı oluşturmak için soket tüneli kullanın. Bunu yapmak için ssh istemci araçlarını kullanabilirsiniz. İstemci uygulamanızın bunun yerine eşlenen yerel bağlantı noktasına bağlanmasını sağlayın. Ardından, bağlantı zaman aşımını simüle etmek için soket tüneli istediğiniz zaman kırabilirsiniz. 

8
stoneboy

Etkin bir bağlantı kullanmak istiyorsanız, http://httpbin.org/delay/# komutunu da kullanabilirsiniz, burada #, sunucularının yanıt göndermeden önce beklemelerini istediğiniz zamandır. Zaman aşımınız gecikmeden kısa olduğu sürece ... etkiyi simüle etmelidir. Python istekleri paketiyle başarıyla kullandım.

Hassas bir şey gönderiyorsanız isteğinizi değiştirmek isteyebilirsiniz - onlara gönderilen verilere ne olduğu hakkında hiçbir fikriniz yok.

4
RoHS4U

Sunucunun ne kadar sürede yanıt vereceğini belirleyeceğiniz bir API'yi arayarak Yapay olarak Origin zaman aşımları oluşturmanıza olanak sağlayan hizmetler vardır. Macgyver'da Sunucu Zaman Aşımı, böyle bir hizmete bir örnektir.

Örneğin, 15 saniye süren bir isteği test etmek istiyorsanız, yalnızca macgyver API'sine bir posta isteği gönderirsiniz.

JSON Yükü:

{
    "timeout_length": 15000
}

API Yanıtı (15 saniye sonra):

{
    "response": "ok"
}

Macgyver'da Sunucu Zaman Aşımı Programı
https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u

2
Timothy Moody

Sizin için ayrı bir arayüz oluşturacak olan Microsoft Loopback sürücüsünü yükleyebilirsiniz. Daha sonra bazı servislerinize (kendi Host cihazınıza) bağlanabilirsiniz. Ardından Ağ Bağlantıları'nda bu arayüzü devre dışı bırakabilir/etkinleştirebilirsiniz ...

1
Marcin Gil

Rasgele bir bağlantı zaman aşımını simüle etmek için sık sık kullandığım teknik, ssh yerel port iletmeyi kullanmaktır.

ssh -L 12345:realserver.com:80 localhost

Bu, localhost'taki trafiği iletir: 12345 - realserver.com:80 İsterseniz, bunu kendi yerel makinenizde de dolaşabilirsiniz:

ssh -L 12345:localhost:8080 localhost

Böylece uygulamanızı yerel ana makinenize ve özel bağlantı noktanıza yönlendirebilirsiniz; trafik hedef Ana bilgisayara: bağlantı noktasına yönlendirilir. Sonra bu Kabuktan çıkabilirsiniz (çıktıktan sonra Kabuk ctrl + c'ye gerek duyabilirsiniz) ve uygulamanızın bir bağlantı kaybını görmesine neden olan iletimi keser.

1
jdi

OP'nin hangisini test etmek istediği kesin olarak bilinmemekle birlikte, var olmayan bir Ana Bilgisayar/bağlantı noktasıyla bağlantı kurmaya çalışmak ve önceden kurulmuş bir bağlantı zaman aşımı arasında bir fark var. Rob ile gider ve bağlantı çalışana kadar beklerdim ve sonra kabloyu çekerdim. Veya - kolaylık sağlamak için - test sunucusu olarak çalışan bir sanal makineye sahip olun (köprülü ağ bağlantısı ile) ve bağlantı kurulduktan sonra yalnızca sanal ağ arayüzünü devre dışı bırakın.

1
Dirk Taggesell

Seninle aynı çizgide sorunlar yaşadım. Yazılım davranışını test etmek için sadece uygun zamanda ağ kablosunu çıkardım. Kabloyu çıkarmak istemeden hemen önce bir kırılma noktası ayarlamam gerekiyordu. 

Tekrar yapıyor olsaydım, bir ağ kablosuna bir anahtar (normalde kapalı anlık bir düğme bir tane) koyardım. 

Fiziksel bağlantı kesme işlemi farklı bir davranışa neden olursa, bilgisayarınızı ucuz bir hub'a bağlayabilir ve yukarıda bahsettiğim anahtarı hub'ınız ve ana ağ arasına koyabilirsiniz.

- EDIT -- Çoğu durumda, programınızdaki belirli bir noktaya ulaşana kadar çalışan ağ bağlantısına ihtiyacınız olacak, ardından, sunulan önerilerden birini kullanarak bağlantıyı kesmek isteyeceksiniz.

0
Brad Bruce

En kolay şey CurrPorts kullanarak bağlantınızı kesmek olacaktır.

Bununla birlikte, istisna işleme kodunuzu birim test etmek için, belki ağ bağlantı kodunuzu özetlemeyi düşünmelisiniz ve talep üzerine istisnalar atan bir saplama, alay veya dekoratör yazmalısınız. Ardından, uygulama hata işleme mantığını, ağı gerçekten kullanmak zorunda kalmadan test edebileceksiniz.

0
Matt Howells

Bol miktarda iyi cevap var ama en temiz çözüm gibi görünüyor bu hizmet

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

Zaman aşımı süresini (230 saniyeye kadar) ve olası dönüş kodunu yapılandırabilirsiniz.

0
AndyTheEntity

Benim için en kolay yol, hedef ağa bağlı olarak ofis yönlendiricisine statik yol eklemekti. Trafiği yanıt vermeyen bazı Ana Bilgisayarlara (örneğin bilgisayarınız) yönlendirmeniz yeterlidir; istek zaman aşımına uğrar.

Benim için en iyi şey statik yolun web arayüzü üzerinden yönetilip kolayca etkinleştirilip devre dışı bırakılabilmesiydi.

0
Ivan Marjanovic

Ağ kablonuzu, başka bağlantısı/kablosu olmayan bir anahtara takın. Bu işe yaramalı.

0
GHad

Geçmişte ağ oluşturma sorunlarını simüle etmek için kullandığım birkaç taktik var;

  1. Ağ kablosunu çıkarın
  2. Düğmeyi kapatın (ideal olarak, bilgisayarın hala bağlı olduğu anahtarla, makinenin "ağ bağlantısı" olmasını sağlamak için makinenin "hedef" makine arasında olması gerekir).
  3. Hedef makinede, alınan verileri sessizce bırakan bir güvenlik duvarı yazılımı çalıştırın.

Bu fikirlerden biri size ihtiyaç duyduğunuz senaryoyu yapay olarak yaratmanın bazı yollarını verebilir.

0
Rob

Hangi güvenlik duvarı yazılımını kurduğunuz/kullandığınıza bağlı olarak, giden bağlantı noktasını engelleyebilmeniz ve güvenlik duvarınızın nasıl kurulduğuna bağlı olarak, bağlantı isteği paketini bırakması gerekir. Bağlantı isteği yok, bağlantı yok, zaman aşımına uğradı. Yönlendirici düzeyinde gerçekleştirildiyse, bu muhtemelen daha iyi sonuç verir (sıfırlama göndermek yerine paketleri düşürme eğilimindedirler veya durumun karşılığı ne olursa olsun) ancak hile yapan bir yazılım paketi de vardır.

0
Matthew Scharley