一、什么是tcpdump?

tcpdump 是一个强大的命令行网络抓包分析工具,它允许用户捕获和分析经过计算机网络接口的数据包。

  • 捕获 流经网络接口的原始数据包

  • 解析 各种网络协议的数据包

  • 显示 或 保存 捕获的数据包内容

二、tcpdump的使用指南
1.基本语法
tcpdump [选项] [过滤表达式]
2.接口相关
tcpdump -i eth0          # 指定网卡接口
tcpdump -i any           # 监听所有接口
tcpdump -D               # 列出所有可用接口
3.输出控制
tcpdump -c 10            # 只捕获10个包
tcpdump -w file.pcap     # 保存到文件
tcpdump -r file.pcap     # 从文件读取
tcpdump -v               # 详细输出
tcpdump -vv              # 更详细输出
tcpdump -vvv             # 最详细输出
tcpdump -n               # 不解析主机名
tcpdump -nn              # 不解析主机名和端口名
tcpdump -A               # ASCII格式输出
tcpdump -XX              # 十六进制和ASCII格式输出
4.协议过滤
tcpdump icmp                       # ICMP包
tcpdump tcp                        # TCP包
tcpdump udp                        # UDP包
tcpdump arp                        # ARP包
5.逻辑运算符&&复杂组合
tcpdump host 192.168.1.1 and port 80          # 与
tcpdump host 192.168.1.1 or host 192.168.1.2  # 或
tcpdump not port 22                           # 非

tcpdump -i eth0 -c 5 -nn 'src host 192.168.1.100 and dst port 80'
tcpdump -i any -c 10 'tcp and (port 80 or port 443)'
    # 过滤表达式要用引号: 包含空格或特殊字符时

以上是我们tcpdump命令的基本使用情况!!

三、如何在linux系统使用tcpdump抓包查看通信流程
1.实操(常用命令参数)
sudo tcpdump -i ens33 -s 0 host 192.168.9.156 and port 60000 -w /mnt/hgfs/Project\ Code/out.pcap
        # -i ens33   捕获流经网卡名称为ens33的数据包
        # -s 0       表示捕获每个数据包的完整内容,不进行任何截断
        #host 192.168.59.233 and port 60000  IP为192.168.9.156 端口为60000
        #-w -w /mnt/hgfs/Project\ Code/out.pcap  将内容保存到此文件

在使用tcpdump需要权限,通常需要root权限或使用sudo(如下)

2.测试:

(1)在数据接收端使用tcpdump进行抓包监听

(2)使用本文章提供的网络调试组手工具进行测试(在作者的资源处可下载)

如图选择的是UDP协议,工具还提供别的协议提供参考 

(3)“ctrl + c” 结束进程 将抓到的内容使用Wireshark打开

上面的红框内容是抓到的包体大致信息

下面的红框的内容则是ISO网络结构模型的体现
 

可以看到除数据(Data)以外各协议的具体封装

3.使用wireshark自带参数简单筛选抓包内容

直接用命令抓网卡内容不过滤

常用示例:

IP 过滤 ip.addr == 192.168.1.1 - 显示所有与 192.168.1.1 相关的 IP 包(源或目标)。

ip.src == 192.168.1.100 - 显示源 IP 是 192.168.1.100 的包。

ip.dst == 8.8.8.8 - 显示目标 IP 是 8.8.8.8 的包。

端口过滤

tcp.port == 80 - 显示 TCP 源或目标端口是 80 的包。

udp.port == 53 - 显示 UDP 源或目标端口是 53 的包。

tcp.dstport == 3389 - 显示目标端口是 RDP (3389) 的 TCP 包。

协议过滤

http - 显示所有 HTTP 协议包。 dns - 显示所有 DNS 协议包。

arp 或 icmp - 显示 ARP 或 ICMP 包。

应用层内容过滤 (非常强大)

http.request.method == "GET" - 显示所有 HTTP GET 请求。

http contains "facebook" - 显示 HTTP 协议中包含 "facebook" 字符串的包。

dns.qry.name contains "google.com" - 显示查询的域名包含 "google.com" 的 DNS 请求。

TCP 标志过滤 (用于分析连接)

 组合条件

ip.src == 192.168.1.100 and tcp.dstport == 443 - 显示从 192.168.1.100 发往 443 端口的 TCP 包。

http and (ip.dst == 192.168.1.1 or ip.dst == 192.168.1.2) - 显示发往两个特定 IP 的 HTTP 流量。 dns and not (ip.addr == 192.168.1.1) - 显示所有不涉及 192.168.1.1 的 DNS 流量。

如图筛选出我测试发的内容

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐