如何检查某个端口是否已打开且未使用?

Ric*_*cha 10 linux

我想在使用端口号80的Linux平台上安装webserver-apache,但我不确定端口是否打开,是否被其他应用程序使用.

  1. 输出grep 80 /etc/services是:

http 80/tcp www www-http #World Wide web Http

http 80/udp www www-http #Hypertext transfer protocol

2 . netstat -an | grep 80 | more :

它给出了一些IP,其中一个是IP:80 TIME_WAIT

你能帮忙告诉我怎样才能知道端口80是否打开和未使用,以便我可以开始安装.

Sef*_*eff 9

这可以使用nc如下命令来实现:

# nc -z IP PORT

如果端口已被使用,它将返回 TRUE,或者是 FALSE(即,当前不侦听可用)。

我不推荐lsofnetstat方法,因为它首先尝试扫描所有正在运行的 PID 以获取所有有界端口:

# time lsof -i:8888
real    0m1.194s
user    0m0.137s
sys 0m1.056s```

# time nc -z 127.0.0.1 8888
real    0m0.014s
user    0m0.011s
sys 0m0.004s
Run Code Online (Sandbox Code Playgroud)

这里 8888 是一个未使用的端口。nc在上面的示例中,该命令的速度提高了约 85 倍。

例如 1:

$ nc -z 127.0.0.1 80 && echo "IN USE" || echo "FREE"
IN USE

$ nc -z 127.0.0.1 81 && echo "IN USE" || echo "FREE"
FREE
Run Code Online (Sandbox Code Playgroud)

例如2:

如果您尝试使用远程 IP,如果在指定时间内不接受连接,最好添加超时以自动退出。

$ nc -w 2 -z 216.58.196.174 81

它的谷歌IP没有使用,所以尝试2秒后会超时。


tin*_*ink 7

sudo netstat -anp | grep ':80 '
Run Code Online (Sandbox Code Playgroud)

这应该给你pid和持有端口80的进程的名称


Dil*_*son 5

尝试将 lsof 通过管道输入 grep 并搜索端口号:

lsof|grep <port>
Run Code Online (Sandbox Code Playgroud)

如果没有显示任何内容,则表示该端口未被使用

您可以使用以下命令终止特定端口上的进程

kill -9 <pid>
Run Code Online (Sandbox Code Playgroud)

其中 pid 是从第一个命令获取的进程 ID。


Mic*_*ser 5

       netstat -tln | tail -n +3 | awk '{ print $4 }'  
Run Code Online (Sandbox Code Playgroud)

这个显示 tcp 侦听端点的绑定地址。所有其他端点都是免费的;此外,如果在 Unix 上并且您不是 root,则无法绑定到“特权”端口号(端口号低于 1024)

更详细地解释:

netstat -tln - 所有监听 tcp 端口

tail -n +3 - netstat 头部的剪切

awk '{print $4 }' - 打印由 [ip]:[port] 组成的第四列

对于一般情况,您仍然需要注意删除所有不相关的接口;侦听地址 0.0.0.0 正在侦听所有网卡,如果有一个 IP 地址,那就是网卡/网络接口的特定 IP。


Jor*_*art 5

作为脚本的一部分,您可能希望使用以下内容:

resp=`netstat -tunl | grep ":80 "`
if [ -z "$resp" ]; then
    echo "80 Port is free"
else
    echo "80 Port is not free"
fi
Run Code Online (Sandbox Code Playgroud)