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


10

カーネル2.6.24-23-serverとnetstatを備えたubuntu / hardyサーバーがあります。

# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)

問題は、netstat -ntap出力にPIDもプログラム名も表示しない多くの確立された接続があることです。Netstatがルートから呼び出されました。chroot、grsecurity、またはこのようなものはありません(または、私はそう言われました:)。

何が悪いのかについての考え

更新

lsof -n -i 正常に動作し、接続のpid /プロセス名が表示されます。


2
rootで実行しますか、それともsudoで実行しますか?
Dom、

はい、ルート上で実行されました。sudoを介してルート上で実行されました。同じ効果。

netstat -ntap代わりにやっていなかったとnetstat ntap思いますか?
カイル・ブラント

私がnetstat -ntap書いたように、私は私がやっていたと確信しています。これは、manstatに従ってnetstatにオプションを指定する方法です。

付記-チェックしたところ、「-」なしで指定されたオプションがnetstatで認識されないようです。

回答:


4

これは、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)

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


1

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


これらはアプリケーションからデータベースへの接続であるため、これらはカーネルベースの接続ではありません。

netstat -atnp | grep ESTの出力?
ウォンブル

これが私の問題です-接続がpid /プログラム名の代わりにリストされ、「-」があります

3
そして、その解釈ではなく、実際に何が起こっているのかを見たいのです。
ウォンブル

環境の識別に使用できる名前が含まれているため、出力全体を表示することはできません。この特定のポートの行は次のようになります。「tcp 0 0 localhost:36949 localhost:6543 ESTABLISHED-」

1

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

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


Pascal:このコマンドはsudoを使用して実行しましたか、それともrootとして実行しましたか?
Stefan Lasiewski、2010年

0

ここ最近到着したのは、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はマップ内で見つかりません。

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