MoonBit抓包模块pcap,查看电脑的每一次联网通信

你的电脑每天都在联网:看视频、刷网页、发消息、后台更新。

这些联网动作,本质上都是你的电脑在跟远处的服务器互相传递数据。

传递的数据,在网络上叫数据包,就像公路上跑的一辆辆车。

抓包,就是站在路边把这些车一辆辆记下来:什么时候经过的、多大、装的什么。

chensuiyi/pcap 是 MoonBit 语言的一个抓包模块,专门负责这件事。

它主要解决三个问题:

  • 电脑上的软件都在跟谁通信
  • 通信量有多大
  • 通信发生在什么时候

抓包需要什么条件?

Windows 系统本身不能直接抓包,需要先装一个叫 Npcap 的驱动。

它是 Windows 的官方抓包驱动,相当于给系统装上了一个"数据包收费站",所有经过网卡的数据都要从它这里过。

装好 Npcap 之后,程序就能通过它拿到原始数据。

chensuiyi/pcap 模块做的事情,就是帮 MoonBit 程序跟 Npcap 对接。

它采用运行时动态加载的方式,程序启动后自己去系统里找 wpcap.dll 文件。

使用这个模块的人,只需要安装 Npcap 本体,不需要安装任何开发包。

如何下载安装?

MoonBit 是一门新的编程语言,语法风格类似 Rust 但更简洁,编译成 WebAssembly 后体积小、速度快,主要面向云原生场景。

语言文档:docs.moonbitlang.com

MoonBit 工具链在 Windows 上用 PowerShell 一条命令安装:

javascript 复制代码
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser; irm https://cli.moonbitlang.com/install/powershell.ps1 | iex

安装完成后验证一下:

css 复制代码
moon --version

能输出版本号就说明装好了。

然后新建一个项目,引入抓包模块:

bash 复制代码
moon new my-sniffer
cd my-sniffer
moon add chensuiyi/pcap

一个完整示例

整个抓包流程只有四步:加载、查网卡、打开、收包。

先写一个查看网卡列表的小程序:

scss 复制代码
fn main {
  match @pcap.load() {
    Err(msg) => {
      println("加载失败: {msg}")
      return
    }
    Ok(_) => ()
  }
  let devs = @pcap.devices()
  for d in devs {
    println("{d.name} ------ {d.description}")
  }
}

运行它:

arduino 复制代码
moon run

能看到本机所有网卡的名称和描述。

再进一步,打开第一个真实网卡,循环收包,把每个包的到达时间和大小打印出来:

scss 复制代码
fn main {
  match @pcap.load() {
    Err(msg) => {
      println("加载失败: {msg}")
      return
    }
    Ok(_) => ()
  }
  let devs = @pcap.devices()
  match @pcap.open(devs[0].name, 65535, true, 1000) {
    Err(msg) => println("打开失败: {msg}")
    Ok(pc) => {
      while true {
        match @pcap.next(pc) {
          Some(pkt) =>
            println("时间:{pkt.ts_sec}.{pkt.ts_usec} 长度:{pkt.len} 字节")
          None => () // 这一秒没有数据,继续等
        }
      }
    }
  }
}

运行后,只要电脑上有网络活动,屏幕上就会不断打印新抓到的数据包信息。

每收到一个数据包,你能拿到这些信息:

信息 说明
时间戳 这个包是什么时候经过的
捕获长度 实际记录下来的数据大小
原始长度 这个包本来有多大
原始数据 包里的全部字节内容

能做到什么效果?

网络卡顿时,可以用它确认是否有软件在后台偷偷上传数据。

写一个小程序抓包,就能看到哪个软件、在什么时间、传了多少数据。

网络程序调试遇到问题时,可以用它确认数据是否真的发出、对方是否回应。

持续运行一段时间抓包,把数据存下来,还能分析出电脑的主要通信对象。

使用这个模块需要注意什么?

  • 操作系统要求 Windows 10 或 11。
  • 必须安装 Npcap,官网地址:npcap.com
  • 部分系统需要管理员权限运行。

感谢阅读,我是前端之虎陈随易,公众号 陈随易,个人网站:https://chensuiyi.me

相关推荐
Aaron - Wistron2 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
新中地GIS开发老师2 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174462 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈2 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen3 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒4 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端
梅孔立4 小时前
两种免费的翻译API调用方式详解 - Edge官方API与个人缓存服务
前端·缓存·edge