it-swarm-eu.dev

Uměle vytvořte chybu časového limitu připojení

Měla jsem chybu v našem softwaru, která nastane, když dostanu časový limit připojení. Tyto chyby jsou velmi vzácné (obvykle když moje připojení spadne do naší interní sítě). Jak lze tento druh efektu generovat uměle, abych mohl testovat náš software? 

Pokud je to důležité, aplikace je napsána v jazyce C++/MFC pomocí tříd CAsyncSocket.

Upravit:

Snažil jsem se použít neexistujícího hostitele a dostanu chybu soketu:

WSAEINVAL (10022) Neplatný argument

Dalším pokusem bylo použít návrh { Alexander na připojení k jinému portu, např. 81 (na mém vlastním serveru). To fungovalo skvěle. Přesně stejné jako při výpadku spojení (60 sekund čekání, pak chyba). Děkuji!

246
Mark Ingram

Připojte se k existujícímu hostiteli, ale k portu, který je zablokován bránou firewall a který jednoduše upustí pakety TCP SYN. Například www.google.com:81.

261
Alexander

Připojte se k neřízené adrese IP, například 10.255.255.1.

391
emu

Pokud jste na unixovém počítači, můžete spustit port naslouchající pomocí netcat:

nc -l 8099

Poté upravte službu tak, aby volala cokoliv, co obvykle dělá tomuto portu, např. http: // localhost: 8099/some/sort/z/koncového bodu

Vaše služba pak otevře připojení a zapíše data, ale nikdy nedostane odpověď, a tak vám poskytne časový limit čtení (nikoli odmítnutí připojení) 

32
Tom Chamberlain

Následující adresa URL vždy poskytuje časový limit a kombinuje to nejlepší z odpovědí @Alexander a @ Emu výše:

http://example.com:81

Použití example.com:81 je vylepšením odpovědi Alexandra, protože example.com je rezervován standardem DNS, takže na rozdíl od google.com:81 bude vždy nedosažitelný, což se může změnit, pokud se na to Google cítí. Vzhledem k tomu, že example.com je definováno jako nedosažitelné, nebudete zaplavovat servery společnosti Google.

Řekl bych, že je to lepší než odpověď na emu, protože je to mnohem snazší si zapamatovat.

18
speedplane

Python REPL můžete použít k simulaci časového limitu při příjmu dat (tj. Po úspěšném navázání spojení). Není třeba nic jiného než standardní instalace Pythonu.

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

Nyní čeká na příchozí spojení. Připojte cokoliv, co chcete otestovat na localhost:9000. Když to uděláte, Python přijme spojení a accept() ho vrátí. Pokud neposíláte žádná data přes clientsocket, soket volajícího by měl během dalšího recv() vypršet časový limit.

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  

všechny tyto jsou non-rutinní. 

13
rajesh_kw

Chtěl bych upozornit každého na pathod

S konfigurací (převzatou z jejich příkladů) 200:[email protected]:dr získáte spojení, které náhodně klesne.

9
amenthes

Jak na softwarové řešení:

Nainstalujte server SSH na aplikační server. Poté pomocí tunelu soketu vytvořte propojení mezi vaším lokálním portem a vzdáleným portem na aplikačním serveru. K tomu můžete použít nástroje klienta ssh. Namísto toho se musí klientská aplikace připojit k namapovanému místnímu portu. Poté můžete tunel soketu přerušit a simulovat časový limit připojení. 

8
stoneboy

Pokud chcete použít aktivní spojení, můžete také použít http://httpbin.org/delay/# , kde # je čas, kdy má server čekat před odesláním odpovědi. Pokud je váš časový limit kratší než zpoždění ... by měl simulovat efekt. Úspěšně jsem ho použil s balíčkem požadavků na python.

Možná budete chtít změnit svůj požadavek, pokud odesíláte něco citlivého - netušíte, co se stane s daty, která jim byla odeslána.

4
RoHS4U

K dispozici jsou služby, které umožňují uměle vytvořit časové limity pro volání voláním rozhraní API, kde určíte, jak dlouho bude server trvat, než bude reagovat. Příkladem takové služby je časový limit serveru na serveru macgyver.

Pokud byste například chtěli otestovat požadavek, který trvá 15 vteřin, odpověděli byste jednoduše na žádost o příspěvek do rozhraní API macgyver.

JSON Payload:

{
    "timeout_length": 15000
}

Odpověď API (po 15 sekundách):

{
    "response": "ok"
}

Server Timeout program na macgyveru
https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u

2
Timothy Moody

Můžete nainstalovat ovladač Microsoft Loopback, který pro vás vytvoří samostatné rozhraní. Pak se na něj můžete připojit ke své službě (vlastnímu hostiteli). Pak v Síťových připojeních můžete takové rozhraní zakázat/povolit ...

1
Marcin Gil

Technika, kterou často používám k simulaci časového limitu náhodného připojení, je použití ssh lokálního přesměrování portů.

ssh -L 12345:realserver.com:80 localhost

To bude předávat provoz na localhost: 12345 to realserver.com:80 Pokud chcete, můžete si to udělat ve vlastním lokálním počítači.

ssh -L 12345:localhost:8080 localhost

Takže můžete nasměrovat svou aplikaci na váš localhost a vlastní port a provoz bude směrován do cílového portu Host:. Pak můžete vystoupit z tohoto Shell (můžete také potřebovat ctrl + c Shell po ukončení) a to zabije přesměrování, které způsobí, že vaše aplikace vidí ztrátu spojení.

1
jdi

Přestože není zcela jasné, který OP chce testovat: existuje rozdíl mezi pokusem o připojení k neexistujícímu hostiteli/portu a vypršením časového limitu již vytvořeného spojení. Chtěl bych jít s Robem a počkat, až bude fungovat spojení a pak vytáhnout kabel. Nebo - pro větší pohodlí - máte virtuální počítač pracující jako testovací server (s přemostěnou sítí) a po navázání spojení pouze deaktivovat virtuální síťové rozhraní.

1
Dirk Taggesell

Měla jsem problémy ve stejném duchu jako vy. Aby bylo možné otestovat chování softwaru, odpojil jsem síťový kabel ve vhodnou dobu. Musel jsem nastavit bod zlomu těsně předtím, než jsem chtěl odpojit kabel. 

Kdybych to dělal znovu, dal bych do síťového kabelu přepínač (normálně zavřené tlačítko Push one). 

Pokud fyzické odpojení způsobí jiné chování, můžete počítač připojit k levnému rozbočovači a přepnout přepínač I uvedený výše mezi rozbočovač a hlavní síť.

- EDIT - V mnoha případech budete potřebovat síťové připojení, dokud se nedostanete do určitého bodu ve vašem programu, pak se budete chtít odpojit pomocí jednoho z mnoha nabízených návrhů.

0
Brad Bruce

Nejjednodušší by bylo zrušit připojení pomocí CurrPorts .

Nicméně, aby jednotka testovala váš kód pro zpracování výjimek, možná byste měli zvážit abstrahování kódu síťového připojení a napsat pahýl, falešný nebo dekoratér, který vyvolá výjimky na vyžádání. Pak budete moci otestovat logiku zpracování chyb aplikace, aniž byste museli skutečně používat síť.

0
Matt Howells

Spousta dobrých odpovědí, ale nejčistší řešení se zdá být tato služba

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

Můžete nastavit dobu trvání časového limitu (až 230 sekund) a případný návratový kód.

0
AndyTheEntity

Pro mě bylo nejjednodušší přidávat statickou trasu na kancelářském směrovači založeném na cílové síti. Přesměrujte provoz pouze na některého hostitele, který nereaguje (např. Na váš počítač), a vyprší časový limit požadavku.

Nejlepší pro mě bylo, že statickou trasu lze spravovat přes webové rozhraní a snadno zapnout/vypnout.

0
Ivan Marjanovic

Zapojte síťový kabel do přepínače, který nemá žádné jiné připojení/kabely. To by mělo fungovat imho.

0
GHad

Existuje několik taktik, které jsem v minulosti používal k simulaci problémů se sítí;

  1. Vytáhněte síťový kabel
  2. Vypněte spínač (ideálně s přepínačem, který je připojen k počítači, který je stále napájen, takže stroj udržuje „síťové připojení“) mezi strojem a „cílovým“ strojem
  3. Spusťte software brány firewall na cílovém počítači, který tiše kape přijatá data

Jeden z těchto nápadů vám může poskytnout nějaké prostředky, jak uměle vytvořit scénář, který potřebujete

0
Rob

V závislosti na tom, jaký firewall software jste nainstalovali/k dispozici, měli byste být schopni blokovat odchozí port av závislosti na nastavení brány firewall by měl pouze zrušit paket požadavku na připojení. Žádný požadavek na připojení, žádné spojení, časový limit následuje. To by pravděpodobně fungovalo lépe, kdyby bylo implementováno na úrovni směrovače (mají tendenci klesat pakety namísto odesílání resetů, nebo co je ekvivalentní situaci), ale musí existovat softwarový balíček, který by také udělal trik.

0
Matthew Scharley