Sztucznie tworzy błąd limitu czasu połączenia

Miałem błąd w naszym oprogramowaniu, który pojawia się, gdy otrzymam limit czasu połączenia. Błędy te są bardzo rzadkie (zwykle, gdy moje połączenie zostanie utracone przez naszą sieć wewnętrzną). Jak mogę sztucznie wygenerować taki efekt, aby móc przetestować nasze oprogramowanie?

Jeśli ma to znaczenie aplikacja jest napisana w C++ / MFC przy użyciu klas CAsyncSocket.

Edit:

Próbowałem użyć nieistniejącego hosta i dostaję błąd gniazda:

WSAEINVAL (10022) Invalid argument

Moją kolejną próbą było użycie sugestii Alexandra, aby połączyć się z innym portem, np. 81 (na moim własnym serwerze). Zadziałało świetnie. Dokładnie tak samo jak zerwane połączenie(60 sekund oczekiwania, następnie błąd). Dziękuję!

Author: Kevin Burke, 2008-09-19

19 answers

Połącz się z istniejącym hostem, ale z portem, który jest blokowany przez firewall, który po prostu upuszcza pakiety TCP SYN. Na przykład, www.google.com:81.

 240
Author: Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:02:57

Połącz się z innym routowalnym adresem IP, takim jak 10.255.255.1.

 379
Author: emu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-24 20:42:43

Jeśli korzystasz z unix-a, możesz rozpocząć nasłuchiwanie portu używając netcata:

nc -l 8099

Następnie zmodyfikuj usługę tak, aby wywoływała to, co zwykle robi do tego portu np. http://localhost:8099/some/sort/of/endpoint

Następnie usługa otworzy połączenie i zapisze dane, ale nigdy nie otrzyma odpowiedzi, a więc da Ci czas odczytu (zamiast Odmowy połączenia)

 23
Author: Tom Chamberlain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-26 15:50:18

Można użyć REPL Pythona do symulowania limitu czasu podczas odbierania danych (tj. po pomyślnym nawiązaniu połączenia). Nic poza standardową instalacją Pythona nie jest potrzebne.

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

Teraz czeka na połączenie przychodzące. Podłącz do localhost:9000 cokolwiek chcesz przetestować. Gdy to zrobisz, Python zaakceptuje połączenie i accept() zwróci je. Jeśli nie wyślesz żadnych danych przez clientsocket, Gniazdo rozmówcy powinno wygasnąć podczas następnego recv().

 15
Author: Henrik Heimbuerger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 07:54:20

Poniższy adres URL zawsze podaje limit czasu i łączy najlepsze z powyższych odpowiedzi @Alexander i @ Emu:

Http://example.com:81

Użycie {[0] } jest poprawą odpowiedzi Aleksandra, ponieważ example.com jest zarezerwowany przez standard DNS, więc zawsze będzie nieosiągalny, w przeciwieństwie do google.com:81, co może się zmienić, jeśli Google tak poczuje. Ponadto, ponieważ example.com jest zdefiniowany jako nieosiągalny, nie będziesz zalewać serwerów Google.

Powiedziałbym, że to poprawa nad @ emu odpowiedź bo dużo łatwiej zapamiętać.

 14
Author: speedplane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-07 06:45:10

10.0.0.0 , 10.255.255.255, 172.16.0.0, 172.31.255.255, 192.168.0.0 ,192.168.255.255

Wszystkie te nie są routowalne.

 13
Author: rajesh_kw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 07:54:41

Chciałbym zwrócić uwagę wszystkich na pathod

Z konfiguracją (zaczerpniętą z ich przykładów) 200:b@100:dr otrzymasz połączenie, które losowo spada.

 9
Author: amenthes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 10:45:35

A może rozwiązanie programowe:

Zainstaluj serwer SSH na serwerze aplikacji. Następnie użyj tunelu gniazd, aby utworzyć łącze między portem lokalnym a Portem zdalnym na serwerze aplikacji. Możesz w tym celu użyć narzędzi klienta ssh. Niech aplikacja kliencka połączy się z zmapowanym portem lokalnym. Następnie możesz dowolnie przerwać tunel gniazda, aby symulować limit czasu połączenia.

 8
Author: stoneboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-12 15:05:33

Jeśli chcesz użyć aktywnego połączenia możesz również użyć http://httpbin.org/delay/ # , gdzie # to czas oczekiwania serwera przed wysłaniem odpowiedzi. Tak długo, jak Twój limit czasu jest krótszy niż opóźnienie... powinien symulować efekt. Z powodzeniem używałem go z pakietem Python requests.

Możesz zmodyfikować swoje żądanie, jeśli wysyłasz coś wrażliwego - nie masz pojęcia, co się stanie z danymi do nich wysłanymi.

 3
Author: RoHS4U,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-15 19:30:03

Jest kilka taktyk, których używałem w przeszłości, aby symulować problemy z siecią;

  1. wyciągnij kabel sieciowy
  2. Wyłącz przełącznik (najlepiej z przełącznikiem, do którego komputer jest podłączony, nadal jest zasilany, więc maszyna utrzymuje "połączenie sieciowe") między Twoją maszyną a" docelową " maszyną
  3. Uruchom oprogramowanie firewall na docelowej maszynie, które po cichu upuszcza odebrane dane

Jeden z tych pomysłów może dać ci jakiś sposób na sztuczne generowanie scenariusza, którego potrzebujesz

 1
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:03:27

Możesz zainstalować Microsoft loopback driver, który utworzy dla Ciebie osobny interfejs. Następnie możesz połączyć się z jakąś usługą (Twój własny host). Następnie w połączeniach sieciowych można wyłączyć / włączyć taki interfejs...

 1
Author: Marcin Gil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:10:40

Pomimo tego, nie jest do końca jasne, który z nich OP chce przetestować: Istnieje różnica między próbą połączenia z nieistniejącym hostem/Portem a limitem czasu już ustanowionego połączenia. Poszedłbym z Robem i poczekał, aż połączenie działa, a następnie pociągnął Kabel. Lub - dla wygody-mieć maszynę wirtualną pracującą jako serwer testowy (z siecią mostkową) i po prostu dezaktywującą wirtualny interfejs sieciowy po nawiązaniu połączenia.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 13:20:35

Dostępne są usługi, które pozwalają sztucznie tworzyć timeouty pochodzenia, wywołując API, w którym określasz, jak długo serwer będzie odpowiadał. Serwerowy Timeout na macgyverze jest przykładem takiej usługi.

Na przykład, jeśli chcesz przetestować żądanie, które zajmuje 15 sekund, aby odpowiedzieć, wystarczy wysłać żądanie post do macgyver API.

JSON Payload:

{
    "timeout_length": 15000
}

Odpowiedź API (po 15 sekundach):

{
    "response": "ok"
}

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

 1
Author: Timothy Moody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-11 23:22:14

Podłącz kabel sieciowy do przełącznika, który nie ma innych połączeń / kabli. To powinno zadziałać imho.

 0
Author: GHad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:00:33

W zależności od zainstalowanego/dostępnego oprogramowania firewall, powinieneś być w stanie zablokować Port wychodzący i w zależności od konfiguracji firewalla powinien po prostu upuścić pakiet żądania połączenia. Brak żądania połączenia, Brak połączenia, następuje limit czasu. To prawdopodobnie działa lepiej, jeśli został zaimplementowany na poziomie routera (mają tendencję do upuszczania pakietów zamiast wysyłania resetów, lub cokolwiek jest odpowiednikiem dla sytuacji), ale musi być pakiet oprogramowania, który zrobi sztuczka też.

 0
Author: Matthew Scharley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:03:38

Najprostszą rzeczą byłoby porzucenie połączenia za pomocą CurrPorts.

Jednak, aby przetestować kod obsługi wyjątków, być może powinieneś rozważyć abstrakcję kodu połączenia sieciowego i napisać wstęp, makietę lub dekorator, który wyświetla wyjątki na żądanie. Następnie będziesz mógł przetestować logikę obsługi błędów aplikacji bez konieczności korzystania z sieci.

 0
Author: Matt Howells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:10:20

Miałem takie same problemy jak ty. Aby przetestować zachowanie oprogramowania, po prostu odłączyłem kabel sieciowy w odpowiednim czasie. Musiałem ustawić punkt przerwania, zanim chciałem odłączyć kabel.

Gdybym robił to jeszcze raz, umieściłbym przełącznik (normalnie zamknięty przycisk chwilowy) w kablu sieciowym.

Jeśli fizyczne odłączenie powoduje inne zachowanie, można podłączyć komputer do taniego huba i umieścić przełącznik, o którym wspomniałem powyżej pomiędzy Twoim hubem a główną siecią.

-- edytuj -- W wielu przypadkach połączenie sieciowe będzie działać, dopóki nie dotrzesz do określonego punktu w programie, a następnie będziesz chciał odłączyć się za pomocą jednej z wielu oferowanych sugestii.

 0
Author: Brad Bruce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:55:37

Dla mnie najprostszym sposobem było dodanie statycznej trasy na biurowym routerze w oparciu o docelową sieć. Po prostu kieruj ruch do jakiegoś nie reagującego hosta (np. komputera), a otrzymasz limit czasu żądania.

Najlepsze dla mnie było to, że statyczna trasa może być zarządzana przez interfejs sieciowy i łatwo włączana/wyłączana.

 0
Author: Ivan Marjanovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 18:40:15

Możesz spróbować połączyć się z jedną ze znanych stron internetowych na porcie, który może nie być dostępny z zewnątrz - na przykład 200. Większość zapór działa w trybie upuszczania i symuluje limit czasu.

 -1
Author: Dmitry Khalatov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 10:09:57