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

0 阅读3分钟

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

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

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

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

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

它主要解决三个问题:

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

抓包需要什么条件?

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

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

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

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

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

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

如何下载安装?

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

语言文档:docs.moonbitlang.com

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

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

安装完成后验证一下:

moon --version

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

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

moon new my-sniffer
cd my-sniffer
moon add chensuiyi/pcap

一个完整示例

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

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

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

运行它:

moon run

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

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

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