Dirbtinai sukurkite ryšio trukmės klaidą

Turėjau klaidos programinėje įrangoje, kuri atsiranda, kai gausiu ryšio trukmę. Šios klaidos yra labai retos (dažniausiai kai mano vidinis tinklas ištrina mano ryšį). Kaip galiu sukurti tokį efektą dirbtinai, kad galėtume patikrinti mūsų programinę įrangą?

Jei tai svarbu, programa yra parašyta C + + / MFC, naudojant CAsyncSocket klases.

Redaguoti:

Bandžiau naudoti neegzistuojančią prieglobą ir gaunu lizdo klaidą:

WSAEINVAL (10022) Neteisingas argumentas

Kitas bandymas buvo naudoti Aleksandro siūlymą prisijungti, pavyzdžiui, prie kito uosto. 81 (mano serveryje). Jis puikiai dirbo. Lygiai taip pat, kaip nutrauktas ryšys (60 sekundžių palaukti, tada - klaida). Ačiū!

205
19 сент. Mark Ingram 19 sept. 2008-09-19 12:57 '08, 12:57 2008-09-19 12:57
@ 20 atsakymų

Prisijunkite prie esamo serverio, bet į prievadą, užblokuotą užkardą, kuri tiesiog sumažina TCP SYN paketus. Pavyzdžiui, www.google.com:81.

206
19 сент. atsakymas pateikiamas Aleksandro 19 sep. 2008-09-19 13:02 '08 13:02 pm 2008-09-19 13:02

Ryšys su netiesioginiu IP adresu, pvz., 10.255.255.1.

border=0
352
24 мая '09 в 23:42 2009-05-24 23:42 atsakymą pateikė emu gegužės 24 d., 09:42, 2009-05-24 23:42

Jei esate „Unix“ įrenginyje, galite pradėti klausytis porte naudodami „netcat“:

 nc -l 8099 

Tada pakeiskite paslaugą, kad, pavyzdžiui, skambintumėte, ką jis paprastai atlieka su šiuo uostu. http: // localhost: 8099 / keletas / rūšiuoti / iš / baigtis

Tada jūsų paslauga atvers ryšį ir įrašys duomenis, bet niekada negaus atsakymo, todėl suteiks jums laiko perskaitymą (o ne atsisakymą)

17
26 мая '16 в 18:50 2016-05-26 18:50 atsakymą pateikė Tom Chamberlain, gegužės 26 d., 16 d., 18:50 2016-05-26 18:50

Galite naudoti „Python REPL“, kad imtumėte duomenų pertraukos laiką (ty sėkmingai užmezgant ryšį). Būtinas standartinis „Python“ įrenginys.

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

Dabar jis laukia gaunamo ryšio. Prijunkite viską, ką norite patikrinti „ localhost:9000 . Kai tai padarysite, „Python“ priims ryšį ir accept() . Jei per clientsocket duomenų, skambinančiojo lizdas turi atsijungti per kitą recv() .

15
17 апр. Hheimbuerger atsakymas balandžio 17 d 2013-04-17 01:09 '13, 01:09 2013-04-17 01:09

10,0,0,0, 10,255,255,255, 172,16,0,0, 172,31,255,255, 192,168,0,0, 192,168,255,255

visa tai nėra maršrutizuojama.

13
23 июля '15 в 10:54 2015-07-23 10:54 atsakymas pateikiamas rajesh_kw liepos 23 d., 15 val. 10:54 2015-07-23 10:54

Norėčiau atkreipti visų dėmesį į patodą

Su konfigūracija (paimta iš jų pavyzdžių) 200:b@100:dr gausite ryšį, kuris netyčia nukrenta.

9
20 февр. Atsakymą duoda amenthes 20 vasario mėn. 2014-02-20 13:45 '14, 13:45 2014-02-20 13:45

Kaip apie programinės įrangos sprendimą:

Į programų serverį įdiekite SSH serverį. Tada naudokite lizdo tunelį, kad sukurtumėte ryšį tarp vietinio prievado ir nuotolinio prievado, esančio programoje. Tam galite naudoti ssh kliento įrankius. Vietoj to paprašykite savo kliento programos prisijungti prie lokalizuoto vietinio uosto. Tada galite nutraukti lizdo tunelį, kad imituotumėte ryšio trukmę.

8
12 марта '10 в 18:05 2010-03-12 18:05 atsakymą pateikė „ Stoneboy “ kovo 12 d., 10 val. 18:05 2010-03-12 18:05

Šis URL visada suteikia laiko tarpą ir sujungia geriausius atsakymus @Alexander ir @Emu aukščiau:

http://example.com:81

Naudojant example.com:81 yra Aleksandro atsakymo patobulinimas, nes pavyzdys.lt yra rezervuojamas DNS standarto, todėl jis visuomet nebus pasiekiamas, skirtingai nuo „ google.com:81 , kuris gali keistis, jei „Google“ jį suvoks. Be to, kadangi „ example.com yra apibrėžiamas kaip nepasiekiamas, „Google“ serveriai nebus viršyti.

Sakyčiau, kad tai yra geresnis nei atsakymas į @emu, nes daug lengviau prisiminti.

7
07 нояб. atsakymas suteikiamas sparčiuoju 07 lapkričio. 2016-11-07 09:45 '16 at 9:45 am 2016-11-07 09:45

Jei norite naudoti aktyvų ryšį, galite naudoti ir http://httpbin.org/delay/# , kur # yra laikas, per kurį jūsų serveris turi laukti prieš išsiųsdamas atsakymą. Kol jūsų laikas yra trumpesnis nei vėlavimas ... turėtų imituoti efektą. Aš sėkmingai jį naudoju su „python“ užklausų paketu.

Galbūt norėsite pakeisti savo užklausą, jei atsiųsite kažką jautraus - jūs nežinote, kas vyksta su jai atsiųstais duomenimis.

3
15 авг. atsakymas pateikiamas RoHS4U 15 rug . 2016-08-15 22:30 „16 at 10:30“ 2016-08-15 22:30

Yra keletas taktikų, kurias anksčiau panaudojau, kad imituotų tinklo problemas;

  • Ištraukite tinklo kabelį
  • Išjunkite jungiklį (idealiu atveju naudodami jungiklį, prijungtą prie kompiuterio, kad jis vis dar veiktų, todėl įrenginys palaiko šį „tinklo ryšį“) tarp įrenginio ir „taikinio“ įrenginio.
  • Paleiskite užkardos programinę įrangą tiksliniame kompiuteryje, kuris automatiškai išjungia gautus duomenis.

Viena iš šių idėjų gali padėti jums sukurti dirbtinai reikalingą scenarijų.

1
19 сент. atsakymą pateikė Robas 19 sep. 2008-09-19 13:03 '08, 13:03 val. 2008-09-19 13:03

Galite įdiegti „Microsoft Loopback“ tvarkyklę, kuri jums sukurs atskirą sąsają. Tada galite prisijungti prie tam tikros paslaugos (savo kompiuterio). Tada „Network Connections“ galite išjungti / įjungti tokią sąsają ...

1
19 сент. atsakymą pateikė Marcin Gil 19 sep. 2008-09-19 13:10 '08, 13.10 val. 2008-09-19 13:10

Nors nėra visiškai aišku, kurią OP nori išbandyti: yra skirtumas tarp bandymo prisijungti prie neegzistuojančio priimančiojo / prievado ir jau užmegztos ryšio trukmės. Norėčiau eiti su Robu ir palaukti, kol prisijungs, ir tada ištraukite kabelį. Arba - patogumui - turėti virtualią mašiną, kuri veikia kaip bandymų serveris (su tilto tinklu) ir tik po to, kai užmezgamas ryšys, išjungiama virtualioji tinklo sąsaja.

1
19 сент. Atsakymas, kurį pateikė Dirk Taggesell rugsėjo 19 d 2008-09-19 16:20 '08 at 4:20 pm 2008-09-19 16:20

Yra prieinamos paslaugos, leidžiančios dirbtinai sukurti šaltinių trukmę pasitelkdami API, kurioje nurodote, kiek laiko serveris atsakys. Serverio trukmė Macgyver yra tokios paslaugos pavyzdys.

Pvz., Jei norite išbandyti užklausą, į kurią reikia atsakyti per 15 sekundžių, paprasčiausiai pateikite užklausą siųsti „macgyver“ API.

JSON naudingoji apkrova:

 { "timeout_length": 15000 } 

API atsakymas (po 15 sekundžių):

 { "response": "ok" } 

Serverio budėjimas „Macgyver“
https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u

1
12 сент. Timothy Moody atsakymas, pateiktas rugsėjo 12 d. 2016-09-12 02:22 '16 at 2:22 am 2016-09-12 02:22

Prijunkite tinklo kabelį prie jungiklio, kuriame nėra kitų jungčių / kabelių. Tai turėtų veikti imho.

0
19 сент. atsakymą pateikė GHad Sep 19 2008-09-19 13:00 '08 13:00 val. 2008-09-19 13:00

Man patinka naudoti „ CurrPorts“ tinklo ryšiams valdyti derinant. Kartais tik atjungus tinklo kabelį bus taip pat gerai (kaip pranešė kiti). Eik

0
19 сент. Atsakymą pateikė Mathiasas rugsėjo 19 d 2008-09-19 13:02 '08 13:02 pm 2008-09-19 13:02

Priklausomai nuo to, kuri ugniasienės programinė įranga yra įdiegta / prieinama, turite užblokuoti išeinantį prievadą ir, priklausomai nuo jūsų užkardos konfigūravimo, jis turėtų tiesiog atsisakyti prisijungimo užklausos paketo. Nėra ryšio užklausos, nereikia ryšio, laikas. Tai greičiausiai veiktų geriau, jei ji būtų įgyvendinta maršrutizatoriaus lygiu (paprastai jie paketų paketų, o ne siuntimo lašų siuntimui ar bet kokiam lygiavertiam šiai situacijai), tačiau turi būti programinės įrangos paketas, kuris taip pat tai padarytų triuką.

0
19 сент. Matthew Scharley atsakymas, pateiktas rugsėjo 19 d 2008-09-19 13:03 '08, 13:03 val. 2008-09-19 13:03

Turėjau problemų tuo pačiu būdu, kaip jūs. Norėdami patikrinti programinės įrangos elgesį, tiesiog atjungiau maitinimo kabelį tinkamu laiku. Turėjau nustatyti pertraukos tašką, kol norėjau atjungti kabelį.

Jei tai darau dar kartą, įjungčiau tinklo kabelį (paprastai uždarytas trumpojo laiko mygtukas).

Jei fizinis atjungimas sukelia kitokį elgesį, galite prijungti kompiuterį prie pigaus šakotuvo ir įdėti pirmiau minėtą jungiklį tarp šakotuvo ir pagrindinio tinklo.

- EDIT - daugeliu atvejų jums reikia tinklo ryšio, kad galėtumėte dirbti, kol pasieksite tam tikrą programos tašką, tada norite nutraukti naudojimąsi vienu iš siūlomų pasiūlymų.

0
19 сент. Atsakyti Brad Bruce Rgs 19 2008-09-19 13:09 '08 13:09 val. 2008-09-19 13:09

Man paprasčiausias būdas buvo pridėti statinį maršrutą biuro maršrutizatoriuje pagal paskirties tinklą. Tiesiog nukreipkite srautą į tam tikrą nereaguojantį kompiuterį (pvz., Kompiuterį) ir gausite užklausą dėl išjungimo.

Geriausias dalykas man buvo tas, kad statinis maršrutas gali būti valdomas per interneto sąsają ir yra lengva įjungti / išjungti.

0
11 авг. Ivan Marjanovic atsakymas 11 rug. 2016-08-11 21:40 '16 at 21:40 2016-08-11 21:40

Lengviausias būdas būtų atsisakyti ryšio naudojant „ CurrPorts“ .

Tačiau, norėdami išbandyti savo išimties tvarkymo kodą, galbūt turėtumėte apsvarstyti galimybę atsiimti tinklo ryšio kodą ir rašyti stubą, maketą ar dekoratorių, kuriant išimtis dėl paklausos. Tada galite išbandyti programos klaidų tvarkymo logiką, faktiškai nenaudodami tinklo.

-1
19 сент. Matt Howells atsakymas 2008-09-19 13:10 '08, 13.10 val. 2008-09-19 13:10

Galite pabandyti prisijungti prie vienos iš gerai žinomų svetainių porte, kuris gali būti neprieinamas iš išorės - pavyzdžiui, 200. Dauguma užkardų veikia DROP režimu ir imituos jums laiko trukmę.

-1
19 сент. Atsakymą pateikė Dmitrijus Khalatovas rugsėjo 19 d 2008-09-19 13:09 '08 13:09 val. 2008-09-19 13:09

Kiti klausimai apie žymes arba Užduoti klausimą