什么在使用此网络套接字?


18

我正在尝试使用NTP更新我的计算机上的时间。但是,这给了我一个错误:

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

错误“套接字正在使用”是什么意思?我如何查看该套接字在使用什么?

这是在我的CentOS 4.x系统上发生的,但我也在FreeBSD 7.x,Ubuntu 10.04和Solaris 10上看到了。


Answers:


20

你可以做

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

查看所有侦听端口,但可以查看运行ntpd的甜甜圈的价格:

service ntpd status

至于“使用中的插座”是什么意思?如果可以宽恕我的皱纹(对于最基本的解释,我为您的补救措施很抱歉),那么... TCP / IP(互联网的语言)指定每台计算机都有一个IP地址,在互联网上唯一标识该计算机。此外,每个IP地址上可以连接65,000个编号的端口。

当您想连接到Web服务器时,可以在浏览器中打开该站点,但是实际上下面的机器将您连接到Web服务器IP上的端口80。Web服务器的守护程序(监听端口80连接的程序)使用“套接字”保持打开该端口,并为其保留。一次只有一个程序可以使用同一端口。

由于您正在运行ntpd,因此它正在使用该端口。“ ntpdate”试图访问该端口,但是由于该端口已经保持打开状态,因此出现“套接字已在使用”错误。

编辑也
更改为同时考虑UDP


1
lsof震撼了我的世界!也可以在IPv4上使用grep查找各种基于IP的东西。
geoffc 2010年

“对已经知道这一点的每个人表示歉意” –不要道歉。该站点的目的之一是为常见问题提供良好的答案。此早期测试版的目的是提供内容。
Stefan Lasiewski 2010年

我知道,但是我想确保询问的人知道我没有在和他们说话。
马特·西蒙斯

我问了这个问题,你不是在跟我说话。我也知道答案,但是我认为这对于Beta是个好问题。您的回答比我写的要好得多;)
Stefan Lasiewski 2010年

@MattSimmons没有Isof命令我的CentOS 7
三块

10

您还可以使用netstat查找打开的套接字-比其他海报建议的使用lsof干净得多。以root身份尝试此命令行

netstat -lp -u -t

查看所有监听连接,包括其关联的pid和程序。-l参数指定侦听连接,-p指定您要查看PID /名称,-t和-u告诉netstat您仅需要TCP和UDP连接(IPv4和IPv6)。

如果要查看数字端口和主机名(例如,对于主机,则不解析,对于端口,则不转换为服务名),可以添加-n到上面的命令行中。

编辑:这在Linux上有效-我不知道它在BSD上的效果如何,因为我周围没有任何基于BSD的盒子。


+1:这是唯一一个实际显示ntpd进程(默认情况下侦听UDP)的答案。
Stefan Lasiewski 2010年

对于人类:您的旗帜等同于netstat --listen --programs --udp --tcp
Stefan Lasiewski 2010年

1
FreeBSD不支持'-p'(“显示程序”),这就是人们使用LSOF的原因。它还不支持-l(“显示侦听套接字”)标志,但是我认为您可以使用来做到这一点| grep LISTEN,但是不包括UDP连接。但是否则,我认为FreeBSD上的等效标志为:netstat -p udp -p tcp -a,但netstat -a可能更简单。
Stefan Lasiewski 2010年

@Stefan:我的答案也会显示UDP套接字。
kbyrd

@kbyrd:有趣。它没有为我显示UDP数据包。查看我对您的帖子的评论。
Stefan Lasiewski 2010年

2

在FreeBSD上,您也可以使用sockstat,以防lsof对您不起作用(例如,在出于任何原因而没有/ dev / mem的虚拟系统上)。要获取所有具有侦听IPv4套接字的程序的列表,请执行以下操作:

sockstat -l4

1

以root用户身份执行以下操作:

lsof | grep IPv4 | grep LISTEN

这将向您显示在IPv4套接字上侦听的所有进程。您可能需要添加-b以防止lsof执行某些可能会阻止它的操作。如果这样做,您可能还想重定向stderr/dev/null


对我来说,这似乎没有显示udp数据包。我正在运行rsyslogd的Ubuntu盒子上进行测试,监听514 / udp端口。
Stefan Lasiewski 2010年

我需要sudo lsof |grep UDP查看UDP数据包。
Stefan Lasiewski 2010年

1

您可以使用lsof查找哪个应用程序正在使用此套接字。


0

在OS X 10.9.5上玩三合一:

sudo lsof | grep \ IPv | sort ; clear ; sudo lsof -U ; clear ; sudo netstat -a


0

对于FreeBSD,请使用该-u开关,以便ntpdate改为使用非特权端口。

喜欢: ntpdate -v -b -u 0.freebsd.pool.ntp.org

man ntpdate看什么-v-b做。


Debian上的ntpdate具有-u选项,因为它来自ntp.org,我想大多数系统都可以。
RobertL 2015年
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.