当前位置: 首页 > news >正文

【Day 64】Linux-抓包工具

一、tcpdump

        tcpdump 是 Linux 下最老牌、最通用的命令行抓包工具,无需图形界面,适合服务器环境,支持复杂的流量过滤规则,是运维和开发的 “标配” 工具。

(一)基本用法( root 权限)

        抓包命令的基本格式:tcpdump [选项] [过滤规则]

1、基础抓包(默认)

sudo tcpdump  # 抓取默认网卡的所有流量(按 Ctrl+C 停止)

-n

禁用域名解析:不将 IP 地址转换为域名(如不把 14.215.177.38 解析为 www.baidu.com),直接显示 IP 数字。

-n

(第二个 -n)禁用端口服务名解析:不将端口号转换为对应的服务名(如不把 22 解析为 ssh53 不解析为 dns),直接显示端口数字。

(1)无 -nn 的命令tcpdump -i eth0 port 80输出(会解析域名和端口名):

  • 10:00:01.123456 IP desktop.54321 > www.baidu.com.http: Flags [S], seq 123456789, win 65535, length 0

    • desktop 是本地主机名(由 IP 解析而来);

    • www.baidu.com 是目标 IP 解析后的域名;

    • http 是端口 80 解析后的服务名。

(2)有 -nn 的命令tcpdump -i eth0 port 80 -nn输出(仅显示数字):

  • 10:00:01.123456 IP 192.168.1.100.54321 > 14.215.177.38.80: Flags [S], seq 123456789, win 65535, length 0

    • 192.168.1.100 是本地 IP(无解析);

    • 14.215.177.38 是百度的 IP(无域名解析);

    • 80 是目标端口(无服务名解析)。

2、指定网卡抓包

        通过 -i 选项指定网卡(如 eth0、ens33、lo 本地回环):

# 抓取ens33网卡的所有流量
sudo tcpdump -i ens33# 抓取所有网卡(包括lo)的流量
sudo tcpdump -i any

3、过滤规则(核心功能)

        tcpdump 的强大之处在于精准过滤,避免抓取无关流量。常见过滤规则示例:

需求场景

命令示例

按 IP 过滤

sudo tcpdump -i ens33 src 192.168.1.100(抓取 源 IP 为 192.168.1.100 的流量)

sudo tcpdump -i ens33 dst 10.0.0.5(抓取 目标 IP 为 10.0.0.5 的流量)

按端口过滤

sudo tcpdump -i ens33 port 80(抓取 80 端口流量,HTTP)

sudo tcpdump -i ens33 port 443 or 22(抓取 443/22 端口流量,HTTPS/SSH)

按协议过滤

sudo tcpdump -i ens33 icmp(抓取 ICMP 协议,ping 包)

sudo tcpdump -i ens33 tcp(仅抓 TCP 流量)

组合过滤

sudo tcpdump -i ens33 tcp and port 80 and src 192.168.1.100(TCP+80 端口 + 指定源 IP)

4、保存抓包数据(供后续分析)

        通过 -w 选项将流量保存为 pcap 文件(二进制格式,需用工具解析)

# 抓取ens33网卡的TCP流量,保存到tcp_traffic.pcap
sudo tcpdump -i ens33 -nn tcp -w tcp_traffic.pcap

5、读取已保存的 pcap 文件

        通过 -r 选项读取之前保存的抓包文件:

sudo tcpdump -r tcp_traffic.pcap

(二)tcpdump 通用输出结构

[时间戳]  [协议]  [源IP.源端口] > [目标IP.目标端口]: [核心信息(Flags/类型/参数)], [附加参数], length [数据长度]
字段说明示例
时间戳抓包时间(格式:时:分: 秒。微秒)16:30:27.575788
协议网络层 / 传输层协议(ARP、IP、ICMP、TCP、UDP、DNS 等)IP、ARP、TCP
源地址:端口数据包的发送方(IP + 端口,-nn 参数下不解析域名 / 服务名,显示原始值)192.168.140.10.12345
目标地址:端口数据包的接收方(格式同源地址)192.168.140.1.53840
核心信息协议特有的关键标识(如 TCP 的 Flags、ARP 的 Request/Reply、DNS 的查询类型)Flags [.], Request who-has
附加参数协议相关的补充信息(如 TCP 的 ack 序号、win 窗口大小,DNS 的查询域名)ack 1499155623, win 262
数据长度数据包的有效数据长度(单位:字节,不含头部)length 52

1、常见协议 / 场景的典型输出

(1)ARP 协议:局域网 MAC 地址查询(高频)

        ARP 用于「IP→MAC 地址映射」,输出仅分 Request(查询) 和 Reply(响应) 两种类型,是局域网通信的基础。

① ARP Request(查询 MAC 地址)

16:30:20.198243 ARP, Request who-has 192.168.140.13 tell 192.168.140.10, length 46
  • 核心字段解析:

    • Request who-has [目标IP]:查询「目标 IP(192.168.140.13)」对应的 MAC 地址;

    • tell [源IP]:告知目标 IP“我是源 IP(192.168.140.10),请回复我你的 MAC”;

    • 固定长度:ARP 包长度通常为 46 字节(以太网最小帧长要求)。

② ARP Reply(响应 MAC 地址)

16:30:32.096012 ARP, Reply 192.168.140.10 is-at 00:0c:29:95:f2:77, length 46
  • 核心字段解析:

    • Reply [源IP] is-at [MAC地址]:响应方告知 “我是源 IP(192.168.140.10),我的 MAC 地址是 00:0c:29:95:f2:77”。

(2) ICMP 协议:ping 测试 / 网络连通性(最常用)

        ICMP 最常见的场景是 pingecho request 请求包 + echo reply 响应包),输出直接反映目标 IP 的可达性。

① ICMP echo request(ping 请求包)

16:30:27.866760 IP 192.168.140.10 > 106.39.171.134: ICMP echo request, id 1697, seq 1, length 64
  • 核心字段解析:

    • ICMP echo request:ping 的 “请求包”,用于测试目标 IP 是否可达;

    • id:ping 进程的标识(同一 ping 进程的 id 固定,区分不同 ping 任务);

    • seq:数据包序号(从 1 开始递增,用于判断是否丢包);

    • 长度:默认 64 字节(含 8 字节 ICMP 头部 + 56 字节数据,Windows 下为 32 字节数据)。

② ICMP echo reply(ping 响应包)

16:30:27.867800 IP 106.39.171.134 > 192.168.140.10: ICMP echo reply, id 1697, seq 1, length 64
  • 核心字段解析:

    • ICMP echo reply:ping 的 “响应包”,表示目标 IP 可达;

    • id 和 seq 与请求包一致,用于匹配 “请求 - 响应” 对。

(3)TCP 协议:可靠数据传输(HTTP/SSH/ 文件传输等)

        TCP 是面向连接的协议,输出的核心是 Flags 标志位(反映连接状态:建立、传输、关闭),常见 Flags 及对应场景如下:

TCP Flags

含义

典型场景

输出示例

[S]

SYN(建立连接请求)

客户端发起 TCP 连接(三次握手第 1 步)

10:00:00.123456 IP 192.168.1.100.54321 > 1.2.3.4.80: Flags [S], seq 12345, win 65535, length 0

[S.]

SYN+ACK(同意连接)

服务端响应连接

(三次握手第 2 步)

10:00:00.123460 IP 1.2.3.4.80 > 192.168.1.100.54321: Flags [S.], seq 67890, ack 12346, win 65535, length 0

[.]

ACK(确认收到数据)

传输中确认数据包(无数据)

16:30:27.575788 IP 192.168.140.10.12345 > 192.168.140.1.53840: Flags [.], ack 1499155623, win 262, length 0

[P.]

PSH+ACK(推送数据)

发送有效数据

(交给应用层)

16:30:27.577949 IP 192.168.140.10.12345 > 192.168.140.1.53840: Flags [P.], seq 0:52, ack 1, win 262, length 52

[F.]

FIN+ACK(关闭连接)

主动关闭连接

(四次挥手第 1 步)

10:00:01.123456 IP 192.168.1.100.54321 > 1.2.3.4.80: Flags [F.], seq 12346, ack 67891, win 65535, length 0

  • 关键补充:

    • seq:TCP 序列号(标记数据位置,确保有序);

    • ack:确认号(表示 “已收到对方 seq 为 X 的数据,下次请发 X+1”);

    • win:窗口大小(表示本地可接收的最大数据量,用于流量控制)。

(4) UDP 协议:无连接传输(DNS/SNMP/TFTP 等)

        UDP 无连接、无确认,输出结构简单,核心是 “端口 + 数据长度”,常见于 DNS 查询、SNMP 监控等场景。

① DNS 查询(UDP+53 端口)

16:30:27.856513 IP 192.168.140.10.52297 > 114.114.114.114.53: 20297+ A? jd.com. (24)
  • 核心字段解析:

    • 端口:DNS 服务默认端口 53(目标端口),源端口为客户端临时端口(52297);

    • 20297+:DNS 查询的事务 ID(匹配 “查询 - 响应”),+ 表示启用递归查询;

    • A? jd.com.:查询类型(A 记录 = IPv4 地址,AAAA=IPv6 地址),查询域名为jd.com;

    • (24):DNS 查询包的总长度(24 字节)。

② SNMP 监控(UDP+161 端口)

10:05:00.111222 IP 192.168.1.200.45678 > 192.168.1.10.161:  GetRequest(28)  system.sysDescr.0
  • 核心字段解析:

    • 端口:SNMP 服务默认端口 161(目标端口);

    • GetRequest(28):SNMP 操作类型(获取设备信息),数据包长度 28 字节;

    • system.sysDescr.0:SNMP 查询的 OID(获取设备系统描述)。

(5)HTTP 协议:网页访问(基于 TCP)

        HTTP 基于 TCP 传输,输出可通过 “端口 80” 和 “HTTP 方法(GET/POST)” 识别。

10:10:00.333444 IP 192.168.1.100.56789 > 1.2.3.4.80: Flags [P.], seq 1:180, ack 1, win 65535, length 179: HTTP: GET /index.html HTTP/1.1
  • 核心字段解析:

    • 端口:HTTP 默认端口 80(目标端口);

    • Flags [P.]:TCP 推送数据(HTTP 请求报文);

    • HTTP: GET /index.html HTTP/1.1:HTTP 请求方法(GET)、请求路径(/index.html)、协议版本(HTTP/1.1)。

2、高频抓包场景的输出总结

场景协议组合关键识别点输出示例核心片段
局域网 MAC 查询ARPRequest who-has/Reply ... is-atARP, Request who-has 192.168.1.10 tell 192.168.1.20
ping 测试ICMPecho request/echo replyICMP echo request, id 1697, seq 1
域名解析UDP+DNS端口 53、A? 域名114.114.114.114.53: 20297+ A? jd.com. (24)
网页访问TCP+HTTP端口 80、HTTP: GET/POSTHTTP: GET /index.html HTTP/1.1
SSH 远程登录TCP端口 22、Flags [S](连接)IP 192.168.1.100.2222 > 1.2.3.4.22: Flags [S]


二、图形化工具:Wireshark

// (可视化分析首选)

Wireshark • Go Deep | Download

   Wireshark 是跨平台(Linux/Windows/macOS)的图形化抓包工具,界面友好、功能强大,支持上千种协议解析(如 HTTP、HTTPS、DNS、TCP、UDP 等),适合需要可视化分析的场景(如桌面端调试)。

1. 核心特点

  • 图形化界面,操作直观,支持 “点选过滤”;
  • 强大的协议解析能力,可显示数据包的每层细节(链路层、网络层、传输层、应用层);
  • 支持导入 / 导出 pcap 文件(可与 tcpdump/tshark 互通);
  • 提供流量统计、趋势图、会话分析等高级功能。

2. 安装方法(Linux)

多数发行版通过包管理器安装:

# Ubuntu/Debian
sudo apt install wireshark# CentOS/RHEL
sudo dnf install wireshark# Fedora
sudo yum install wireshark

安装后,在应用菜单中找到 Wireshark 启动(需输入 root 密码,因抓包需管理员权限)。

3. 基本使用步骤

  1. 选择网卡:启动后,在主界面选择要抓包的网卡(如 ens33),点击 “开始” 按钮(鲨鱼鳍图标);
  2. 实时抓包:界面会实时显示抓取的数据包,包括 “时间戳、源 IP、目标 IP、协议、长度、信息”;
  3. 过滤流量
    • 用顶部 “过滤栏” 输入规则(语法与 tcpdump 类似,如 tcp port 80);
    • 或右键点击某条数据包,选择 “作为过滤器应用”(如 “选中源 IP”);
  4. 分析细节:双击某条数据包,可展开查看每层(链路层、IP 层、TCP 层、应用层)的具体字段(如 TCP 的序列号、HTTP 的请求头);
  5. 保存 / 导出:抓包完成后,点击 “停止”,通过 “文件→保存” 将数据存为 pcap 文件。

三、Wireshark 命令行版:tshark

//(批量 / 脚本化抓包)

   tshark 是 Wireshark 的命令行版本,兼具 tcpdump 的便捷性和 Wireshark 的强大协议解析能力,适合脚本化抓包批量处理流量数据

1. 核心特点

  • 无图形界面,支持命令行过滤和输出格式化;
  • 解析协议的能力比 tcpdump 更强(如能直接解析 HTTP 请求行、DNS 响应);
  • 可输出为文本、CSV、JSON 等格式,便于后续用脚本(如 Python)分析。

2. 常用示例

# 1. 抓取ens33网卡的HTTP流量,显示详细信息(解析HTTP请求)
sudo tshark -i ens33 -Y "http"# 2. 抓取8080端口流量,保存为pcap文件
sudo tshark -i ens33 -f "tcp port 8080" -w 8080_traffic.pcap# 3. 读取pcap文件,输出为CSV格式(便于Excel分析)
tshark -r 8080_traffic.pcap -T csv > traffic.csv# 4. 统计TOP 10源IP的流量(按数据包数量排序)
sudo tshark -i ens33 -c 1000 -T fields -e ip.src | sort | uniq -c | sort -nr | head -10

四、ngrep

 //轻量级工具

   ngrep 是 “network grep” 的缩写,结合了 tcpdump 的抓包能力和 grep 的文本搜索能力,适合快速查找数据包中的特定字符串(如 HTTP 请求中的关键词、DNS 域名)。

1. 核心特点

  • 支持基于正则表达式搜索数据包内容;
  • 轻量级,语法简单,适合快速定位特定流量。

2. 安装与示例

# 安装(Ubuntu)
sudo apt install ngrep
# ngrep 不在 CentOS 默认基础仓库中,需要先启用 EPEL 扩展仓库,再通过包管理器安装:
# CentOS 7
sudo yum install -y ngrep
# CentOS 8 及以上
sudo dnf install -y ngrep

   ngrep 的基本语法与 tcpdump 类似,但增加了文本搜索功能,核心格式:

ngrep [选项] '搜索字符串' [抓包过滤条件,同tcpdump]

常用选项说明:

  • -i <接口>:指定抓包接口(如 ens33,同 tcpdump 的 -i);
  • -q:安静模式,只显示匹配的数据包,不输出冗余信息;
  • -W byline:按行显示数据包内容(可读性更好,推荐使用);
  • -O <文件>:将匹配的数据包保存到文件;
  • -t:显示时间戳;
  • -I <文件>:从 tcpdump 保存的 .pcap 文件中读取数据并搜索。

典型场景实例:

1. 搜索所有包含 "GET" 或 "POST" 的 HTTP 请求(端口 80)

ngrep -i ens33 -q -W byline 'GET|POST' port 80
  • 作用:抓取 ens33 接口上,所有通过 80 端口(HTTP)且包含 "GET" 或 "POST" 方法的数据包,按行显示文本内容。

2. 搜索 DNS 查询中包含 "jd.com" 的域名

ngrep -i ens33 -q -W byline 'jd.com' udp port 53
  • 作用:抓取 DNS 协议(UDP 53 端口)中所有包含 "jd.com" 域名的查询或响应包,适合排查域名解析问题。

3. 过滤特定 IP 的数据包并搜索关键词

ngrep -i ens33 -q -W byline 'password' src 192.168.140.10 and port 8080
  • 作用:抓取源 IP 为 192.168.140.10、端口 8080 且包含 "password" 字符串的数据包(常用于检测敏感信息传输)。

4. 从 tcpdump 保存的文件中搜索内容

如果先用 tcpdump 保存了抓包文件(如 dump.pcap),可后续用 ngrep 搜索:

# 先用 tcpdump 抓包并保存
tcpdump -i ens33 -w dump.pcap port 80# 用 ngrep 从文件中搜索 "index.html"
ngrep -I dump.pcap -q -W byline 'index.html'

五、iftop

// 流量监控 + 抓包:

   iftop 主要用于实时监控网卡带宽,但也支持简单的抓包功能,适合快速定位 “谁在占用带宽”(如异常流量的 IP / 端口)。

1. 核心特点

  • 命令行界面,实时显示各连接的带宽使用情况(上行 / 下行);
  • 可按带宽排序,快速识别占用带宽最高的 IP / 端口;
  • 支持显示端口号和协议,辅助定位流量来源。

2. 安装与示例

# 安装(Ubuntu)
sudo apt install iftop# 监控ens33网卡的带宽(按回车切换显示模式:IP→端口→协议)
sudo iftop -i ens33

界面中,<= 表示下行流量,=> 表示上行流量,可直观看到每个连接的带宽占用。

http://www.dtcms.com/a/396182.html

相关文章:

  • 要建一个优惠卷网站怎么做wordpress评论表情插件
  • 重庆营销型网站建设价格微信分销平台排行
  • 网站前台模板下载alexa排名前三十
  • 如何学习网站建设专业门户网站开发公司
  • 并发事务问题、隔离级别
  • 自动驾驶的车辆电子电气(E/E)架构拓扑的设计原则 --- 系统划分与权衡参数
  • 定制网站和模板建站哪个更好用react做的网站上传
  • 郑州网站建设需要多少钱网站做二级域名干什么用
  • 为什么网站浏览不是做的那样网站页面
  • 做网站参考文献asp系统网站怎么做优化
  • NCSS 2025 最新安装教程(图文详解)
  • 河北城乡住房建设厅网站西部数码网站管理系统
  • 网站制作手机端wordpress 脚本
  • 网站制作 番禺wordpress自建站
  • 淘客网站app建设wordpress 777
  • 荆门做网站的公司中信建设有限责任公司陶杨
  • 湖南省建设厅田明革简介网站优化软件开发
  • 电子商城网站建站客crm网站
  • 外贸一般上什么网站运营托管公司
  • 北京手机版网站制作恩施seo
  • 为什么现在建设银行要下载网站激活码网站建设与管理维护说课
  • 公众号做网站华强北网上商城
  • 时尚类网站建设西安市网站制作公司
  • 【完整源码+数据集+部署教程】眼结膜分割系统: yolov8-seg-C2f-ODConv
  • 网站模版修改在wordpress上添加播放视频教程
  • 北流做网站网站建设模式怎么写
  • Pythoner GIS 开发里最核心的4个基础组件(理论+实操篇)
  • 有哪些做鞋机设备的网站网站建设是怎么赚钱的
  • 封面型网页网站有哪些内容ui设计是什么职业
  • 有什么网站可以做家装长治网站制作怎么做