サードパーティのアプリケーションが所有するポートをリリースしますか?

サードパーティのアプリケーションが所有するポートをリリースしますか?

誰かがリッスンしているサードパーティのアプリケーションが所有しているポートを解放する方法を尋ねました。アプリケーションがソケットを使用して特定のポートをリッスンしており、ルートがアプリケーションを終了せずにそのポートを回収しようとしているとします。私は答えることができませんでした。

ターミナルでポートハンドルを閉じるか、それを実行するために特定のAPI(ルートがC ++を作成して実行できる)を使用する方法はありますか?

ベストアンサー1

意図しないアプリケーションで開かれたファイル(ネットワークポートなど)を閉じる明確な方法はありません。

鼻の下にあるファイルを閉じる方法がありますが、アプリケーションが正しく反応しない可能性があります。崩壊して目的を達成する可能性が高いです。次のコマンドを使用して、リモートプロセスでシステムコールを実行できます。ptraceシステムコール。興味のあるファイル記述子を使用またはlsof検索します。netstat次に、お気に入りのデバッガを問題のプロセスに接続し、システムコールを実行close(または)します。shutdown

#!/bin/sh
# Usage: shutdown-in-process PID FD
gdb -n -pid "$1" -batch -x /dev/stdin <<EOF
call close($2)
detach
quit
EOF

環境へのインタフェースが内部データ構造と一致しなくなるため、アプリケーションがクラッシュする可能性が高いため、他のアプローチを検討してください。特に、他のアプリケーションがUDPまたはTCPポートをリッスンしたい場合は、ネットワーク層レベル(iptablesLinuxではpfctlBSDで...)からトラフィックを別のポートにリダイレクトできます。

おすすめ記事