
独自のポートを開くアプリケーション (これらのポートのサーバーとして機能し、したがってそのポートでリッスンする) と、同じアプリケーションが他のアプリケーションによってバインドされたポートに接続するアプリケーション (これらのポートのクライアントとして機能) をテストしています。
アプリケーションがどのポートを作成し、どのアプリケーションとポートに接続するかについての概要を取得したいと思います。
これどうやってするの?
答え1
これには を使用できますnetstat
。例を参照してください ( を grep しました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
: UDP ポート/接続を表示-t
: TCP ポート/接続を表示-a
: リスニングソケットと非リスニングソケットの両方を表示する-n
: 数値出力 (ホスト名などの DNS 検索は行いません)
上記の出力では、すべてのネットワーク インターフェイス ( ) 上のポート をリッスンしているsshd
PID を持つ ssh デーモン プロセス ( )があることがわかります。また、ポート番号 のIP アドレス に接続されているssh クライアント プロセス (PID ) があります。私の IP アドレスは、外部ポートは です。接続が確立されていることがわかります。したがって、 経由でログインしています。1725
22
0.0.0.0
2491
1.2.3.5
22
1.2.3.4
45734
ssh
答え2
これを実行できる別のツールは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
ようになりました。
答え3
すでに適切な回答がありますが、コマンドの実行時に開いているポートのみがリストされます。
strace
アプリケーションの存続期間中に開かれた接続を監視するのに適したツールです。
strace -e socket,connect,close -f -o hipchat.strace.txt hipchat
出力には、UDP 要求や開かれたが閉じられた接続などの追加情報が表示されます。
答え4
ss -a4 | less
IPv4 について話していると思いますが、そうでない場合は、前のコマンドの 4 を 6 に置き換えてください。-a パラメータは、すべてのポート (リスニング ポートと非リスニング ポート) を表示します。表示で名前を解決したくない場合は、パラメータに -n を追加できます。