问题描述
我怀疑一个程序正在我的机器上的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