无论是要解决网络连接问题还是配置防火墙,要检查的第一件事就是系统上实际打开了哪些端口。
本文描述了几种如何找出在Linux系统打开了哪些端口的方法。
什么是开放端口
侦听端口是应用程序侦听的网络端口,可以通过使用侦听端口,ss,netstat或lsof等命令查询网络堆栈来获得系统上的列表,每个侦听端口都可以使用防火墙打开或关闭(过滤)。
一般来说,开放端口是一个网络端口,接受来自远程位置的传入数据包。
你应该只公开程序所需的端口,并关闭所有其他端口。
使用nmap检查打开的端口
Nmap是一个强大的网络扫描工具,可以扫描单个主机和大型网络,主要用于安全审计和渗透测试,
除了端口扫描,nmap还可以检测Mac地址,OS类型,内核版本等等。
以下命令确定哪些端口正在侦听来自网络的TCP连接:sudo nmap -sT -p- 10.10.8.8
-sT告诉nmap扫描TCP端口,-p-扫描所有65535个端口,如果没有使用-p-nmap将只扫描1000个端口。Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
上面的输出显示,在目标系统上只打开端口22,80和8069。
要扫描UDP端口,请使用-sU而不是-sT:sudo nmap -sU -p- 10.10.8.8
使用netcat检查打开的端口
Netcat (或nc )是一个命令行工具,可以使用TCP或UDP协议跨网络连接读取和写入数据。
使用netcat可以扫描单个端口或端口范围。
例如要在IP地址为10.10.8.8在20-80的远程计算机上扫描打开的TCP端口,可以使用以下命令:nc -z -v 10.10.8.8 20-80
-z选项告诉nc只扫描打开的端口,而不发送数据,-v用于更详细的信息。
输出将类似于以下内容:nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
如果只想在屏幕上打印有打开端口的行,可以使用grep命令。nc -z -v 10.10.8.8 20-80 2>&1 | grep succeededConnection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
要扫描UDP端口,请将-u选项传递给nc命令:nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
使用Bash伪设备检查打开端口
另一种检查某个端口是否打开或关闭的方法是使用Bash shell /dev/tcp/ ..或/dev/udp/ ..设备,
在/dev/$PROTOCOL/$HOST/$IP伪设备上执行命令时,Bash将在指定端口上打开到指定主机的TCP或UDP连接。
以下if,else语句将检查kernel.org上的端口443是否打开:if timeout 5 bash -c '/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fiPort is open
上面的代码是如何工作的?
使用伪设备连接到端口时的默认超时很长,因此使用timeout命令在5秒后杀死测试命令,如果连接建立到kernel.org端口443,测试命令将return true。
你还可以使用for循环检查端口范围:for PORT in {20..80}; do
timeout 1 bash -c "/dev/null" && echo "port$PORTis open"
done
输出将类似于以下内容:port 22 is open
port 80 is open
结束语
我们向你展示了几个可用于扫描打开端口的工具,还有其他工具和方法来检查开放端口,例如你可以使用python socket模块,curl或telnet,wget。
如果你有问题或意见,请在下面留言。