パソコンやモバイル端末を使って通信をしていると、目的のホストとつながらないことは多々あります。
使っているマシンが、自分のPCなら、そしてUnix系のOSなら、netstat の他、オプションの iftop などを使ってネットワークの状態を監視し続けることが出来ますので、応答しないホストが何でポートが何番であるかは簡単に見つけることが出来ます。
普段は困ることはないのですが、自分のPCではなくて、オプションのネットワークユーティリティも入っておらず入れることも出来ない他人のPCで通信障害が発生すると、本当に困ります。Windows10ならWSLが入っている可能性もありますが、本当に何にも入っていない!
こういう状況で通信エラーが出て、どのホストとの通信にエラーが出ているのかわからないと来た!
Windowsの標準コマンドだけでデバッグするとなると、netstat で SYN_SENTが出っぱなしになっているセッションを見つけるしかないのですが、netstat コマンドはコマンドを発行した時点のネットワークセッションを表示するものなので、問題があるセッションを見つけるのはタイミングが肝心。
Windows10のnetstat コマンドは、「netstat」「netstat -n」くらいしか使ったことがなく、今回のトラブルは困りました。しかしヘルプを見てみると、「intervalオプション」があるのを発見。
(-n オプションはスピードアップのために付けます。-n を付けないと、逐次 IPアドレス→ホスト名 の名前解決をしてしまうので、コマンドの表示が遅い!)
cmd.exe を開いて、以下のように「netstat -n 1」とすると、1秒ごとに netstat -n を実行してくれます。
>netstat -n 1 アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 TCP 192.168.1.61:52901 52.230.85.180:443 ESTABLISHED TCP 192.168.1.61:52922 52.175.28.154:443 ESTABLISHED TCP 192.168.1.61:53845 52.230.84.0:443 ESTABLISHED TCP 192.168.1.61:53867 52.229.172.155:443 ESTABLISHED アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 TCP 192.168.1.61:52901 52.230.85.180:443 ESTABLISHED TCP 192.168.1.61:52922 52.175.28.154:443 ESTABLISHED TCP 192.168.1.61:53845 52.230.84.0:443 ESTABLISHED TCP 192.168.1.61:53867 52.229.172.155:443 ESTABLISHED アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 TCP 192.168.1.61:52901 52.230.85.180:443 ESTABLISHED TCP 192.168.1.61:52922 52.175.28.154:443 ESTABLISHED TCP 192.168.1.61:53845 52.230.84.0:443 ESTABLISHED TCP 192.168.1.61:53867 52.229.172.155:443 ESTABLISHED ^C
コマンド操作と同時に画面をにらみ続けるのも大変なので、
netstat -n 1 > output.txt
でファイルに連続して書き込み、エラーが発生した状況を捉えたと感じたあとで、Ctrl-Cを入力してコマンドを停止。その後、メモ帳でoutput.txt を開いて怪しいセッションを見つけるという手順を何回か繰り返すと、今回は、何とか問題の原因を突き止めることが出来ました。