netstat -ntap对某些连接不显示pid /进程名?


11

我有ubuntu / hardy服务器,内核为2.6.24-23-server和netstat:

# 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

是的,它是在root上运行的,甚至是通过sudo在root上运行的。同样的效果。

你确定你没有做netstat -ntap的不是netstat ntap
凯尔·布​​兰特

我确定我在做netstat -ntap-就像我写的那样。因为这是根据netstat的手册页为其提供选项的方式。

旁注-我刚刚检查了一下,似乎netstat无法识别不带“-”的给定选项。

Answers:


4

这将在NFS之类的内核进程中发生,但在常规应用程序中也偶尔发生:RHEL 5具有相同的行为。

# 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
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:~ # 

在我看来,可能有两种情况:

1)普通特权用户执行“ netstat”后,看不到root启动的进程

2)一些进程在内核中运行


1

对于已建立的连接,这仅应发生在从内核空间启动的连接中,例如NFS或DRBD。显然,等待连接可能会使该过程在它们下面消失。如果您无法确定导致给定连接的原因,请粘贴输出,然后有人可以告诉您它是什么。


这些绝对不是基于内核的连接,因为它们是从应用程序到数据库的连接。

netstat -atnp | grep EST的输出?
womble

这是我的问题是-列出的连接不是pid /程序名,而是“-”

3
我想看看实际发生了什么,而不是对其进行解释。
womble

我无法向您显示整个输出,因为它包含可用于标识环境的名称。该特定端口的行如下所示:“ 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)的版本相同),奇怪的是8年后仍然没有答案。浏览net-tools的源代码后,我可能会找到它。

在netstat源代码中:

  1. 迭代/ proc中的所有进程文件夹,检查/ proc // fd目录中的每个fd以构建从套接字inode到pid / progname的映射。

  2. 然后检查/ proc / net / tcp以获取tcp套接字信息(通过tcp_info函数),包括套接字inode。

  3. 当输出tcp套接字信息时,在步骤1中通过套接字inode从映射中查询pid / progname。如果未找到任何内容,则输出“-”。

如果套接字是在构建映射后创建的,则在映射中将找不到pid / progname。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.