brett-buskirk/python-network-toolkit
GitHub: brett-buskirk/python-network-toolkit
一个用 Python 编写的实践型网络工具包,通过原始 socket 和 paramiko 实现数据包捕获、netcat、TCP 代理和 SSH 反向 shell,帮助用户深入理解底层网络通信原理。
Stars: 0 | Forks: 0
# Python 网络工具包
这是一个用 Python 编写的、注重实践且依赖轻量的小型网络工具集合——旨在
深入了解底层网络细节:数据包捕获、原始 TCP/UDP 客户端和服务器、TCP 代理,以及
SSH 客户端 / 服务器 / 反向 shell 实现。
## 安装
尚未发布到 PyPI —— 请使用 [pipx](https://pipx.pypa.io/) 直接从 GitHub 安装:
```
pipx install "git+https://github.com/brett-buskirk/python-network-toolkit.git"
```
通过在末尾追加 `@vX.Y.Z`(例如 `...git.git@v1.0.0`)来锁定特定版本。这会同时安装
`netk` 和 `netsniff` 控制台脚本。
## 用法
每个工具都作为统一 `netk` CLI 的子命令暴露:
```
netk --help # list every subcommand
netk sniff --count 10 # capture 10 packets
netk nc -l -p 5555 # netcat-style listener
netk tcp-proxy 127.0.0.1 9000 10.0.0.5 9000 False
```
`netk --help` 会转发到该工具自身的帮助信息。目前尚无 CLI 标志的工具
(`tcp-client`、`udp-client`、`ssh-server`、`ssh-client`、`ssh-revshell`)只需通过 `netk ` 运行。
## 工具
- [数据包嗅探器](#packet-sniffer-netk-sniff) (`netk sniff`) —— 跨平台数据包捕获工具,可解码并显示实时流量
- [Netcat](#netcat-netk-nc) (`netk nc`) —— netcat 风格的连接/监听工具
- [TCP 服务器](#tcp-server-netk-tcp-server) (`netk tcp-server`) —— 一个会对所有接收到的内容回复 ACK 的最小化 TCP 服务器
- [TCP 客户端](#tcp-client-netk-tcp-client) (`netk tcp-client`) —— 一个基础的 socket HTTP GET 演示
- [TCP 代理](#tcp-proxy-netk-tcp-proxy) (`netk tcp-proxy`) —— 一个带有十六进制转储输出的可检查 TCP 代理
- [UDP 客户端](#udp-client-netk-udp-client) (`netk udp-client`) —— 一个最小化的 UDP 客户端演示
- [SSH 服务器](#ssh-server-netk-ssh-server) (`netk ssh-server`) —— 一个用于反向 shell 演示的最小化 paramiko SSH 服务器
- [SSH 客户端](#ssh-client-netk-ssh-client) (`netk ssh-client`) —— 通过 SSH 运行单个命令
- [SSH 反向 Shell](#ssh-reverse-shell-netk-ssh-revshell) (`netk ssh-revshell`) —— SSH 服务器反向 shell 的 agent 端
### 数据包嗅探器 (`netk sniff`)
一个跨平台的数据包捕获实用程序,可解码并显示网络流量。使用 Python 和
原始 socket 构建 —— 无第三方依赖。
**要求:** root/管理员权限(原始 socket 必需)。在 Linux 上,如果您还不是
root,该工具会自动在 `sudo` 下重新启动自身。在 Windows 上,请以管理员身份运行您的终端。
| 选项 | 简称 | 描述 |
|--------|-------|-------------|
| `--host` | `-H` | 要监听的 IP 地址(默认:自动检测) |
| `--count` | `-c` | 要捕获的数据包数量(0 = 不限) |
| `--protocol` | `-p` | 按协议过滤:`tcp`、`udp` 或 `icmp` |
| `--port` | | 按端口号过滤(源或目的) |
| `--src-ip` | | 按源 IP 地址过滤 |
| `--dst-ip` | | 按目的 IP 地址过滤 |
| `--output` | `-o` | 输出格式:`human`、`json` 或 `raw`(默认:`human`) |
| `--hex` | `-x` | 在人类可读输出中包含十六进制转储 |
| `--save` | `-s` | 将数据包保存到 pcap 文件 |
| `--quiet` | `-q` | 抑制每个数据包的输出;仅显示统计信息 |
| `--no-stats` | | 退出时不打印统计信息 |
| `--interface` | `-i` | 要在其上捕获的网络接口(仅限 Linux,默认:自动检测) |
| `--version` | | 显示版本并退出 |
```
netk sniff # capture continuously until Ctrl+C
netk sniff --count 10 # capture exactly 10 packets then exit
netk sniff --protocol tcp --port 443 --hex # HTTPS traffic with a hex dump
netk sniff --output json --count 5 # JSON output, useful for piping to jq
netk sniff --save capture.pcap --count 100 # save a capture for Wireshark
netk sniff --interface lo --port 3000 # capture a local dev server's traffic
```
示例输出:
```
[2026-01-26T10:30:45.123456] TCP 192.168.1.100:54321 -> 142.250.80.46:443
Flags: [SYN] Seq: 123456789 Ack: 0 Win: 65535
TTL: 64 ID: 12345 Len: 60
```
**平台说明:** Linux 使用 `AF_PACKET` socket 并从路由表自动检测默认接口;
Windows 使用带有混杂模式(`SIO_RCVALL`)的 `AF_INET` 原始 socket,并绑定到
IP 地址而不是接口名称。
### Netcat (`netk nc`)
一个 netcat 风格的连接/监听工具。
| 选项 | 描述 |
|--------|-------------|
| `-t`, `--target` | 目标 IP(默认:`192.168.1.108`) |
| `-p`, `--port` | 目标/监听端口(默认:`5555`) |
| `-l`, `--listen` | 监听而不是连接 |
| `-c`, `--command` | 提供交互式命令 shell |
| `-e`, `--execute` | 执行一条命令并返回其输出 |
| `-u`, `--upload` | 将接收到的流保存到文件中 |
```
netk nc -t 192.168.1.108 -p 5555 -l -c # command shell
netk nc -t 192.168.1.108 -p 5555 -l -u mytest.txt # upload to a file
netk nc -t 192.168.1.108 -p 5555 -l -e "cat /etc/passwd" # execute one command
echo 'ABC' | netk nc -t 192.168.1.108 -p 135 # send text to a port
netk nc -t 192.168.1.108 -p 5555 # connect and chat interactively
```
### TCP 服务器 (`netk tcp-server`)
一个用于连接性测试的最小化 TCP 服务器 —— 无标志。监听 `0.0.0.0:9998`,打印所有
接收到的内容,并回复 `ACK`。
```
netk tcp-server
```
### TCP 客户端 (`netk tcp-client`)
一个基础的 socket 演示客户端 —— 无标志。连接到 `www.google.com:80`,发送原始 HTTP `GET /`
请求,并打印响应。展示了 HTTP 请求背后的 socket 调用,而没有任何
库将其抽象化。
```
netk tcp-client
```
### TCP 代理 (`netk tcp-proxy`)
一个可检查的 TCP 代理 —— 可用于了解未知协议、修改传输中的流量,或
为 fuzzer 构建测试用例。打印双向通过的所有内容的十六进制转储。
```
netk tcp-proxy
netk tcp-proxy 127.0.0.1 9000 10.12.132.1 9000 True
```
`receive_first` (`True`/`False`) 控制代理是否等待远程端先发送数据
(例如基于 banner 的协议),然后再转发客户端的第一条消息。
### UDP 客户端 (`netk udp-client`)
一个最小化的 UDP 客户端演示 —— 无标志。向 `127.0.0.1:9997` 发送 `AAABBBCCC` 并打印所有
返回的内容。目前还没有配套的 UDP 服务器 —— 请参阅 [ROADMAP.md](ROADMAP.md) 中的 v1.1.0
候选功能。
```
netk udp-client
```
### SSH 服务器 (`netk ssh-server`)
一个基于 `paramiko` 的最小化 SSH 服务器,旨在与 `ssh-revshell` 配对作为反向 shell 控制器
—— 目前尚无标志。当前硬编码为监听 `192.168.1.207:2222`,具有单一登录凭据
(`brett`/`sekret`);请修改 `src/network_toolkit/ssh/server.py` 以适配您自己的网络
(添加用于此目的的 CLI 标志是一个很好的 `v1.1.0` 候选功能)。
需要在 `src/network_toolkit/ssh/test_rsa.key` 处有一个 RSA 主机密钥(已被 gitignored —— 请自行生成,例如
`paramiko.RSAKey.generate(2048).write_private_key_file(...)`)。一旦客户端连接并
通过身份验证,它会交互式地提示*您*输入要发送给该客户端的命令。
```
netk ssh-server
```
### SSH 客户端 (`netk ssh-client`)
通过 `paramiko` 经由 SSH 运行单个命令并打印其输出 —— 无标志。交互式提示输入
用户名、密码、服务器 IP(默认为 `192.168.1.203`)、端口(默认为 `2222`)以及要运行的
命令(默认为 `id`)。
```
netk ssh-client
```
### SSH 反向 Shell (`netk ssh-revshell`)
`ssh-server` 反向 shell 的 agent 端 —— 在您想要远程控制的机器上运行它。
无标志;提示输入控制器的 IP 和端口,使用您当前的 OS 用户名,并提示输入
密码。一旦连接,它将执行控制器(`netk ssh-server`)发送的任何命令,直到
收到 `exit` 为止。
```
netk ssh-revshell
```
## 开发
一个根目录下的 `pyproject.toml` 覆盖了整个工具包(`src/` 布局,`pytest`,`ruff`,`mypy`):
```
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest
```
这也会将 `netk` 和 `netsniff` 控制台脚本安装到 `.venv/bin/` 中。每个工具也可以
直接作为模块运行,例如 `python -m network_toolkit.tcp.server` —— 这在开发过程中非常实用,
无需重新安装。请参阅 [ROADMAP.md](ROADMAP.md) 了解后续计划。
## 缘起
这些最初是针对网络和 SSH 层(socket、协议、帧封装)的专项练习——
现汇总于此,作为一个易读的参考工具包,而不是分散的一次性 repo。
## 安全与负责任地使用
这些是用于教育的、**授权使用**的工具 —— 仅在您拥有或
获得明确测试许可的系统和网络上使用它们。请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
MIT © 2026 Brett Buskirk
标签:Python, SSH, TCP/UDP, 安全规则引擎, 无后门, 网络工具, 网络编程, 逆向工具