1. ホーム
  2. networking

[解決済み】WindowsのコマンドラインからTCPとUDPのポートを閉じる方法

2022-04-12 02:54:29

質問

Windowsのコマンドラインを使用して、単一の接続のためにTCPまたはUDPソケットを閉じる方法を知っている人はいますか?

この件についてググってみると、何人かの人が同じことを聞いているのを見かけました。しかし、その回答は、ポートを監視する方法に焦点を当てたnetstatやnetshコマンドのマニュアルページのように見えました。私は、ポートを監視する方法についての回答は求めていません(私はすでにこれをやっています)。私はそれらを閉じたり殺したりしたいのです。

EDIT、わかりやすくするために。私のサーバーがTCPポート80をリッスンしているとします。クライアントが接続を行い、そのためにポート56789が割り当てられたとします。そして、この接続が望ましくないものであることがわかりました(たとえば、このユーザーは悪いことをしているので、やめるように頼んだのですが、途中で接続が切れなかったのです)。通常であれば、ファイアウォールを追加して対処するのですが、これには時間がかかり、緊急事態に陥ってしまいました。接続を所有するプロセスを殺すことは、サーバーをダウンさせてしまうので、ここでは本当に悪い考えです(この1つの接続を選択的かつ一時的に落としたいだけなのに、すべてのユーザーが機能を失ってしまうのです)。

解決方法は?

はい、これは可能です。ソケットを閉じるには、そのソケットを所有している現在のプロセスである必要はないのです。リモートマシン、ネットワークカード、ネットワークケーブル、OSのすべてがソケットをクローズさせることができると考えてみてください。

また、FiddlerやDesktop VPNソフトウェアがネットワークスタックに挿入し、すべてのトラフィックを表示したり、すべてのトラフィックを迂回させることができることも考えてみてください。

つまり、Windowsが直接これを可能にするAPIを提供するか、誰かがVPNやFiddlerのように動作するプログラムを書き、それを通過するソケットを閉じる方法を提供する必要があるのです。

少なくとも1つのプログラム( カーポート 今日、CurrPortsが起動する前に起動したプロセス上の特定のソケットを閉じる目的で使用しました。これを行うには、もちろん管理者として実行する必要があります。

なお、あるポートでプログラムをリッスンしないようにすることは、おそらく簡単にはできませんが(まあ、可能ですが、その機能をファイアウォールと呼んでいます...)、ここではそれを質問されていないように思います。質問は、「プログラムがリッスンしているポートへのアクティブな接続(ソケット)を選択的に閉じるにはどうすればよいですか」というものだと思います。 質問の文言は、望ましくない受信クライアント接続のポート番号が指定され、それが "port" と言及されているので、少しずれていますが、それがその1つのソケットへの言及であって、リスニングポートでないことは明らかです。