この質問にはすでに答えがあります。
私は自分自身のポートを開く(これらのポートのサーバーとして機能し、そのポートで待機する)、そして同じアプリケーションが他のアプリケーションによってバインドされたポートに接続する(これらのポートのクライアントとして機能する)アプリケーションをテストしています。
アプリケーションがどのポートを作成し、どのアプリケーションとポートに接続するかについて概要を知りたいと思います。
これどうやってするの?
この質問にはすでに答えがあります。
私は自分自身のポートを開く(これらのポートのサーバーとして機能し、そのポートで待機する)、そして同じアプリケーションが他のアプリケーションによってバインドされたポートに接続する(これらのポートのクライアントとして機能する)アプリケーションをテストしています。
アプリケーションがどのポートを作成し、どのアプリケーションとポートに接続するかについて概要を知りたいと思います。
これどうやってするの?
回答:
あなたが使用することができます netstat
このため。例を見てください。 ssh
):
netstat -putan | grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1725/sshd
tcp 0 0 1.2.3.4:45734 1.2.3.5:22 ESTABLISHED 2491/ssh
tcp6 0 0 :::22 :::* LISTEN 1725/sshd
説明:
私はよくパラメータを使います -putan
(覚えやすいですので)。
-p
:アプリケーション/プロセスのPIDを表示 -u
:show udp ports / connections -t
:TCPポート/接続の表示 -a
:リスニングソケットと非リスニングソケットの両方を表示 -n
:数値出力(ホスト名などのDNS検索をしない) 上記の出力では、sshデーモンプロセスがあることがわかります( sshd
)PID付き 1725
港で聞く 22
すべてのネットワークインタフェースで 0.0.0.0
) sshクライアントプロセス(PID)もあります 2491
)IPアドレスに接続 1.2.3.5
ポート番号 22
私のIPアドレスは 1.2.3.4
そして私の外部ポートは 45734
。接続が確立されたことがわかります。だから私は経由でログインしている ssh
。
これを行うことができる別のツールは lsof
:
# lsof -i -a -p 1981
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1981 root 3u IPv4 917 0t0 TCP 10.1.2.3:22 (LISTEN)
#
使用されるオプションは以下のとおりです。
-i
プロセスによって開かれたインターネットポートを印刷する -a
すべてのオプションをANDにする -p 1981
プロセス1981の出力を表示する -n
ホスト名の検索を禁止し、代わりにIPを表示する -P
サービス検索を禁止し、代わりにポート番号を表示する lsof
大きな出力から処理するよりも、チェックする処理を指定できるという利点があります。 netstat
システム上でより確実に利用可能ですが、 lsof
以前よりも標準的になりつつあります。
strace
@olivecoderが提案した解決策。
ss
からの実用性 iproute Linux用パッケージ
すでに良い答えがありますが、コマンドが実行された時点で開いているポートのみが一覧表示されます。
strace
アプリケーションの有効期間中に開かれた接続を監視するための適切なツールです。
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
出力には、UDP要求や開いているが閉じている接続などの追加情報が表示されます。