質問: windowsのコマンドラインでtcpおよびudpポートを閉じる方法 誰かがwindowsのコマンドラインを介して単一の接続のためにtcpまたはudpソケットを閉じる方法を知っていますか?これについてグーグルで、私は何人かの人々が同じことを尋ねているのを見ました。しかし、答えはnetstatまたはnetshコマンドのマニュアルページのように見え、ポートの監視方法に焦点が当てられていました。それらを監視する方法についての回答は必要ありません(私はすでにこれをしています)。閉じたり殺したりしたいのですが。明確にするために、編集:私のサーバーがtcpポート80をリッスンしているとしましょう。クライアントが接続を行い、それにポート56789が割り当てられます。それから、この接続は望ましくないことがわかりました(たとえば、このユーザーは悪いことをしています。停止するように求めましたが、接続が途中で切断されることはありません)。通常、仕事をするためにファイアウォールを追加しますが、これにはしばらく時間がかかり、緊急事態にありました。接続を所有しているプロセスを強制終了すると、サーバーがダウンするため、ここでは本当に悪い考えです。
回答: ソケットを所有しているプロセスをシャットダウンせずにソケットを閉じることはできません。ソケットは、それらを開いたプロセスによって所有されています。 unix/linuxのプロセスid(pid)を調べます。以下のようにnetstatを使用してください。netstat -a -n -p -l それは次のように表示されます。active internet connections (servers and established) proto recv-q send-q local address foreign address state pid/program name tcp 0 0 127.0.0.1:25 0.0.0.0:* listen 1879/sendmail: acce tcp 0 0 0.0.0.0:21 0.0.0.0:* listen 1860/xinetd -aはすべてのソケットを表示し、-nはポート番号を示し、-pはpidを示します。-lは待機しているものだけを表示します(これは、後に続くものによってはオプションです)。あなたが欲しい本当の情報はpidです。これで、そのプロセスをシャットダウンすることができます。kill 1879 あなたがサービスをシャットダウンしている場合は、それを使用することをお勧めします:service sendmail stop キルは文字通りそのプロセスとそれが所有するすべての子供たちを殺します。 serviceコマンドを使用すると、init.dディレクトリに登録されているシャットダウンスクリプトが実行されます。サービスでkillを使用した場合は、正しくシャットダウンしなかったため、正しく起動しない可能性があります。サービス次第です。残念ながら、この点でmacはlinux/unixとは異なります。 netstatは使えません。 macに興味があるならこのチュートリアルを読んでください。 http://www.tech-recipes.com/rx/227/find-out-which-process-is-holding-which-socket-open/ そしてあなたがwindowsを使っているならば、プロセスを殺すためにtaskmanagerを使い、そしてサービスをシャットダウンするためにservices uiを使う。 pidを識別するために、linux/unixと同じように、windows上でnetstatを使用できます。 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/netstat.mspx?mfr=true