netstat -tidak menampilkan pid / nama proses untuk beberapa koneksi?

10

Saya memiliki server ubuntu / hardy, dengan kernel 2.6.24-23-server dan netstat:

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

Masalahnya adalah bahwa kita memiliki banyak koneksi ESTABLISHED yang tidak menampilkan PID atau nama Program dalam netstat -ntapoutput. Netstat dipanggil dari root, tidak ada chroot, grsecurity, atau apapun seperti ini (atau begitulah yang saya katakan :).

Adakah yang tahu apa yang salah?

MEMPERBARUI

lsof -n -i berfungsi ok, dan menunjukkan pid / nama proses untuk koneksi.


sumber
2
Anda yakin menjalankannya sebagai root atau dengan sudo?
Dom
Ya, dijalankan di root, dan bahkan di root via sudo. efek yang sama.
Apakah Anda yakin tidak melakukan netstat -ntapbukan netstat ntap?
Kyle Brandt
Saya yakin saya lakukan netstat -ntap- seperti yang saya tulis. karena ini adalah cara opsi diberikan ke netstat sesuai dengan halaman manualnya.
Catatan tambahan - saya baru saja memeriksa dan sepertinya netstat tidak mengenali opsi yang diberikan tanpa "-".

Jawaban:

4

Ini akan terjadi dengan proses kernel seperti NFS, tetapi juga kadang-kadang terjadi dengan aplikasi reguler: RHEL 5 memiliki perilaku yang sama.

# netstat -taupen | grep 30715
tcp        0      0 0.0.0.0:30715           0.0.0.0:*               LISTEN      66558      81467710   - 

Perhatikan bahwa lsof, di sisi lain, kata-kata dengan benar:

# lsof -i:30715
AppName 1598 useracct   78u     IPv4           81467710                   TCP *:30715 (LISTEN)
mikemaccana
sumber
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:~ # 

menurut pendapat saya, mungkin ada dua situasi:

1) pengguna normal mengundurkan diri "netstat" tidak dapat melihat proses yang diluncurkan oleh root

2) beberapa proses berjalan di kernel

Yans Ruan
sumber
1

Untuk koneksi yang sudah ada, ini hanya boleh terjadi untuk koneksi yang diinisiasi dari ruang kernel, seperti NFS atau DRBD. Jelas menunggu koneksi bisa saja proses mati di bawahnya. Jika Anda tidak dapat mengetahui apa yang menyebabkan koneksi yang diberikan, tempel output dan seseorang dapat memberi tahu Anda apa itu koneksi.

womble
sumber
Ini jelas bukan koneksi berbasis kernel karena ini adalah koneksi ke database dari aplikasi.
Output dari netstat -atnp | grep EST?
womble
ini adalah apa masalah saya - koneksi didaftar oleh bukan pid / nama program yang saya miliki "-"
3
Dan saya ingin melihat apa yang sebenarnya terjadi, bukan interpretasinya.
womble
Saya tidak dapat menunjukkan kepada Anda seluruh hasil karena berisi nama yang dapat digunakan untuk mengidentifikasi lingkungan. garis untuk port khusus ini terlihat seperti ini: "tcp 0 0 localhost: 36949 localhost: 6543 ESTABLISHED -"
1

Saya memiliki perilaku yang sama dan dugaan saya adalah bahwa perilaku netstat mungkin telah berubah. Sebagai contoh saya melihat port dan program untuk 'wget', tetapi tidak untuk proses PHP Apache, yang lebih penting bagi saya.

Penanganan masalah: Saya menulis ulang skrip untuk menggunakan lsof (lihat petunjuk di atas)


sumber
Pascal: Apakah Anda menjalankan perintah ini dengan sudo atau sebagai root?
Stefan Lasiewski
0

Tiba di sini karena hari ini saya menemukan pertanyaan yang sama di ubuntu 18,04 LTS (netstat adalah versi yang sama netstat 1,42 (2001-04-15)), anehnya masih tidak ada jawaban setelah 8 tahun. Setelah meramban kode sumber net-tools, saya dapat menemukannya.

Dalam kode sumber netstat:

  1. semua folder proses di / proc diulang, setiap direktori fd di / proc // fd diperiksa untuk membuat peta dari inode socket ke pid / progname.

  2. kemudian / proc / net / tcp diperiksa untuk mendapatkan informasi soket tcp (oleh fungsi tcp_info), termasuk inode soket.

  3. saat mengeluarkan informasi soket tcp, pid / progname ditanyai dari peta dalam langkah 1 melalui inode soket. jika tidak ada yang ditemukan, '-' keluaran.

Jika soket dibuat setelah peta dibuat, pid / progname tidak akan ditemukan di peta.

zenkj
sumber