一. 安装 TCPDump在 CentOS 中安装 TCPDump 非常简单。安装 TCPDumpyum install tcpdump -y安装完成后你可以通过输入tcpdump来验证安装是否成功tcpdump --version二. 常用参数参数描述-a尝试将网络和广播地址转换成名称。-A以 ASCII 码方式显示每一个数据包 (去除链路层头后)方便查看应用层的数据。-b在 ARPA Internet 协议上同时显示数据包匹配和数据链路层头。-B设置操作系统捕获缓冲区大小。-c收到指定的数据包数目后TCPDump 就会停止。-C在保存数据包之前检查文件大小如果超过指定大小则新建文件。-d将编译过的数据包匹配代码以人们能够理解的汇编格式输出。-dd以 C 语言形式输出数据包匹配代码。-ddd以十进制数形式输出数据包匹配代码。-D列出可用于抓包的接口。-e在输出行打印出数据链路层头部信息。-E指定解密 IPSEC 流量的方法。-f将外部的 Internet 地址以数字形式打印出来。-F使用文件作为过滤表达式的输入忽略命令行上的表达式。-G如果文件名可以被时间戳替换允许单个文件保存多个抓包结果。-h获取 TCPDump 的帮助信息。-H尝试检测 802.11s 草案网状网络。-i监听指定的网络接口。-I将网络接口置于无监控模式用于 802.11 无线网络。-j设置抓包的时间戳类型为“jiffies”。-J列出支持的时间戳类型。-k显示数据包时强制显示时间戳。-K不验证 IP、TCP 或 UDP 校验和。-L列出网络接口的已知数据链路类型。-m从文件模块中加载 SMI MIB 模块定义。-M如果可能使用指定的共享库或本地的办法来快速缓存会话密钥。-n不把网络地址转换成名字。-N不打印主机名的域名限定如hostname.localdomain。-O不运行数据包匹配代码优化器如果怀疑优化器有 bug 可以使用这个选项。-p不让网络接口进入混杂模式。-q快速输出打印较少的协议信息输出行会比较短。-r从指定的文件中读取数据包。-R设定 TCPDump 的默认历史数据包匹配行为为不匹配。-s设置数据包捕获长度。-S打印 TCP 的绝对序列号而不是相对序列号。-t在输出的每一行不打印时间戳。-tt在每一行中输出非格式化的时间戳。-T将指定的数据包强制解释为指定的类型。-U使-w选项产生的数据包数据文件以packet-buffered方式写入类似于实时数据流。-v输出稍微详细的信息例如显示 IP 数据包中的生存时间标识总长度。-vv输出更详细的信息。-vvv输出非常详细的信息。-w将捕获的数据包直接写入文件而不是显示出来。-W限制文件数量。-x以十六进制和 ASCII 码形式打印出每个数据包 (去掉链路层头部)但不包括连接层。-X以十六进制和 ASCII 码形式打印出每个数据包 (去掉链路层头部)也包括连接层。-Y使用数据链路层匹配代码即使这可能导致不正确的分片。-z修改各种数据包和文件输出统计的计数器。-Z改变用户 ID 或组 ID 到指定的用户或组。这些选项允许用户根据需要调整 TCPDump 的行为从而进行更精确的网络数据包捕获和分析。请注意使用某些选项可能需要特定的权限或系统配置且不同版本的 TCPDump 可能支持的选项有所不同。三. 过滤表达式基于协议的过滤tcp: 过滤 TCP 协议数据包。udp: 过滤 UDP 协议数据包。icmp: 过滤 ICMP 协议数据包。arp: 过滤 ARP 协议数据包。ip: 过滤 IP 协议数据包。ether: 过滤以太网帧。wlan: 过滤无线局域网数据包。基于地址的过滤host: 过滤特定主机的数据包。例如host 192.168.1.100。net: 过滤特定网络的数据包。例如net 192.168.1.0/24。port: 过滤特定端口的数据包。例如port 80。src和dst: 分别过滤源地址和目的地址的数据包。例如src 192.168.1.100或dst 192.168.1.100。基于端口的过滤tcp port: 过滤特定 TCP 端口的数据包。例如tcp port 80。udp port: 过滤特定 UDP 端口的数据包。例如udp port 53。逻辑操作符and: 同时满足两个条件。例如host 192.168.1.100 and tcp port 80。or: 满足任一条件。例如host 192.168.1.100 or host 192.168.1.101。not或!: 排除满足条件的数据包。例如not host 192.168.1.100。基于数据包内容的过滤contains: 检查数据包是否包含特定字符串。例如tcp[20:] contains GET。less,greater: 比较数据包长度。例如less 1500。,!,,: 比较操作符用于 IP 地址、端口号等。基于时间戳的过滤less,greater: 基于时间戳的比较。基于MAC地址的过滤ether host: 过滤特定 MAC 地址的数据包。例如ether host 00:11:22:33:44:55。基于VLAN的过滤vlan: 过滤特定 VLAN 的数据包。例如vlan 10。基于TCP标志的过滤tcp flags: 基于 TCP 标志位过滤。例如tcp[tcpflags] tcp-syn ! 0。基于IP选项的过滤ip options: 基于 IP 选项过滤。这些过滤方式可以组合使用以实现更复杂的过滤逻辑。例如tcpdumphost 192.168.1.100 and tcp port 80将捕获来自或发往192.168.1.100且端口为 80 的 TCP 数据包。通过灵活运用这些过滤表达式可以有效地捕获和分析网络中的特定流量。四、实例1. 捕获特定主机的所有流量tcpdump host 192.168.1.100这个命令将捕获所有源或目的地址为192.168.1.100的数据包。2. 捕获特定端口的流量tcpdump port 80这个命令将捕获所有端口为 80通常是 HTTP 服务的数据包。3. 捕获特定协议的流量tcpdump tcp这个命令将捕获所有 TCP 协议的数据包。4. 捕获特定网络的流量tcpdump net 192.168.1.0/24这个命令将捕获所有源或目的地址在192.168.1.0/24网络范围内的数据包。5. 捕获源地址或目的地址为特定主机的流量tcpdump src or dst host 192.168.1.100这个命令将捕获源或目的地址为192.168.1.100的数据包6. 捕获特定端口和主机的流量tcpdump src host 192.168.1.100 and port 80这个命令将捕获源地址为192.168.1.100且端口为 80 的数据包。7. 捕获特定 MAC 地址的流量tcpdump ether host 00:11:22:33:44:55这个命令将捕获源或目的 MAC 地址为00:11:22:33:44:55的数据包8. 捕获特定 VLAN 的流量tcpdump vlan 10这个命令将捕获 VLAN ID 为 10 的数据包9. 捕获特定 TCP 标志位的流量tcpdump tcp[tcpflags] (tcp-syn|tcp-ack) ! 0这个命令将捕获带有 SYN 或 ACK 标志位的 TCP 数据包10. 捕获 HTTP GET 请求tcpdump -nn -vv -X tcp[20:] matches ^GET |^Host: 这个命令将捕获包含 GET 或 Host: 字符串的 HTTP 请求数据包并以十六进制和 ASCII 码形式显示数据包内容11. 捕获并保存数据包到文件tcpdump -w capture.pcap这个命令将捕获所有数据包并保存到名为capture.pcap的文件中以便后续分析。12. 从保存的文件中读取数据包tcpdump -r capture.pcap这个命令将从capture.pcap文件中读取并显示数据包。13. 捕获特定时间范围内的数据包tcpdump -G 3600 -W 1 -w capture -C 200这个命令将每小时创建一个新的数据包文件每个文件大小不超过 200MB最多保留一个文件。14. 捕获特定 TCP 端口的 SYN 数据包tcpdump tcp[tcpflags] tcp-syn ! 0 and tcp port 80这个命令将捕获端口 80 上的 TCP SYN 数据包。OSI层核心功能TCP/IP对应层应用层用户接口HTTP/FTP应用层表示层数据加密/压缩整合至应用层会话层会话管理整合至应用层传输层端到端传输TCP/UDP传输层网络层路由寻址IP网络层数据链路层帧传输Ethernet网络接口层物理层比特流传输网络接口层