web-dev-qa-db-ja.com

このネットワークソケットは何を使用していますか?

NTP=を使用してマシンの時刻を更新しようとしていますが、エラーが発生します:

Host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

「ソケットは使用中です」というエラーはどういう意味ですか?このソケットを使用しているものを確認するにはどうすればよいですか?

これは私のCentOS 4.xシステムで起こりますが、FreeBSD 7.x、Ubuntu 10.04およびSolaris 10でも見られます。

18

できるよ

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

すべてのリスニングポートを確認するには、ntpdが実行されているドーナツにドルをかけます。

service ntpd status

また、「使用中のソケットとは」とはどういう意味ですか?いくつかのしわを滑らかにするために私が許されることができる場合(そして非常に基本的な説明のために、これのほとんどの謝罪はあなたのための救済です)... TCP/IP(インターネットの言語)は各コンピュータがIPアドレスを持っていることを指定します、インターネット上でそのコンピュータを一意に識別します。さらに、接続可能な各IPアドレスには65,000の番号付きポートがあります。

Webサーバーに接続する場合は、ブラウザーでサイトを開きますが、その下の機構が実際にWebサーバーのIPのポート80に接続しています。 Webサーバーのデーモン(ポート80への接続をリッスンするプログラム)は、「ソケット」を使用してそのポートを開いたままにし、それ自体のために予約します。一度に同じポートを使用できるプログラムは1つだけです。

Ntpdを実行していたので、そのポートを使用していました。 「ntpdate」はそのポートにアクセスしようとしましたが、すでに開いたままになっているため、「ソケットはすでに使用されています」というエラーが発生しました。

編集
UDPも考慮するように変更

20
Matt Simmons

Netstatを使用して開いているソケットを探すこともできます-他のポスターが示唆しているように、lsofを使用するよりもはるかにクリーンです。このコマンドラインをルートとして試してください

netstat -lp -u -t

関連するPIDとプログラムを含む、すべてのリスニング接続を表示します。 -lパラメータはリスニング接続を指定するもので、-pはPID /名前を表示することを指定し、-tおよび-uはnetstatにTCPおよびUDP接続(IPv4およびIPv6)。

数値のポート名とホスト名を表示する場合(つまり、ホストの場合は解決されず、ポートの場合はサービス名に変換されない場合)、上記のコマンドラインに-nを追加できます。

編集:これはLinuxで動作します-BSDベースのボックスがないため、BSDでどのように動作するかわかりません。

10
B.R.

FreeBSDでは、lsofが機能しない場合に備えてsockstatを使用することもできます(たとえば、何らかの理由で/ dev/memがない仮想化システム)。 IPv4ソケットをリッスンしているすべてのプログラムのリストを取得するには:

sockstat -l4
2
diz

lsofを使用して、このソケットを使用しているアプリケーションを見つけることができます。

1
txwikinger

ルートとして、これを行います:

lsof | grep IPv4 | grep LISTEN

これにより、IPv4ソケットをリッスンしているすべてのプロセスが表示されます。 -bを追加して、lsofがブロックする可能性のあることを実行しないようにすることができます。その場合は、stderr/dev/nullにリダイレクトすることもできます。

1
kbyrd

FreeBSDでは-uスイッチを使用して、ntpdateが代わりに非特権ポートを使用するようにします。

お気に入り: ntpdate -v -b -u 0.freebsd.pool.ntp.org

使用する man ntpdate何を見るか-vおよび-bします。

0
Monti

OS X 10.9.5でこの3つの機能をいじる:

Sudo lsof | grep \ IPv | sort ; clear ; Sudo lsof -U ; clear ; Sudo netstat -a

0
Graham Perrin