在服务器运维管理中,准确查看FTP的连接数是保障服务稳定性和安全性的关键环节。核心上文归纳是:查看FTP连接数的方法主要取决于服务器所使用的操作系统以及具体的FTP服务软件。 在Linux环境下,最通用的方法是利用系统自带的网络状态统计命令(如netstat或ss)针对FTP默认端口(21)进行过滤统计;对于特定的FTP软件(如vsftpd、ProFTPD、Pure-FTPd),则可以使用其自带的日志分析工具或专用命令;在Windows Server环境下,通常借助IIS管理器或性能监视器来获取实时连接数据,掌握这些方法,管理员不仅能监控当前负载,还能有效识别异常连接和潜在攻击。

利用通用系统命令监控连接(Linux环境)
对于绝大多数Linux服务器,无论运行何种FTP服务,通过底层网络命令查看端口21的连接状态是最直接、最高效的手段,这种方法不依赖于特定的FTP软件配置,具有极高的普适性。
使用netstat命令
netstat是经典的网络统计工具,虽然在新版系统中逐渐被ss取代,但其输出格式直观,依然被广泛使用,要查看所有连接到21端口的IP和状态,可以使用以下命令:
netstat -ant | grep :21
-a显示所有连接,-n以数字形式显示IP和端口,-t仅显示TCP连接。
若要统计具体的连接总数,可以结合wc -l命令:
netstat -ant | grep :21 | wc -l
为了更深入地分析,管理员通常需要区分“已建立连接”和“等待关闭”的连接,此时可以使用:
netstat -ant | grep :21 | grep ESTABLISHED | wc -l
重点关注ESTABLISHED状态的数量,这代表了当前正在传输数据的活跃会话,是判断服务器负载的核心指标。
使用ss命令
ss(Socket Statistics)是现代Linux发行版(如CentOS 7+、Ubuntu 18.04+)推荐的工具,它直接从内核读取数据,执行速度远快于netstat,在连接数巨大(如数千并发)时优势尤为明显。
查看FTP连接数的命令为:
ss -ant | grep :21
统计总数:
ss -ant | grep :21 | wc -l
ss命令的优势在于其强大的过滤能力,例如可以只查看源IP连接数最多的前10名,这对于排查DDoS攻击或某IP占用过多资源非常有用:
ss -nt state established | grep :21 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -n 10
针对特定FTP软件的专业查看方法
虽然系统命令通用,但特定的FTP服务器软件往往提供了更详细的用户级连接信息,能够显示具体是哪个用户在连接,以及当前的操作状态。
vsftpd (Very Secure FTP Daemon)
vsftpd本身没有内置类似ftpwho的实时命令,但它是通过进程模型运行的,我们可以通过查看进程数来估算连接数:
ps -ef | grep vsftpd | wc -l
这种方法并不完全准确,因为vsftpd可能包含辅助进程。更专业的方法是分析vsftpd的日志文件(通常位于/var/log/vsftpd.log),通过编写脚本实时分析日志中的“LOGIN”和“LOGOUT”记录,可以计算出精确的当前在线人数,使用以下命令可以统计当前登录成功的唯一IP数:
grep "LOGIN" /var/log/vsftpd.log | awk '{print $7}' | sort -u | wc -l
ProFTPD
ProFTPD提供了非常便捷的工具,是运维人员的首选,它自带了ftpwho和ftptop命令。
ftpwho:直接输入该命令,即可显示当前每个连接的会话详情,包括连接时间、当前状态(空闲或下载中)、客户端IP等。
ftptop:类似于Linux的top命令,它提供了一个动态刷新的界面,实时显示FTP服务器的总体连接情况、流量速率以及各个会话的传输速度,这对于实时监控FTP带宽占用非常有价值。

Pure-FTPd
Pure-FTPd同样提供了强大的实时监控工具,使用命令:
pure-ftpwho
它会列出当前所有的FTP会话,包括PID、账户名、IP地址、连接时间、当前状态(IDLE/DL/UL)以及已传输的字节数。Pure-FTPd的输出格式非常清晰,特别适合快速定位占用带宽的异常用户。
Windows Server IIS FTP连接查看
在Windows服务器环境下,如果使用的是IIS自带的FTP服务,查看方式则完全不同,主要依赖图形化界面和性能计数器。
使用IIS管理器
打开IIS管理器(Internet Information Services Manager),在左侧连接树中点击您的FTP站点,在右侧的“操作”面板或中间的“监视”视图中,可以直接看到一个“当前连接数”的指标,这是最直观的方法,适合快速查看。
性能监视器
为了更深入的历史趋势分析,应使用Windows自带的“性能监视器”工具。
添加计数器:选择 FTP Service -> Current Connections。
还可以添加 Total Connection Attempts(总连接尝试次数)和 Maximum Users(最大用户数)。
通过性能监视器,管理员可以将连接数数据导出或设置警报,例如当连接数超过500时自动发送邮件通知,这是企业级运维的标准操作。
进阶分析与独立见解:从连接数看安全与优化
仅仅知道连接数是不够的,专业的运维人员需要从连接数据中解读出潜在的风险。
识别异常连接与慢速攻击
如果发现连接数居高不下,但服务器流量却很低,这很可能意味着存在大量的“僵尸连接”或慢速攻击,攻击者可能建立连接后不进行数据传输,故意占用服务器的连接池,导致正常用户无法登录。
解决方案:在FTP服务器配置文件中(如vsftpd的vsftpd.conf),设置connect_timeout和idle_session_timeout参数,将空闲超时时间设置为600秒,自动清理无响应连接。

限制单IP连接频率
通过分析ss或netstat的统计结果,如果发现某一个IP地址占用了数百个连接,这通常是暴力破解或资源滥用。
解决方案:利用防火墙(如iptables或firewalld)结合recent模块,限制单个IP在特定时间内的连接次数,限制每分钟最多5个新连接:
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --set --name FTP
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --rttl --name FTP -j DROP
被动模式(PASV)的端口监控
FTP协议在被动模式下,数据连接会使用随机的高位端口。只监控21端口会漏掉数据传输连接的负载,专业的监控方案应同时锁定FTP配置文件中指定的被动端口范围(例如50000-60000)。
综合监控命令示例:
ss -ant | grep -E ':21|:50000|:60000' | wc -l
这能反映出服务器真实的网络句柄占用情况。
相关问答
Q1:为什么使用netstat查看FTP连接数时,数值比实际在线用户大很多?
A: 这是因为netstat统计的是所有TCP连接状态,而不仅仅是“已建立”的连接,TCP连接在断开过程中会经历TIME_WAIT等状态,这些连接虽然不再传输数据,但依然占用端口并被统计在内,FTP的控制连接(端口21)和数据连接(被动模式端口)是分开的,一个用户可能对应两个或更多的连接条目。更准确的统计方法是过滤ESTABLISHED状态,或者结合FTP软件自身的日志工具进行统计。
Q2:如何在不重启FTP服务的情况下,实时断开某个占用大量资源的IP连接?
A: 这取决于具体的FTP软件,对于Linux系统,最通用的方法是使用tcpkill工具(属于dsniff包)或iptables。
使用tcpkill可以强制断开特定端口的连接:
tcpkill -i eth0 port 21 -9 host 192.168.1.100
对于ProFTPD或Pure-FTPd,可以使用ftpwho找到该连接对应的PID,然后使用kill命令终止该特定的进程ID,这样不会影响其他用户的连接,也不会导致整个FTP服务重启。
希望以上详细的操作指南能帮助您精准掌握服务器的FTP连接状态,如果您在实施过程中遇到端口不通、命令报错等问题,或者有更复杂的特定环境需求,欢迎在下方留言讨论,我们将为您提供进一步的故障排查建议。

















