ftp控制通道使用tcp 21端口明文传输命令,可用tcpdump -i eth0 -nn -a -s 0 port 21抓取并以ascii格式查看user、pass等命令及响应码,推荐先保存为pcap文件再过滤分析。

FTP 控制通道使用 TCP 21 端口,明文传输命令(如 USER、PASS、PWD、LIST、RETR 等),非常适合用 tcpdump 抓取并分析。关键在于精准捕获 + 可读输出 + 定向过滤。
明确目标:只抓 FTP 控制连接(端口 21)的交互内容
默认 tcpdump 只显示包头,而 FTP 命令是 ASCII 文本,需用 -A 参数以 ASCII 方式打印载荷:
sudo tcpdump -i eth0 -nn -A port 21
-
-i eth0:指定网卡(可用tcpdump -D查看所有接口) -
-nn:不解析 IP 和端口为域名/服务名(避免延迟,确保显示192.168.3.100.54321 > 192.168.3.14.21这类原始格式) -
-A:以可读 ASCII 形式显示数据包内容(含 FTP 命令和响应,如220 vsftpd 3.0.3、USER admin、331 Please specify the password.)
✅ 小提示:若看到乱码或截断,加
-s 0捕获完整包(避免默认只截前 96 字节):sudo tcpdump -i eth0 -nn -A -s 0 port 21
快速识别 FTP 控制会话的三要素
一个典型的 FTP 控制交互包含:
-
客户端发起连接:源端口随机(如
54321),目标:21 -
服务器响应:目标端口
21,源端口21,返回220欢迎消息 -
命令与响应成对出现:
USER xxx→331PASS yyy→230PWD→257 "/home/ftp"LIST→150 Opening ASCII mode data connection...+226 Transfer complete
你只需在 -A 输出中搜索关键词即可定位行为:
USER\|PASS\|RETR\|STOR\|LIST\|PWD\|CWD\|QUIT- 响应码:
^220\|^331\|^230\|^257\|^150\|^226\|^530
保存抓包供后续细查(推荐生产环境用)
直接终端输出易丢失,建议先保存为 .pcap 文件,再用 tcpdump -r 或 Wireshark 分析:
# 抓 50 个包,存为 ftp-control.pcap sudo tcpdump -i eth0 -w ftp-control.pcap -c 50 port 21 # 重放并过滤显示 FTP 命令(ASCII 格式) tcpdump -r ftp-control.pcap -nn -A 'port 21' | grep -E "(USER|PASS|LIST|220|230|331|530)"
补充:区分主动模式 vs 被动模式的控制通道特征
- 控制通道始终走 21 端口,不受模式影响;
- 主动模式(PORT)下,客户端会发
PORT a,b,c,d,p1,p2告知服务器“我开了一个数据端口”,该命令出现在控制流中,可被-A直接看到; - 被动模式(PASV)下,服务器返回
227 Entering Passive Mode (192,168,3,14,197,142),其中197*256+142 = 50558是数据端口,也明文可见。
只要控制通道没加密(vsftpd 默认未启用 FTPS/TLS),所有这些内容都可通过 -A 清晰还原。
不复杂但容易忽略











