web-dev-qa-db-ja.com

netstat -ntapが一部の接続のpid /プロセス名を表示しませんか?

カーネル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 /プロセス名を表示します。

10
user13185

これは、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)
4
mikemaccana
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)一部のプロセスはカーネルで実行されます

3
Yans Ruan

私は同じ動作をしており、netstatの動作が変更された可能性があると思います。たとえば、 'wget'のポートとプログラムは表示されますが、Apache PHPプロセス)は表示されません。

回避策:代わりにlsofを使用するようにスクリプトを書き直しました(上記のヒントを参照)

1
Pascal

確立された接続の場合、これは、NFSやDRBDなどのカーネル空間から開始された接続でのみ発生します。明らかに、接続を待っていると、その下でプロセスが停止する可能性があります。特定の接続の原因を特定できない場合は、出力を貼り付ければ、誰かがそれを教えてくれます。

1
womble

最近、ubuntu 18.04 LTS(netstatは同じバージョンのnetstat 1.42(2001-04-15))で同じ質問に遭遇したため、ここに到着します。 net-toolsのソースコードを閲覧した後、それを見つけるかもしれません。

Netstatソースコード:

  1. / proc内のすべてのプロセスフォルダーが反復され、/ proc // fdディレクトリ内の各fdがチェックされて、ソケットiノードからpid/prognameへのマップが作成されます。

  2. 次に、/ proc/net/tcpがチェックされ、tcp_info関数によって、ソケットのiノードを含むtcpソケット情報が取得されます。

  3. tcpソケット情報を出力するとき、pid/prognameは、ソケットiノードを介してステップ1でマップから照会されます。何も見つからない場合、「-」が出力されます。

マップの構築後にソケットが作成された場合、pid/prognameはマップ内で見つかりません。

0
zenkj