カーネル2.6.24-23-serverおよびnetstatを備えたubuntu/hardyサーバーがあります。
# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)
問題は、netstat -ntap
の出力にPIDもプログラム名も表示されないESTABLISHED接続がたくさんあることです。 Netstatがルートから呼び出されました。chroot、grsecurity、またはこのようなものはありません(または、私はそう言われました:)。
何が悪いのかについて何か考えはありますか?
更新
lsof -n -i
は問題なく動作し、接続のpid /プロセス名を表示します。
これは、NFSのようなカーネルプロセスで発生しますが、通常のアプリでも時々発生します。RHEL5の動作は同じです。
# netstat -taupen | grep 30715
tcp 0 0 0.0.0.0:30715 0.0.0.0:* LISTEN 66558 81467710 -
一方、lsofは適切に単語を書くことに注意してください。
# lsof -i:30715
AppName 1598 useracct 78u IPv4 81467710 TCP *:30715 (LISTEN)
198_141:~ # netstat -anp|grep 33000
tcp 0 0 0.0.0.0:53000 0.0.0.0:* LISTEN -
198_141:~ # lsof -i:33000
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
vsftpd 28147 root 3u IPv4 4089990174 TCP *:33000 (LISTEN)
198_141:~ # id
uid=0(root) gid=100(users) groups=16(dialout),100(users)
198_141:~ #
私のオニオンでは、2つの状況が考えられます。
1)通常の特権ユーザーexcute "netstat"はrootによって起動されたプロセスを見ることができません
2)一部のプロセスはカーネルで実行されます
私は同じ動作をしており、netstatの動作が変更された可能性があると思います。たとえば、 'wget'のポートとプログラムは表示されますが、Apache PHPプロセス)は表示されません。
回避策:代わりにlsofを使用するようにスクリプトを書き直しました(上記のヒントを参照)
確立された接続の場合、これは、NFSやDRBDなどのカーネル空間から開始された接続でのみ発生します。明らかに、接続を待っていると、その下でプロセスが停止する可能性があります。特定の接続の原因を特定できない場合は、出力を貼り付ければ、誰かがそれを教えてくれます。
最近、ubuntu 18.04 LTS(netstatは同じバージョンのnetstat 1.42(2001-04-15))で同じ質問に遭遇したため、ここに到着します。 net-toolsのソースコードを閲覧した後、それを見つけるかもしれません。
Netstatソースコード:
/ proc内のすべてのプロセスフォルダーが反復され、/ proc // fdディレクトリ内の各fdがチェックされて、ソケットiノードからpid/prognameへのマップが作成されます。
次に、/ proc/net/tcpがチェックされ、tcp_info関数によって、ソケットのiノードを含むtcpソケット情報が取得されます。
tcpソケット情報を出力するとき、pid/prognameは、ソケットiノードを介してステップ1でマップから照会されます。何も見つからない場合、「-」が出力されます。
マップの構築後にソケットが作成された場合、pid/prognameはマップ内で見つかりません。