345

接続タイムアウトを受け取ったときに発生するバグがソフトウェアにありました。これらのエラーは非常にまれです (通常、内部ネットワークによって接続が切断された場合)。ソフトウェアをテストできるように、この種の効果を人為的に生成するにはどうすればよいですか?

それが重要な場合、アプリは CAsyncSocket クラスを使用して C++/MFC で作成されます。

編集:

存在しないホストを使用しようとしましたが、ソケット エラーが発生しました。

WSAEINVAL (10022) 引数が無効です

私の次の試みは、別のポート、たとえば 81 に接続するというAlexanderの提案を使用することでした (ただし、自分のサーバーでは)。それはうまくいきました。切断された接続とまったく同じです (60 秒待ってからエラー)。ありがとうございました!

4

21 に答える 21

484

10.255.255.1 などのルーティング不可能な IP アドレスに接続します。

于 2009-05-24T20:42:43.377 に答える
358

既存のホストに接続しますが、TCP SYN パケットをドロップするだけのファイアウォールによってブロックされているポートに接続します。たとえば、www.google.com:81 です。

于 2008-09-19T10:02:57.660 に答える
42

次の URL では常にタイムアウトが発生し、上記の @Alexander と @Emu の最良の回答が組み合わされています。

http://example.com:81

example.com:81example.comはDNS標準によって予約されているため、を使用することはアレクサンダーの回答の改善google.com:81です. また、example.comは到達不能と定義されているため、Google のサーバーをフラッディングすることはありません。

覚えやすいので、@emuの回答よりも改善されたと思います。

于 2016-11-07T06:45:10.217 に答える
18
  • 10.0.0.0
  • 10.255.255.255
  • 172.16.0.0
  • 172.31.255.255
  • 192.168.0.0
  • 192.168.255.255

これらはすべてルーティング不可能です。

于 2015-07-23T07:54:41.807 に答える
16

Python REPL を使用して、データの受信中 (つまり、接続が正常に確立された後) のタイムアウトをシミュレートできます。標準の Python インストールだけが必要です。

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。そうすると、Python は接続を受け入れ、accept()それを返します。を介してデータを送信しない限りclientsocket、呼び出し元のソケットは次の でタイムアウトするはずrecv()です。

于 2013-04-16T22:09:50.350 に答える
10

みんなの注意をmitmproxyに向けたいと思います。

(彼らの例から取られた)構成を200:b@100:dr使用すると、ランダムにドロップする接続が得られます。

于 2014-02-20T10:45:35.323 に答える
7

ソフトウェア ソリューションはどうでしょうか。

アプリケーション サーバーに SSH サーバーをインストールします。次に、ソケット トンネルを使用して、ローカル ポートとアプリケーション サーバーのリモート ポートの間にリンクを作成します。これには、ssh クライアント ツールを使用できます。代わりに、クライアント アプリケーションをマップされたローカル ポートに接続します。次に、ソケット トンネルを自由に中断して、接続タイムアウトをシミュレートできます。

于 2010-03-12T15:05:33.053 に答える
6

アクティブな接続を使用したい場合は、 http://httpbin.org/delay/#も使用できます。ここで # は、サーバーが応答を送信するまで待機する時間です。タイムアウトが遅延よりも短い限り...効果をシミュレートする必要があります。python requests パッケージで正常に使用できました。

機密性の高いものを送信している場合は、リクエストを変更することをお勧めします。送信されたデータがどうなるかわかりません。

于 2016-08-15T19:30:03.793 に答える
1

別のインターフェイスを作成する Microsoft Loopback ドライバーをインストールする場合があります。次に、自分のサービス (自分のホスト) に接続できます。次に、ネットワーク接続で、そのようなインターフェースを無効/有効にすることができます...

于 2008-09-19T10:10:40.950 に答える
1

OPがどちらをテストしたいかは完全には明らかではありませんが、存在しないホスト/ポートへの接続の試行と、すでに確立されている接続のタイムアウトには違いがあります。ロブと一緒に行き、接続が機能するまで待ってからケーブルを引きます。または、便宜上、仮想マシンをテスト サーバーとして (ブリッジ ネットワークを使用して) 動作させ、接続が確立されたら仮想ネットワーク インターフェイスを非アクティブ化します。

于 2008-09-19T13:20:35.240 に答える
0

私はあなたと同じように問題を抱えていました。ソフトウェアの動作をテストするために、適切なタイミングでネットワーク ケーブルを抜きました。ケーブルを抜く直前に、ブレークポイントを設定する必要がありました。

もう一度やり直すとしたら、ネットワーク ケーブルにスイッチ (通常は閉じている瞬間的な押しボタン) を配置します。

物理的な切断によって別の動作が発生する場合は、コンピューターを安価なハブに接続し、上記のスイッチをハブとメイン ネットワークの間に配置することができます。

-- 編集 -- 多くの場合、プログラムの特定のポイントに到達するまでネットワーク接続が機能している必要があります。その後、提供される多くの提案のいずれかを使用して切断する必要があります。

于 2008-09-19T10:09:43.680 に答える
0

最も簡単な方法は、CurrPortsを使用して接続を切断することです。

ただし、例外処理コードを単体テストするには、おそらくネットワーク接続コードを抽象化することを検討し、必要に応じて例外をスローするスタブ、モック、またはデコレーターを作成する必要があります。その後、ネットワークを実際に使用しなくても、アプリケーションのエラー処理ロジックをテストできます。

于 2008-09-19T10:10:20.420 に答える
0

ネットワークの問題をシミュレートするために、私が過去に使用した戦術がいくつかあります。

  1. ネットワークケーブルを引き抜く
  2. マシンと「ターゲット」マシンの間のスイッチをオフにします(理想的には、マシンが「ネットワーク接続」を維持するように、コンピューターが接続されているスイッチの電源が入っている状態で)
  3. ターゲット マシンでファイアウォール ソフトウェアを実行して、受信したデータをサイレントにドロップする

これらのアイデアの 1 つは、必要なシナリオを人為的に生成する手段を提供する可能性があります。

于 2008-09-19T10:03:27.517 に答える
0

インストール/利用可能なファイアウォール ソフトウェアに応じて、発信ポートをブロックできるはずです。また、ファイアウォールの設定方法によっては、接続要求パケットをドロップする必要があります。接続要求なし、接続なし、タイムアウトが発生します。これはおそらくルーターレベルで実装された場合によりうまく機能します (リセットを送信する代わりにパケットをドロップする傾向があるか、状況に応じて同等のものを送信する傾向があります) が、トリックを実行するソフトウェアパッケージも存在するはずです.

于 2008-09-19T10:03:38.517 に答える
0

For me easiest way was adding static route on office router based on destination network. Just route traffic to some unresponsive host (e.g. your computer) and you will get request timeout.

Best thing for me was that static route can be managed over web interface and enabled/disabled easily.

于 2016-08-11T18:40:15.913 に答える
-1

外部からは利用できない可能性のあるポート (たとえば 200) で、よく知られた Web サイトの 1 つに接続を試みることができます。ほとんどのファイアウォールは DROP モードで動作し、タイムアウトをシミュレートします。

于 2008-09-19T10:09:57.363 に答える
-2

他の接続/ケーブルがないスイッチにネットワーク ケーブルを差し込みます。それはうまくいくはずです。

于 2008-09-19T10:00:33.033 に答える