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, 安全规则引擎, 无后门, 网络工具, 网络编程, 逆向工具