アプリケーションで使用されているポート[複製]


11

この質問にはすでに答えがあります。

私は自分自身のポートを開く(これらのポートのサーバーとして機能し、そのポートで待機する)、そして同じアプリケーションが他のアプリケーションによってバインドされたポートに接続する(これらのポートのクライアントとして機能する)アプリケーションをテストしています。

アプリケーションがどのポートを作成し、どのアプリケーションとポートに接続するかについて概要を知りたいと思います。

これどうやってするの?

回答:


17

あなたが使用することができます 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


ポート22で確立されたTCP接続は、認証が成功したことを示すものではありません。どちらの方向でも認証が行われる前に、TCPを確立する必要があります。
Puddingfox

@Puddingfoxはい、「そのポートに接続しています」と言う方が良いでしょうが、わかりやすくするために「ログインしています」と言ったのです。
chaos

1
ほら... `--putan ' 私はこの小さなスペルミスを直したいと思っています。
James Mertz

現代のものが利用可能なときになぜ時代遅れのユーティリティを使用するのですか? ss -lntp によって提供されるユーティリティです。 iproute2 スイート。
MariusMatutiae

7

これを行うことができる別のツールは 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 以前よりも標準的になりつつあります。


監視したいアプリケーションを起動する前にこのコマンドを実行したいのですが、アプリケーションを起動する前に取得するpidを設定できますか?
Baz

@Baz、起動時にアプリケーションを監視したい場合(たとえば、PIDを知っている前に)、 strace @olivecoderが提案した解決策。
gowenfawr


3

すでに良い答えがありますが、コマンドが実行された時点で開いているポートのみが一覧表示されます。

strace アプリケーションの有効期間中に開かれた接続を監視するための適切なツールです。

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

出力には、UDP要求や開いているが閉じている接続などの追加情報が表示されます。


0

ss -a4 | less

私はあなたがIPv4について話していると仮定しています...そうでなければ、あなたは前のコマンドの4を6に置き換えることができます。ディスプレイ内の名前を解決したくない場合は、パラメーターに-nを追加できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.