netkitty
Version:
Network toolkit for Node.js — packet encode/decode (180+ protocols incl. industrial/OT), pcap/pcapng read-write, cross-packet analysis, live capture and replay.
98 lines (73 loc) • 4.83 kB
Markdown
<p align="center">
<img src="https://raw.githubusercontent.com/myq1991/netkitty/main/assets/NetKittyLogo.webp" alt="NetKitty" width="180">
</p>
<p align="center">
<a href="https://www.npmjs.com/package/netkitty"><img src="https://img.shields.io/npm/v/netkitty?style=flat-square&labelColor=162032&color=2979ff&logo=npm&logoColor=white" alt="npm version"></a>
<a href="https://www.npmjs.com/package/netkitty"><img src="https://img.shields.io/npm/dm/netkitty?style=flat-square&labelColor=162032&color=22c55e&logo=npm&logoColor=white" alt="npm downloads"></a>
<a href="https://github.com/myq1991/netkitty/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/netkitty?style=flat-square&labelColor=162032&color=2979ff" alt="license"></a>
</p>
# netkitty
The aggregate network toolkit — one package that re-exports the whole netkitty family through stable
subpaths: schema-driven protocol **codec**, **pcap**/pcapng read/write/parse, streaming cross-packet
**analysis**, live packet **capture**, network **interface** discovery, and packet **replay** / traffic
generation. Install `netkitty` and reach every subsystem via `netkitty/*` — no per-package wiring, and
existing imports keep working unchanged.
> 中文文档见 [README.zh-CN.md](./README.zh-CN.md)。
Each subpath is a thin re-export of a focused `@netkitty/*` package, so you can depend on the single
`netkitty` umbrella or on the individual packages — the symbols are identical either way.
## Install
```bash
npm i netkitty
```
## Subpaths
| Import from | Backed by | What it gives you |
| --- | --- | --- |
| `netkitty/codec` | [`@netkitty/codec`](../codec) | schema-driven `Codec` — decode bytes into protocol layers and encode them back |
| `netkitty/pcap` | [`@netkitty/pcap`](../pcap) + [`@netkitty/pcap-core`](../pcap-core) | streaming `PcapReader`/`PcapWriter` and the pcap/pcapng parser (`PcapParser`, plus the browser-safe `PcapParserCore`) |
| `netkitty/analysis` | [`@netkitty/analysis`](../analysis) | `Analysis` — streaming, cross-packet analysis over a capture file (conversations, endpoints, TCP streams) |
| `netkitty/capture` | [`@netkitty/capture`](../capture) | live packet capture over libpcap/Npcap |
| `netkitty/iface` | [`@netkitty/iface`](../iface) | read-only enumeration of host network interfaces, addresses and tx/rx stats |
| `netkitty/replay` | [`@netkitty/replay`](../replay) | replay pcap/pcapng/cap at recorded timing (or a target rate) and generate traffic |
The mapping is stable: `netkitty/codec` re-exports the whole `@netkitty/codec` package (the Codec
engine, the built-in header classes, and the conversion helpers); the other subpaths each front a
single package. Follow a link above for the full API of the package behind each subpath.
## Examples
Decode a packet through `netkitty/codec`:
```ts
import {Codec, HexToBuffer} from 'netkitty/codec'
const codec = new Codec()
const layers = await codec.decode(HexToBuffer('ffffffffffff0011223344550806...'))
layers[0].id // 'eth'
layers[0].data // {dmac: 'ff:ff:ff:ff:ff:ff', smac: '00:11:22:33:44:55', etherType: '0806'}
const {packet} = await codec.encode(layers) // decoded layers re-emit the original bytes
```
Read a capture file through `netkitty/pcap`:
```ts
import {PcapReader, IPcapPacketInfo} from 'netkitty/pcap'
const reader = new PcapReader({
filename: '/path/to/capture.pcap',
onPacket: async (info: IPcapPacketInfo): Promise<void> => {
const frame: Buffer = await reader.readPacketData(info) // pcap or pcapng, same call
console.log(`#${info.index} — ${frame.length} bytes`)
}
})
await reader.start()
```
Analyse a capture through `netkitty/analysis`:
```ts
import {Analysis} from 'netkitty/analysis'
const analysis = new Analysis()
await analysis.open('/path/to/capture.pcap') // index the file in a worker
const conversations = await analysis.conversations()
await analysis.close()
```
## Native versus pure-TypeScript subpaths
- **Native subpaths** — `netkitty/capture` (`@netkitty/capture`), `netkitty/iface` and `netkitty/replay`
— ship a native addon. There are **no prebuilt binaries**: the addon is compiled from source on your
machine at install time via `node-gyp`, so you need a working C/C++ toolchain (and, for capture/replay,
libpcap on macOS/Linux or Npcap on Windows). These subpaths are Node.js only.
- **Pure-TypeScript subpaths** — `netkitty/codec`
(`@netkitty/codec`) and the parser core inside `netkitty/pcap` (`@netkitty/pcap-core`) — touch nothing
but in-memory buffers and run unchanged in **node and the browser**. `netkitty/analysis` runs in both
environments too (it does the heavy work in a worker). `netkitty/pcap`'s streaming `PcapReader`/
`PcapWriter` use `node:fs` and are Node.js only, but the underlying `PcapParserCore` is browser-safe.