2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

如何检查我的Linux机器上哪些端口是繁忙的,哪些端口是空闲的?

有没有什么命令行命令或其他方法来查找并列出我的Linux机器上的繁忙和空闲端口号?

答案 (4)

42
42
42
2011-12-23 13:11:39 +0000

命令

netstat -antu

将显示所有正在使用的 tcp 和 udp 端口。输出结果看起来像这样。

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN

Local Address字段中冒号后面的数字表示正在使用的端口。如果状态为 “LISTEN",则表示一个端口正在使用传入连接。如果Local Address字段中的IP地址是0.0.0.0,则意味着将接受分配给接口的任何IP地址上的传入连接–因此这意味着来自您的机器之外的连接。

如果说localhost127.0.0.1,则只接受来自你的机器的连接。

另外,如果你添加-p参数,并以root身份运行它,它将显示打开端口的进程。

$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd

没有显示正在使用的都是免费的,但是用户(非特权账户)只能打开1023以上的端口。

13
13
13
2012-10-12 06:02:01 +0000

我自己编了一个【小名单】(http://adhocshare.blogspot.com/2012/10/find-list-of-open-ports-listening-ports.html)。

我最喜欢的一些是:。

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

一个好的、可靠的检查端口打开的方法是使用ss(替代 已废弃的 netstat),它可以在脚本中使用,而不需要提升权限(即sudo)。

用途:监听端口的选项-l,绕过DNS解析的选项-n,以及源端口NN的过滤器。src :NN (用你要监控的端口替换NN)。更多选项,请参阅man ss

ss -ln src :NN

示例。

[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port

在脚本中,使用grep,我们可以测试输出结果是否包含我们要求的端口。例子: 80端口在使用中 (见上文):

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if ["$result" -eq 1]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

例子: 81端口不在使用中 (见上文)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if ["$result" -eq 1]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)
``` 0x1&
3
3
3
2014-06-30 08:25:41 +0000

另一种方式:

telnet localhost <PORT_NUMBER>

如果端口是空闲的,你会得到一个错误。如果端口在使用中,telnet会连接。

(发现于 http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )