我怀疑程序正在侦听机器上的端口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上监听的程序,并从那里配置该程序?

#1 楼

打开终端并输入

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)


希望有帮助。

评论


这也可以在OSX上发挥作用,.....

–贪婪
2014年3月11日在12:36

添加-s TCP:LISTEN会将结果限制为实际的侦听套接字及其过程。

– jhermann
2015年5月12日14:27

如果搜索端口8000,它将返回PID 1889? at

–科迪·布格斯坦(CodyBugstein)
2015年10月1日在21:19

是的,使用端口8881的PID 1889有服务。我丢失了什么吗?

–rɑːdʒɑ
2015年10月5日,11:26

@表示示例搜索端口8881。PID列包含进程ID,而NAME列包含端口。

– Freek de Bruijn
2015年10月11日在8:42

#2 楼

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

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

sudo netstat -peanut


如果您需要确切地知道哪个正在监听8000端口,可以使用此方法:

sudo netstat -peanut | grep ":8000 "


没有可以隐藏在netstat中的进程。

评论


netstat -peanut比netstat -taupen更容易记住!

–道格拉斯·B·斯台普(Douglas B. Staple)
15年8月31日在12:34

好一个! -刚编辑答案以反映您的评论。谢谢。

– Antoine Rodriguez
2015年9月1日下午16:48

'fuser -k 8000 / tcp'释放该端口

–杰伊·莫迪(Jay Modi)
16年2月19日在13:00

如果在“ PID /程序名称”列中看到的是破折号而不是进程名称,则您忘记添加“ sudo”

–v.shashenko
17年2月9日在11:29

所以是花生

– prusswan
17年2月22日在3:16

#3 楼

要详细说明@ 33833的答案,您可以获取一些非常详细的信息,例如:实际上,我的squid-deb-proxy占用了端口。

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

$ 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


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

评论


在一个命令中:lsof -t -i:8000 | xargs ps -fp

–布雷特Y
2014年8月13日在23:41

我必须在sudo前面加上前缀,但之后对我有用。谢谢。

– Dwayne Crooks
16-09-10 21:25

注意:没有sudo,您不会收到错误,简单的响应也不会得到任何结果。

–弗兰克·诺克(Frank Nocke)
17年1月6日在10:52

#4 楼

尝试使用来自ss软件包的iproute2

ss -nlp | grep 8000


评论


ss还具有自己的过滤功能:ss -nlp'(sport =:8000)'。

– GnP
2014年12月9日21:21

#5 楼

使用来自socklist软件包中的procinfo的另一种方法:
inode,uid,pid,fd及其所属的程序。


man 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


#6 楼

您可以使用nmap。


了解您的PC中打开了哪些端口非常重要,这不仅对Linux有用,而且对其他操作系统也有用。
Linux有很多工具可以检查哪些端口是打开的,最常见的是nmap,它是命令行工具,但是如果您愿意,也可以使用
图形化的前端。 >

要安装它,只需按键盘上的Ctrl + Alt + T即可打开终端。打开后,运行以下命令:

sudo apt-get install nmap


有关nmap和其他实用程序的更多信息,请转到此处

1Source:garron。我

评论


nmap只会告诉您哪个端口已打开,而不是哪个进程打开了它。

–安德鲁·伯恩斯(Andrew Burns)
14年6月17日在15:49

我单击浏览您的源代码以阅读[nmap]试图猜测每个端口上正在侦听的服务,但是在建议一种实际方法来找出哪个进程拥有套接字之前,它可能会出错。

– GnP
2014年12月9日在21:24



@gnp您可能还想看看This。

– Mitch♦
2014年12月10日下午6:15

@米奇我做到了。 OP需要知道本地系统上进程的确切PID。 Nmap在这里不是正确的工具,甚至没有服务和版本检测。它要么与nmaps数据库中的一个项目相匹配,要么仍然让OP知道要终止或重新配置哪个进程,要么不做,OP不会有一个不错的指纹和指向insecure.org的链接

– GnP
2014-12-10 14:10

#7 楼

由于社区的低谷,我无法在此处发表评论。
没有sudo的上述所有命令都不会为您提供进程ID /程序名称。

因此,您需要输入以下内容:

sudo lsof -i :8000




sudo netstat -lntup


您可以通过manhelp或我最喜欢的助手查看这些命令的详细信息

#8 楼

这是一个容易记住的命令
ss -townlup 

Netid               State                 Recv-Q                Send-Q                                    Local Address:Port                               Peer Address:Port
icmp6               UNCONN                0                     0                                                *%eth0:58                                            *:*
udp                 UNCONN                0                     0                                         127.0.0.53%lo:53                                      0.0.0.0:*
udp                 UNCONN                0                     0                                     172.31.26.71%eth0:68                                      0.0.0.0:*
tcp                 LISTEN                0                     128                                             0.0.0.0:22                                      0.0.0.0:*
tcp                 LISTEN                0                     128                                             0.0.0.0:443                                     0.0.0.0:*
tcp                 LISTEN                0                     128                                       127.0.0.53%lo:53                                      0.0.0.0:*
tcp                 LISTEN                0                     128                                                [::]:22                                         [::]:*
tcp                 LISTEN                0                     128                                                [::]:443                                        [::]:*
tcp                 LISTEN                0                     100                                                   *:9090                                          *:*                    users:(("java",pid=13008,fd=16))
tcp                 LISTEN                0                     100                                                   *:8080                                          *:*                    users:(("java",pid=11556,fd=12))