独自のポートを開く(これらのポートのサーバーとして機能するため、そのポートでリッスンする)アプリケーションと、同じアプリケーションが他のアプリケーションによってバインドされたポートに接続する(これらのポートのクライアントとして機能する)アプリケーションをテストしています。
アプリケーションが作成するポートと、アプリケーションが接続するアプリケーションとポートの概要を知りたいのですが。
これどうやってするの?
これにはnetstat
を使用できます。例を参照してください(私はssh
をgrepしました):
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
:udpポート/接続を表示します-t
:tcpポート/接続を表示します-a
:リスニングソケットと非リスニングソケットの両方を表示します-n
:数値出力(ホスト名などのDNSルックアップは実行しないでください)上記の出力では、すべてのネットワークインターフェイス(1725
)のポート22
でリッスンしているPID0.0.0.0
のsshデーモンプロセス(sshd
)があることがわかります。また、ポート番号2491
のIPアドレス1.2.3.5
に接続されたsshクライアントプロセス(PID 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
には、大きな出力からgrepする必要がなく、チェックするプロセスを指定できるという利点があります。 netstat
はシステム上でより確実に利用できますが、lsof
は以前よりも標準的になりつつあります。
ss
ユーティリティ iproute Linux用パッケージ
すでに良い答えはありますが、コマンドの実行時に開いているポートのみがリストされています。
strace
は、アプリケーションの有効期間中に開かれた接続を監視するための適切なツールです。
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
出力には、UDP要求や、開いているが閉じている接続などの追加情報が表示されます。
ss -a4 | less
IPv4について話していると思います...そうでない場合は、前のコマンドの4を6に置き換えることができます。-aパラメーターは、すべてのポート(リスニングおよび非リスニング)を表示します。表示内の名前を解決したくない場合は、パラメーターに-nを追加できます。