Wireshark抓包过滤器FTP命令:语法示例

Wireshark抓包过滤器FTP命令:语法示例

【免费下载链接】wireshark Read-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. ⚠️ GitHub won't let us disable pull requests. ⚠️ THEY WILL BE IGNORED HERE ⚠️ Upload them at GitLab instead. 【免费下载链接】wireshark 项目地址: https://gitcode.com/gh_mirrors/wi/wireshark

FTP(File Transfer Protocol,文件传输协议)是网络通信中常用的文件传输协议,在网络故障排查和流量分析中,使用Wireshark抓取并过滤FTP流量是关键技能。本文将详细介绍Wireshark中FTP抓包过滤器的语法规则和实战示例,帮助普通用户及运营人员快速定位FTP相关问题。

FTP协议基础与Wireshark支持

FTP协议使用TCP端口21进行控制连接,端口20(主动模式)或动态端口(被动模式)进行数据传输。Wireshark通过专门的FTP协议解析器支持对FTP命令和响应的深度解析,相关实现位于epan/dissectors/packet-ftp.c

Wireshark的显示过滤器系统允许用户精确筛选FTP流量,核心原理是基于协议字段值进行匹配。显示过滤器引擎的实现位于epan/dfilter/,包括语法解析、语义检查和虚拟机执行等模块。

基础FTP过滤器语法

按协议类型过滤

最基本的FTP过滤方式是直接使用协议名称:

ftp

该过滤器会匹配所有FTP控制连接流量(TCP端口21)。若需同时过滤FTP数据连接,需结合TCP端口范围:

ftp or tcp portrange 1024-65535 and ftp-data

按命令和响应过滤

FTP控制连接中包含大量命令(如USER、PASS、LIST)和响应码(如200、401),可通过ftp.request.commandftp.response.code字段过滤:

ftp.request.command == "USER"  # 匹配用户登录命令
ftp.response.code == 230       # 匹配登录成功响应

相关字段定义可在epan/dissectors/packet-ftp.c中查看,例如:

{ &hf_ftp_request_command,
  { "Request command", "ftp.request.command", FT_STRINGZ, BASE_NONE,
    NULL, 0x0, NULL, HFILL }},

高级过滤技巧

结合TCP连接信息

通过TCP流索引关联控制连接和数据连接:

tcp.stream eq 5 and (ftp or ftp-data)

此过滤器会匹配第5个TCP流中的所有FTP控制和数据流量。TCP流分析功能由epan/dissectors/packet-tcp.c实现。

包含特定字符串的FTP流量

使用contains操作符过滤包含特定字符串的FTP命令或响应:

ftp.request contains "anonymous"  # 匹配匿名登录尝试
ftp.response contains "Permission denied"  # 匹配权限错误

复合条件过滤

使用逻辑运算符组合多个条件,例如匹配来自特定IP的失败登录:

ftp.response.code == 530 and ip.src == 192.168.1.100

实战示例与场景分析

示例1:捕获FTP登录过程

以下过滤器可捕获完整的FTP登录交互:

ftp.request.command in {"USER", "PASS"} or ftp.response.code in {331, 230, 530}

该过滤器会匹配用户名(USER)、密码(PASS)命令,以及对应的响应码(331需要密码、230登录成功、530登录失败)。

示例2:监控文件上传下载

结合FTP命令和文件名过滤:

(ftp.request.command == "STOR" or ftp.request.command == "RETR") and ftp.request.arg contains ".txt"

其中ftp.request.arg字段表示命令参数(如文件名),该字段定义位于epan/dissectors/packet-ftp.c

{ &hf_ftp_request_arg,
  { "Request argument", "ftp.request.arg", FT_STRINGZ, BASE_NONE,
    NULL, 0x0, NULL, HFILL }},

示例3:检测异常FTP行为

过滤包含可疑命令或大文件传输的流量:

(ftp.request.command == "DELE" or ftp.request.command == "RMD") or (ftp-data and ip.len > 100000)

过滤器调试与验证

编写复杂过滤器时,可使用Wireshark的"显示过滤器表达式"对话框(快捷键Ctrl+Shift+F)验证语法正确性。若需查看过滤器执行过程,可通过工具生成DFVM字节码:

make dftest && ./dftest 'ftp.request.command == "USER"'

dftest工具会输出过滤器的字节码指令,帮助理解过滤逻辑,相关实现位于epan/dfilter/dfvm.c

官方文档与资源

通过上述语法和示例,用户可高效过滤和分析FTP流量。实际使用中,建议结合Wireshark的"跟随TCP流"功能(右键菜单)查看完整FTP会话内容,该功能实现位于ui/qt/follow_stream_dialog.cpp

【免费下载链接】wireshark Read-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. ⚠️ GitHub won't let us disable pull requests. ⚠️ THEY WILL BE IGNORED HERE ⚠️ Upload them at GitLab instead. 【免费下载链接】wireshark 项目地址: https://gitcode.com/gh_mirrors/wi/wireshark

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值