Wireshark 在 macOS 上使用及问题解决
wireshark概述
Wireshark 是被广泛使用的免费开源网络协议分析软件(network protocol analyzer)或网络数据包分析工具,它可以让你在微观层面上查看网络上发生的事情。它的主要功能是截取网络数据包,并尽可能详细地展示网络数据包信息内容。
项目地址:https://github.com/wireshark/wireshark
本篇文章主要讲述在 Mac 使用 Wireshark 时可能遇到的一些问题,并通过一个实例介绍详细的抓包手法。
常见问题
抓包报错
报错信息
You do not have permission to capture on device "bridge100". ((cannot open BPF device) /dev/bpf0: Permission denied)
解决办法
查看 /dev/bpf* 文件的权限
ls -l /dev/bpf*
更新 /dev/bpf* 文件权限和组权限
sudo chmod g+r /dev/bpf* && sudo chgrp admin /dev/bpf*
网卡太多
使用 ifconfig
命令可以查看到 Mac 中的所有网络接口,可能会出现数量繁多,不清楚选哪个的问题。
先来看看我的网卡信息。
$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>inet 127.0.0.1 netmask 0xff000000inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
anpi1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether e2:5d:00:2d:ee:ecmedia: nonestatus: inactive
anpi0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether e2:5d:00:2d:ee:ebmedia: nonestatus: inactive
en3: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether e2:5d:00:2d:ee:cbnd6 options=201<PERFORMNUD,DAD>media: nonestatus: inactive
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether e2:5d:00:2d:ee:ccnd6 options=201<PERFORMNUD,DAD>media: nonestatus: inactive
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500options=460<TSO4,TSO6,CHANNEL_IO>ether 36:b2:2d:e4:95:80media: autoselect <full-duplex>status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500options=460<TSO4,TSO6,CHANNEL_IO>ether 36:b2:2d:e4:95:84media: autoselect <full-duplex>status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=63<RXCSUM,TXCSUM,TSO4,TSO6>ether 36:b2:2d:e4:95:80Configuration:id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0ipfilter disabled flags 0x0member: en1 flags=3<LEARNING,DISCOVER>ifmaxaddr 0 port 8 priority 0 path cost 0member: en2 flags=3<LEARNING,DISCOVER>ifmaxaddr 0 port 9 priority 0 path cost 0nd6 options=201<PERFORMNUD,DAD>media: <unknown type>status: inactive
ap1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether 3e:57:dc:50:21:95media: autoselect
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>ether 1c:57:dc:50:21:95inet6 fe80::493:9294:92cb:962d%en0 prefixlen 64 secured scopeid 0xc inet 10.201.102.126 netmask 0xffffe000 broadcast 10.201.127.255nd6 options=201<PERFORMNUD,DAD>media: autoselectstatus: active
awdl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>ether ce:41:0d:0a:06:8binet6 fe80::cc41:dff:fe0a:68b%awdl0 prefixlen 64 scopeid 0xd nd6 options=201<PERFORMNUD,DAD>media: autoselectstatus: active
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500options=400<CHANNEL_IO>ether ce:41:0d:0a:06:8binet6 fe80::cc41:dff:fe0a:68b%llw0 prefixlen 64 scopeid 0xe nd6 options=201<PERFORMNUD,DAD>media: autoselectstatus: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380inet6 fe80::bbb3:6daa:deb9:6132%utun0 prefixlen 64 scopeid 0xf nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000inet6 fe80::a590:7109:be1b:f900%utun1 prefixlen 64 scopeid 0x10 nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000inet6 fe80::ce81:b1c:bd2c:69e%utun2 prefixlen 64 scopeid 0x11 nd6 options=201<PERFORMNUD,DAD>
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500inet6 fe80::4562:973c:823c:162d%utun3 prefixlen 64 scopeid 0x12 nd6 options=201<PERFORMNUD,DAD>
utun4: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 9000inet 198.18.0.1 --> 198.18.0.1 netmask 0xfffe0000
vmenet0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500ether 3e:64:95:b7:62:33media: autoselectstatus: active
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500options=3<RXCSUM,TXCSUM>ether 1e:57:dc:05:87:64inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255inet6 fe80::1c57:dcff:fe05:8764%bridge100 prefixlen 64 scopeid 0x15 inet6 fd93:45e9:560c:404:1020:f068:469e:d583 prefixlen 64 autoconf secured Configuration:id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0ipfilter disabled flags 0x0member: vmenet0 flags=3<LEARNING,DISCOVER>ifmaxaddr 0 port 20 priority 0 path cost 0nd6 options=201<PERFORMNUD,DAD>media: autoselectstatus: active
(base)
如何选网卡
在众多网卡中,重点关注 en0
和 bridge100
这两个接口,其他多数可以忽略。
接口名 | 含义 / 作用 | IP 地址 | 状态 |
---|---|---|---|
lo0 | 本地回环接口(localhost) | 127.0.0.1 | active |
en0 | 无线网卡或主要物理网卡 | 10.201.102.126 | active |
bridge100 | Docker 创建的虚拟桥接网卡 | 192.168.64.1 | active |
awdl0 | Apple Wireless Direct Link,隔空投送用 | 有 IPv6 | active |
utun* | VPN 隧道接口(一般是 VPN 连接创建的) | 有 IPv6 | active |
vmenet0 | 虚拟机网络桥接接口(如 VMware 或 UTM) | 无 IPv4 | active |
en1/en2/en3... | 其他物理或虚拟网卡 | 无 IPv4 | ❌ 多数 inactive |
anpi0/anpi1 | Apple Silicon 特有接口 | 无 IP | ❌ inactive |
抓包实例
本例用于分析在漏洞复现或攻击检测中捕获的数据流量,步骤如下:
确定靶机 IP
可以通过查看靶机(如虚拟机)中的 IP 地址获取。
判断哪个网卡可以访问靶机
在本机 ifconfig
中找到能访问靶机 IP 的网卡,一般为 bridge100
。
在 Wireshark 中选择该网卡进行抓包
启动 Wireshark,选择对应的 bridge100
网卡,点击开始抓包即可。
如图这是我抓的工具攻击的流量数据,这样就可以单独拿出来分析了。
wireshrk命令速查
IP 地址过滤
- ip.src == 192.168.1.107:来源 IP 是 192.168.1.107
- ip.dst == 192.168.1.107:目标 IP 是 192.168.1.107
- ip.addr == 192.168.1.107:来源或目标 IP 是该地址
端口过滤
- tcp.port == 80:来源或目标 TCP 端口为 80
- tcp.srcport == 80:来源端口为 80
- tcp.dstport == 80:目标端口为 80
- udp.port == 15000:UDP 任意端口为 15000
- tcp.port >= 1 and tcp.port <= 80:TCP 端口范围过滤
协议过滤
- tcp/ udp/ icmp/ http/ dns/ ftp/ ssl
- not arp/!arp:排除 ARP 包
MAC 地址过滤
- eth.src == A0:00:00:04:C5:84:来源 MAC
- eth.dst == A0:00:00:04:C5:84:目标 MAC
- eth.addr == A0:00:00:04:C5:84:任意 MAC(源或目的)
包长度过滤
- udp.length == 26:UDP 数据长度
- tcp.len >= 7:TCP 负载长度
- ip.len == 94:IP 层长度
- frame.len == 119:整个数据帧长度
HTTP 过滤
按方法
- http.request.method == “GET”
- http.request.method == “POST”
按内容
- http contains “GET”:包含 GET 字符串
- http contains “HTTP/1.1 200 OK”:HTTP 成功响应
TCP 参数过滤
- tcp.flags.syn == 1:TCP SYN 包
- tcp.window_size == 0 and tcp.flags.reset != 1
数据内容过滤(进阶)
UDP:
- udp[8:3] == 20:21:22:UDP payload 前3字节为指定值
- udp contains 7c:7c:7d:7d:包含任意位置匹配内容
TCP:
- tcp[20:3] == 47:45:54:等价于 tcp[20:3] == “GET”(ASCII)
- tcp[20:] matches “^GET.*HTTP/1.1\x0d\x0a”:用正则匹配完整 GET 请求
正则匹配语法速查
表达式 | 说明 |
---|---|
\d | 数字字符 |
\D | 非数字 |
\w | 单词字符 (字母、数字、下划线) |
\s | 空白字符 |
. | 任意字符 |
.* | 任意数量任意字符(除换行) |
^ | 字符串开头 |
$ | 字符串结尾 |
例子:
tcp[20:] matches "^GET.*"
:匹配以 GET 开头的 TCP 数据udp[8:] matches "\\x14\\x05"
:匹配特定字节序列
相关文章:

Wireshark 在 macOS 上使用及问题解决
wireshark概述 Wireshark 是被广泛使用的免费开源网络协议分析软件(network protocol analyzer)或网络数据包分析工具,它可以让你在微观层面上查看网络上发生的事情。它的主要功能是截取网络数据包,并尽可能详细地展示网络数据包…...

不同电脑同一个网络ip地址一样吗?如何更改
想象一下,你住在同一栋公寓楼里,所有住户对外共享一个统一的小区地址(类似公网IP),但每家每户又有独立的门牌号(类似内网IP)。网络世界中的IP地址也遵循这一逻辑:同一局域网内的设备…...
Qt使用智能指针
第一步:导入头文件 #include <QScopedPointer> 第二步:创建对象 .h文件 QSharedPointer<Student> m_pClass; .cpp文件 m_pClass.reset(new Student(param1,param2,...,param_n)); 第三步:绑定信号槽 connect(m_pClass.data(), &Class::sign…...

微软 Azure AI Foundry(国际版)十大重要更新
2025 年被广泛视为 “AI 智能体元年”。在过去半年,微软密集发布众多创新技术,构建起从基础设施层、开发工具层到场景应用层的完整技术矩阵,加速推动诸多具备自主决策能力的 “超级助理” 智能体落地,形成完整的 AI 赋能生态&…...
Realsense D435i 使用说明
D435i 驱动安装 及 ROS使用 Ubuntu16.04适配https://blog.csdn.net/lemonxiaoxiao/article/details/107834936 过程中遇到fatal error ; 需要添加标签。 使用下面网址的博客解决了。https://blog.csdn.net/xuzhengzhe/article/details/135407342 最终如下: target…...

PostgreSQL如何更新和删除表数据
这节说下怎样更新和删除表数据,当然认识命令了,可以问AI帮忙写。 接上节先看下天气表weather的数据,增加了杭州和西安的数据: 一.UPDATE更新命令 用UPDATE命令更新现有的行。 假设所有 杭州 5月12日的温度低了两度,用…...
【leetcode】704. 二分查找
二分查找 题目代码 题目 704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums [-1,0,3,…...

Golang | 运用分布式搜索引擎实现视频搜索业务
把前面所设计好的搜索引擎引用进来开发一个简单的具体的视频搜索业务。代码结构: handler目录:后端接口,负责接收请求并返回结果,不存在具体的搜索逻辑。video_search目录:具体的搜索逻辑存放在这,包括reca…...
针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调
引言 题目听起来有点怪怪的,但是实际上就是对Helsinki-NLP/opus-mt-en-es模型进行微调。但是这个模型是单向的,只支持中到英的翻译,反之则不行。这样的话,如果要做中英双向互翻就需要两个模型,那模型体积直接大了两倍…...

【笔记】Trae+Andrioid Studio+Kotlin开发安卓WebView应用
文章目录 简介依赖步骤AS(Andriod Studio)创建项目AS创建虚拟机TRAE CN 修改项目新增按键捕获功能 新增WebViewWebView加载本地资源在按键回调中向WebView注入JS代码 最终关键代码吐槽 简介 使用Trae配合Andriod Studio开发一个内嵌WebView的安卓应用, 在WebView中加载本地资源…...
Github 2025-05-30Java开源项目日报Top10
根据Github Trendings的统计,今日(2025-05-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C++项目1TypeScript项目1Keycloak: 现代应用程序和服务的开源身份和访问管理解决方案 创建周期:3846 天开发语言:Java协议类型:Ap…...

Github上一些使用技巧(缩写、Issue的Highlight)自用
1. GIthub中的一些缩写 LGTM ! 最近经常看到一些迷之缩写,感觉挺有意思的,但是有时候看到一些没见过的缩写还是有点懵逼,不过缩写确实也是很方便去review,这里就记录汇总一下;顺便加了一些git的基操单词(加…...

TextIn OCR Frontend前端开源组件库发布!
为什么开源 TextIn OCR Frontend 前端组件库? 在 TextIn 社群中,我们时常接到用户反馈,调取 API 进行票据等文件批量识别后,需要另行完成前端工程,实现比对环节。为助力用户节省工程成本,TextIn 团队正式开…...
GitLens 教学(学习更新中)
GitLens 是什么? GitLens 是安装在 Visual Studio Code (VS Code) 中的一个功能极其强大的扩展程序,它直接内嵌在您的代码编辑器中,极大地增强了 VS Code 内置的 Git 功能。它的核心目标是: 深刻理解代码历史: 让您轻…...

C#中数据绑定的简单例子
数据绑定允许将控件的属性和数据链接起来——控件属性值发生改变,会导致数据跟着自动改变。 数据绑定还可以是双向的——控件属性值发生改变,会导致数据跟着自动改变;数据发生改变,也会导致控件属性值跟着自动改变。 1、数据绑定…...

VR 技术在农业领域或许是一抹新曙光
在科技日新月异的今天,VR(虚拟现实)技术已不再局限于游戏、影视等娱乐范畴,正逐步渗透到各个传统行业,为其带来全新的发展契机,农业领域便是其中之一。VR 技术利用计算机生成三维虚拟世界,给予用户视觉、听觉、触觉等多…...

【JVM】Java程序运行时数据区
运行时数据区 运行时数据区是Java程序执行过程中管理的内存区域 Java 运行时数据区组成(JVM 内存结构) Java 虚拟机(JVM)的运行时数据区由以下核心部分组成: 线程私有:程序计数器、Java虚拟机栈、本地方…...
NVIDIA英伟达describe-anything软件本地电脑安装部署完整教程
describe-anything是英伟达联合其他大学开发的一款图片视频内容分析总结软件,可通过AI描述任意图片视频选中区域内容,非常强大,下面是describe-anything本地电脑安装部署教程。 首先电脑上安装git https://github.com/git-for-windows/git/…...

计算机视觉入门:OpenCV与YOLO目标检测
计算机视觉入门:OpenCV与YOLO目标检测 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 计算机视觉入门:OpenCV与YOLO目标检测摘要引言技术原理对比1. OpenCV:传统图像处理与机器学…...
Java 中的 ThreadLocal 详解:从基础到源码
Java 中的 ThreadLocal 详解:从基础到源码 引言 在 Java 多线程编程中,ThreadLocal是一个经常被提及的概念。它提供了一种线程局部变量的机制,使得每个线程都可以独立地存储和访问自己的变量副本,而不会与其他线程产生冲突。本文…...
(二)开启深度学习动手之旅:先筑牢预备知识根基
1 数据操作 数据操作是深度学习的基础,包括数据的创建、索引、切片、运算等操作。这些操作是后续复杂模型构建和训练的前提。 入门 :理解如何使用NumPy创建数组,这是深度学习中数据存储的基本形式。掌握数组的属性(如数据类型dt…...
Spring Boot3.4.1 集成redis
Spring Boot3.4.1 集成redis 第一步 引入依赖 <!-- redis 缓存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 对象池 …...

【Prometheus+Grafana实战:搭建监控系统(含告警配置)】
什么是Prometheus和Grafana? Prometheus:一款开源的监控告警工具,擅长时序数据存储和多维度查询(通过PromQL),采用Pull模型主动抓取目标指标。Grafana:数据可视化平台,支持多种数据…...
操作系统原理第9章 磁盘存储器管理 重点内容
目录 (一)外存的组织方式种类 (二)FAT 系统(计算) (三)文件存储空间的管理方式 (一)外存的组织方式种类 连续组织方式 原理:在磁盘等外存上&…...

一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道
一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信。Queue 依赖锁和缓冲区,保障数据原子性和有序性;Pipe 实现点对点单…...

LangChain-Tool和Agent结合智谱AI大模型应用实例2
1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…...
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
在学习前端开发或者理解互联网工作原理的过程中,我们经常会遇到三个非常重要的概念:HTML、XML 和 JSON。它们看起来有点像,但其实干的事情完全不同。 🏁 一、他们是谁?什么时候诞生的? 名称全称诞生时间谁…...
C++中IO文件输入输出知识详解和注意事项
以下内容将从文件流类体系、打开模式、文本与二进制 I/O、随机访问、错误处理、性能优化等方面,详解 C 中文件输入输出的使用要点,并配以示例。 一、文件流类体系 C 标准库提供三种文件流类型,均定义在 <fstream> 中: std…...

centos7.6阿里云镜像各个版本介绍
(水一期) Index of /centos-vault/centos/7.6.1810/isos/x86_64/ File NameFile SizeDateParent directory/--0_README.txt2.4 KB2018-12-01 21:21CentOS-7-x86_64-DVD-1810.iso4.3 GB2018-11-26 07:55CentOS-7-x86_64-DVD-1810.torrent86.0 KB2018-12-…...

InnoDB引擎逻辑存储结构及架构
简化理解版 想象 InnoDB 是一个高效运转的仓库: 核心内存区 (大脑 & 高速缓存 - 干活超快的地方) 缓冲池 Buffer Pool (最最核心!): 作用: 相当于仓库的“高频货架”。把最常用的数据(表数据、索引)从…...