当前位置: 首页>>技术教程>>正文


如何知道某个端口上正在监听的节目?

, , ,

问题描述

我怀疑一个程序正在我的机器上的8000端口上侦听。

当我运行以下命令时,出现此错误:

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

如果我使用其他端口(8000是默认值),则Web服务器运行正常。

如果我从命令行运行wget localhost:8000,它将返回404 Not Found

我可以做什么(或者有什么工具可用)来查找端口8000上正在监听的程序,并从那里配置该程序?

最佳解决办法

打开你的终端并输入

lsof -i :8000

该命令将用PID列出您使用该端口的应用程序。 (如果没有结果通过sudo运行,因为您可能没有对某些进程的权限。)

例如,使用端口8000(python3 -m http.server):

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

和端口22(SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

希望有所帮助。

次佳解决办法

您可以使用netstat来查看哪个进程正在侦听哪个端口。

您可以使用此命令获得完整的详细信息:

sudo netstat -peanut

如果您需要确切知道哪个端口正在监听端口8000,您可以使用以下命令:

sudo netstat -peanut | grep ":8000 "

没有可以从netstat隐藏的进程。

第三种解决办法

为了阐明@ 33833的答案,你可以得到一些非常详细的信息,例如:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

我可以看到那里的鱿鱼是这个过程,但它实际上是我的squid-deb-proxy正在占用端口。

Java应用程序的另一个很好的例子:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

您可以在lsof(LiSt打开文件)中看到它是java,它不太有用。使用PID运行ps命令,我们可以立即看到它是CrashPlan。

第四种办法

iproute2包中尝试ss

ss -nlp | grep 8000

第五种办法

使用procinfo包中的socklist的另一种方法是:

man socklist

DESCRIPTION
socklist is a Perl script that gives you a list of all open sockets, enumerating types, port, inode, uid, pid, fd and the program to which it belongs.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/130.html,未经允许,请勿转载。