什么是端口?
首先,让我们定义什么是端口。 根据 国际教育学院,一个端口是:
“互联网通信的逻辑实体。 端口有两个主要用途:
1. 它们提供解复用标识符来分隔同一对端点之间的传输会话
2. 它们还可以识别进程连接的应用程序协议和相关服务。”
简单来说,这仅仅意味着端口是一个端点,数据通过该端点在网络上的两台计算机之间来回流动。 一台计算机有 65535 个端口可用于共享信息。 这些端口号基于一个 16 位数字,我们从中得出可用端口的总数(0 到 65535)。
这些端口号被分配给特定的服务 IANA,它负责维护官方端口号指定。 他们根据三个范围指定端口号:
- 系统(或众所周知的)端口 (0-1023)
- 用户端口 (1024-49151)
- 动态和专用端口 (49152-65535)
通用端口和相关程序
正如我们所看到的,一旦服务与端口号相关联,其中许多端口就很容易识别。
- 端口 20:FTP
- 端口 21:FTP
- 端口 22:SSH
- 端口 23:远程登录
- 端口 25:SMTP
- 端口 26:通用备用 SMTP 端口
- 端口 37:cPanel 的时间服务器(tcp out)
- 端口 53:DNS/命名
- 端口 80:HTTP
- 端口 110:POP3
- 端口 123:NTP
- 端口 143:IMAP
- 端口 443:HTTPS (SSL)
- 端口 465:SMTP(安全 SMTP)
- 端口 993:IMAP(安全 IMAP)
- 端口 995:POP3(安全 POP3)
- 端口 1167:守护者(buagent)
- 端口 1433:Microsoft SQL Server
- 端口 2073:cPanel Razor
- 端口 2077:cPanel WebDAV
- 端口 2078:cPanel WebDAV 安全端口
- 端口 2079:cPanel CalDAV 和 CardDAV
- 端口 2080:cPanel CalDAV 和 CardDAV 安全端口
- 端口 2082:cPanel 非安全端口
- 端口 2083:cPanel 安全端口
- 端口 2086:WHM 非安全端口
- 端口 2087:WHM 安全端口
- 端口 2089:cp 许可证
- 端口 2095:cPanel 网络邮件非安全端口
- 端口 2096:cPanel 网络邮件安全端口
- 端口 2443:Nodeworx/SiteWorx
- 端口 3306:MySQL
- 端口 3389:远程桌面协议 (rdp)
- 端口 4643:Virtuozzo 控制面板
- 端口 6660-6669:IRC
- 端口 8000:SHOUTcast
- 端口 8080:Tomcat
- 端口 8306:Plesk MySQL
- 端口 8443:Plesk
- 端口 49152:65534:标准被动 FTP 端口
TCP/UDP 协议
连接链的下一步是用于连接服务的协议。 计算机的 IP 地址由 ISP(互联网服务提供商)存储在 DNS 记录中,有助于信息传输。
当一台计算机请求连接到另一台计算机(或服务器)时,它使用 DNS 记录中列出的 IP 地址来定位网络上的另一台计算机。 与相关端口关联的服务然后使用这些连接协议之一将相关信息传输回请求者。 服务器上的开放端口侦听特定端口上的唯一通信请求。 唯一端口与上述各种软件或服务相关联。
例如,当您打开浏览器并输入 https://BYNSS.com 时, https 请求通过 ISP 或其他 Internet 提供商进行路由,然后该提供商对该域进行 DNS 查找。 一旦找到 IP 的位置,您的 https 请求就会被路由到 Liquid Web 拥有的服务器。 当请求到达服务器时,正在侦听端口 443 的服务,在这种情况下, 端口 443 HTTPS (SSL),识别到服务器的安全连接请求并安全地返回存储在服务器上的网页。
其他 example 如果您尝试连接到 Liquid Web 上的 FTP 服务器。 该软件(FileZilla 用于 example) 在端口 21 上访问服务器的 IP 地址,这是 FTP 服务侦听的端口。 请求到达,如果端口打开,则允许连接通过防火墙。 FTP 服务器然后响应连接请求,如果用户认证成功,您的计算机现在通过 FTP 连接到服务器。
防火墙
在此之后,防火墙开始发挥作用。 防火墙监控进出服务器的流量。 存储在防火墙规则中的信息根据传入的 TCP/UDP 信息允许或拒绝访问,并识别端口是打开还是关闭。 使用上述 FTP 请求作为 example,如果设置了防火墙规则以允许流量通过端口 21,则 FTP 请求将转发到允许连接的 FTP 服务器。 如果端口 21 被防火墙规则关闭或阻止,则请求被拒绝并且连接将失败。
服务
最后,如果请求被允许通过防火墙,则监听特定指定端口的服务接收请求并进行实物响应。 当然,这是对事件链的过度简化,但它展示了请求如何与唯一端口相关的整个过程。 一个 IP 地址可能有多个服务在上面列出的任何一个端口上进行侦听。 当我们连接到服务器时,我们正在连接到一个 IP 地址和一个端口。
查找本地开放端口
在 Linux 中,有多种方法可以查看服务是否正在侦听。 通常,我们可以使用安装在服务器上的软件来查看端口是否打开。
注意:在搜索此类信息时,也建议使用 watch 命令。 当与 watch 结合使用时,这些命令默认显示每两秒返回一次实时数据,但是,可以修改此命令以使用特定的时间范围。
地图
Nmap (Network Mapper) 是一个开源网络扫描器,用于发现网络上的服务和主机。 它将信息包发送到连接到网络的设备并分析响应。 Nmap 具有许多探测网络的功能,包括主机发现、服务检测和操作系统感知。 要安装 Nmap,我们使用以下命令。
root@host [~]# yum update -y
root@host [~]# yum install nmap -y
root@host [~]# nmap --version
要发现开放端口,我们可以运行以下命令之一。
root@host [~]# nmap localhost
Starting Nmap 6.40 ( https://nmap.org ) at 2021-01-14 14:24 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000080s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 987 closed ports
PORT STATE SERVICE
21/tcp open ftp
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
9100/tcp open jetdirect
Nmap done: 1 IP address (1 host up) scanned in 1.63 seconds root@host [~]#
另一个要使用的 nmap 命令如下。
root@host [~]# nmap -sT -O localhost
Starting Nmap 6.40 ( https://nmap.org ) at 2021-01-14 14:26 EST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00039s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 987 closed ports
PORT STATE SERVICE
21/tcp open ftp
25/tcp open smtp
53/tcp open domain
80/tcp open http
110/tcp open pop3
143/tcp open imap
443/tcp open https
465/tcp open smtps
587/tcp open submission
993/tcp open imaps
995/tcp open pop3s
3306/tcp open mysql
9100/tcp open jetdirect
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.9
Network Distance: 0 hops
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.36 seconds
root@host [~]#
lsof
lsof是linux命令的意思 列出打开的文件 并在许多类 Unix 系统中用于报告所有打开文件的列表以及打开它们的进程。 如果没有安装lsof,我们使用下面的命令来安装。
root@host [~]# yum update -y
root@host [~]# yum install lsof
root@host [~]# lsof -v
要检查打开的端口,请使用此命令。
root@host [~]# lsof -i -P | grep -i "listen"
我们还可以使用 lsof 作为更大、更复杂命令的一部分,对从命令行返回的信息进行排序和过滤。 此命令列出 TCP/UDP 连接的总数。
root@host [~]# lsof -i | awk '{print $8}' | sort | uniq -c | grep 'TCP|UDP'
使用这个命令,我们可以看到所有使用 TCP 连接的 IPv4 端口。
root@host [~]# lsof -a -i4 -itcp
或者这个命令,它列出了绑定到一个开放端口的进程。
root@host [~]# lsof -i :80
网络统计
netstat 是一个命令行实用程序,它显示 TCP 网络连接、路由表、活动网络接口和其他网络协议统计信息。 要安装 netstat,请运行这些命令。
root@host [~]# yum update -y
root@host [~]# yum net-tools -y
root@host [~]# netstat --version
这些命令将在扫描打开的端口连接时提供请求的详细信息。
root@host [~]# netstat --listen
root@host [~]# netstat -tulpn | grep LISTEN
root@host [~]# netstat -plnt | awk '{print $1, $3, $7}'
ss
ss 是 netstat 的更简单、更快速的替代品。 它是一个命令行元素,用于返回和显示各种与网络相关的信息。
此命令列出网络统计信息的摘要。
root@host [~]# ss -s
在这里,我们看到正在侦听的 UDP 连接。
root@host [~]# ss -lu
此命令显示 TCP 连接。
root@host [~]# ss -lt
下面是使用各种标志和打印特定列输出的其他 ss 命令。
root@host [~]# ss -4 state listening | awk '{print $1, $4}'
root@host [~]# ss -tulwn | awk '{print $1, $5}'
root@host [~]# ss -stplu | awk '{print $1, $2, $5}'
重击
这是一个使用多个命令的命令 bash 扫描打开的端口。
root@host [~]# HOST=127.0.0.1;for((port=1;port<=65535;++port)); do echo -en "$port ";if echo -en "open $HOST $portnlogoutquit" | telnet 2>/dev/null | grep 'Connected to' > /dev/null; then echo -en "nnport $port/tcp is opennn";fi;done | grep open
port 21/tcp is open
port 25/tcp is open
port 53/tcp is open
port 80/tcp is open
port 110/tcp is open
port 111/tcp is open
port 143/tcp is open
port 443/tcp is open
port 465/tcp is open
port 587/tcp is open
port 878/tcp is open
port 953/tcp is open
port 993/tcp is open
port 995/tcp is open
port 2077/tcp is open
port 2078/tcp is open
port 2079/tcp is open
port 2080/tcp is open
port 2082/tcp is open
port 2083/tcp is open
port 2086/tcp is open
port 2087/tcp is open
port 2095/tcp is open
port 2096/tcp is open
port 3306/tcp is open
port 6379/tcp is open
port 9100/tcp is open
port 9104/tcp is open
port 9115/tcp is open
port 9117/tcp is open
port 9253/tcp is open
port 11211/tcp is open
port 25566/tcp is open
port 46648/tcp is open
使用 CTRL +c 结束此命令。
查找远程开放端口
nc 或 netcat
Netcat(或 nc)是一个命令行网络实用程序,它使用 TCP 跨网络连接读取和写入数据。 以下命令将提供有关外部服务器上开放端口的详细信息。
root@host [~]# nc -vz [host] [port ranges] 2>&1 | grep succeeded
root@host [~]# netcat -zv [host] [port ranges] 2>&1 | grep succeeded
远程登录
Telnet 是一种应用程序协议和命令,用于使用虚拟终端 (VT) 连接提供基于文本的通信。
root@host [~]# yum install telnet telnet-server -y
root@host [~]# telnet 192.168.0.1 22
因为 Linux 将所有内容都视为文件,所以我们可以使用它来定位端口的状态和可用性。
root@host [~]# echo > /dev/tcp/[host]/[port] && echo "The port is open!"
root@host [~]# echo > /dev/udp/[host]/[port] && echo "The port is open!"
root@host [~]# cat /etc/services | grep port#
重击
root@host [~]# </dev/tcp/127.0.0.1/80) &>/dev/null && echo "OPEN" || echo "CLOSED"
root@host [~]# for i in {1..65535}; do (echo < /dev/tcp/127.0.0.1/$i) &>/dev/null && printf "n[+] Open Port atn: t%dn" "$i" || printf "."; done
root@host [~]# ip=192.168.1.254;for i in {1..65535}; do (echo < /dev/tcp/$ip/$i) &>/dev/null && printf "n[+] Open TCP Port at: t%dn" "$i"; done
root@host [~]# declare -a array=($(tail -n +2 /proc/net/tcp | cut -d":" -f"3"|cut -d" " -f"1")) && for port in ${array[@]}; do echo $((0x$port)); done
root@host [~]# for p in {1..1023}; do(echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open"; done
我们还可以使用 Python 套接字模块或其中一个 curl、telnet 或 wget 命令。
等/服务
服务器软件利用 /etc/services 文件将服务名称呈现给相关的端口号。 通常,该文件包括服务名称、使用的端口和协议、别名以及任何相关注释。
root@host [~]# cat /etc/services | grep tcp
root@host [~]# cat /etc/services | grep udp
找到正在运行服务的端口
要找到运行服务的端口,请使用以下说明。 要识别 PID(或进程 ID 号),我们首先使用 ps 命令。
root@host [~]# ps aux | grep <PROCESS NAME>
root@host [~]# ps aux | grep ssh
root 47875 0.0 0.0 112808 964 pts/0 S+ 16:28 0:00 grep --color=auto ssh
root 101650 0.0 0.0 111448 2404 ? Ss 2020 1:42 /usr/sbin/sshd -D
获得 PID 后,运行以下 netstat 命令。
root@host [~]# netstat -plnt | grep <PID>
root@host [~]# netstat -plnt | grep 101650
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 101650/sshd
tcp6 0 0 :::22 :::* LISTEN 101650/sshd
root@host [~]#
这将为我们提供进程正在侦听的端口。 在这种情况下,我们可以看到 ssh PID (101650) 正在侦听端口 22。
哪个进程在监听端口?
反方向移动,我们可以确定哪个进程正在侦听端口。
root@host [~]# lsof -i -P -n | grep LISTEN | grep ftp
pure-ftpd 101353 root 4u IPv4 12372180 0t0 TCP *:21 (LISTEN)
pure-ftpd 101353 root 5u IPv6 12372181 0t0 TCP *:21 (LISTEN)
root@host [~]#
===============
root@host [~]# netstat -tulpn |grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 101353/pure-ftpd (S
tcp6 0 0 :::21 :::* LISTEN 101353/pure-ftpd (S
root@host [~]#
===============
root@host [~]# ss -tulpn | grep ftp
tcp LISTEN 0 9 *:21 *:* users:(("pure-ftpd",pid=101353,fd=4))
tcp LISTEN 0 9 [::]:21 [::]:* users:(("pure-ftpd",pid=101353,fd=5))
root@host [~]#
结论
本教程探讨了端口是什么、它们如何工作以及涉及的其他因素。 我们查看了常见端口及其相关服务的列表。 我们还介绍了此通信过程中涉及的其他因素,包括 TCP 和 UDP 协议、服务器软件和服务,以及允许或禁止通过这些端口的流量的防火墙规则。 此外,我们分析了用于收集有关端口状态信息的多个命令以及在服务器上定位开放端口的各种方法,包括几种非标准方法。 总之,开放端口是计算机上的服务通过网络与另一台服务器通信的方式。 如果没有这个重要功能,我们今天知道和使用的所有计算机程序,包括互联网本身,都不会存在。
我们以成为 Hosting™ 中最乐于助人的人而自豪!
有问题吗? 我们经验丰富的系统管理员今天将向您解释如何利用这些信息! 如果您在完全托管的 VPS 服务器上, Cloud 专用、私有父服务器或专用服务器所有者并需要帮助,请拨打 800.580.4985 联系我们,或打开 聊天 或与我们购票以了解更多信息!