TCP/UDP 客户端请求检测工具
一个基于 Node.js 的通用网络协议检测工具,能够监听 TCP 和 UDP 连接,捕获并分析客户端的请求内容。
项目地址:https://github.com/wkitt4/tcp-udp-detector
功能特性
✨ 核心功能
- 📡 TCP 服务器:监听 TCP 连接,捕获客户端请求数据
- 📡 UDP 服务器:监听 UDP 消息,捕获客户端发送的数据
- 🔧 自定义端口:支持为 TCP 和 UDP 分别配置不同端口
- 🎯 自定义监听地址:支持指定监听的 IP 地址
- 📊 实时统计:显示连接数、接收数据量、数据包统计等
- 💬 交互式 CLI:提供命令行交互界面,实时查看连接信息
- 📦 作为模块使用:可作为 npm 包集成到其他项目中
项目结构
tcp-udp-detector/
├── src/
│ ├── cli.js # CLI 命令行工具入口
│ ├── tcp-detector.js # TCP 服务器检测器
│ ├── udp-detector.js # UDP 服务器检测器
│ └── index.js # 主模块入口
├── examples/
│ ├── tcp-client.js # TCP 客户端测试示例
│ ├── udp-client.js # UDP 客户端测试示例
│ └── test-all.js # 综合测试示例
├── package.json # 项目配置
└── README.md # 本文件
安装
方式1:直接使用
# 进入项目目录
cd tcp-udp-detector
# 启动工具
node src/cli.js
方式2:作为 npm 模块安装
# 全局安装
npm install -g ./
# 使用全局命令启动
tcp-udp-detector
方式3:本地项目使用
# 在你的项目中安装此包
npm install ../tcp-udp-detector
# 在代码中使用
const { createDetectorServer } = require('tcp-udp-detector');
使用方法
CLI 命令行使用
基础启动
# 默认启用 TCP(3000) 和 UDP(4000)
node src/cli.js
# 仅启用 TCP
node src/cli.js --tcp 3000 --no-udp
# 仅启用 UDP
node src/cli.js --udp 4000 --no-tcp
自定义端口
# TCP 监听 5000 端口
node src/cli.js --tcp 5000
# UDP 监听 6000 端口
node src/cli.js --udp 6000
# 同时自定义 TCP 和 UDP 端口
node src/cli.js --tcp 5000 --udp 6000
自定义监听地址
# 仅本地监听
node src/cli.js --host 127.0.0.1
# 监听特定网卡 IP
node src/cli.js --host 192.168.1.100
其他选项
# 显示帮助信息
node src/cli.js --help
node src/cli.js -h
# 显示版本号
node src/cli.js --version
node src/cli.js -v
交互式命令
启动工具后,可在命令行输入以下命令:
| 命令 | 说明 |
|---|---|
stats 或 s |
显示 TCP/UDP 统计信息 |
tcp |
显示所有 TCP 连接详情 |
udp |
显示所有 UDP 客户端详情 |
clear 或 cls |
清空屏幕 |
help 或 h |
显示命令帮助 |
exit 或 quit 或 q |
退出程序 |
作为 Node.js 模块使用
基础用法
const { TCPDetector, UDPDetector, createDetectorServer } = require('tcp-udp-detector');
// 方法1:使用快速创建函数
async function start() {
const server = await createDetectorServer({
tcpPort: 3000,
tcpHost: '0.0.0.0',
udpPort: 4000,
udpHost: '0.0.0.0',
enableTCP: true,
enableUDP: true
});
// 停止服务器
// await server.stop();
}
start().catch(console.error);
高级用法:直接使用检测器
const { TCPDetector, UDPDetector } = require('tcp-udp-detector');
// 创建 TCP 检测器
const tcpDetector = new TCPDetector({
port: 3000,
host: '0.0.0.0'
});
// 监听事件
tcpDetector.on('connection', (clientInfo) => {
console.log(`新连接: ${clientInfo.remoteAddress}:${clientInfo.remotePort}`);
});
tcpDetector.on('data', ({ connectionId, packet }) => {
console.log(`接收数据: ${packet.data}`);
});
tcpDetector.on('disconnect', ({ clientInfo }) => {
console.log(`连接断开: 接收 ${clientInfo.bytesReceived} 字节`);
});
// 启动
tcpDetector.start();
// 获取统计信息
const stats = tcpDetector.getStats();
console.log(stats);
// 获取所有连接
const connections = tcpDetector.getConnections();
console.log(connections);
测试客户端示例
TCP 客户端测试
# 在一个终端启动检测服务器
node src/cli.js
# 在另一个终端运行 TCP 客户端
node examples/tcp-client.js
输出示例:
[TCP客户端] 连接到 localhost:3000
[TCP客户端] 连接成功
[TCP客户端] 发送: Hello TCP Server! I am a test client.
[TCP客户端] 发送: TCP Message 1: 14:30:45
[TCP客户端] 接收: 已接收 47 字节
...
UDP 客户端测试
# 在一个终端启动检测服务器
node src/cli.js
# 在另一个终端运行 UDP 客户端
node examples/udp-client.js
输出示例:
[UDP客户端] 向 localhost:4000 发送消息
[UDP客户端] 发送: Hello UDP Server!
[UDP客户端] 收到回复: 已接收消息 #1 (19 字节)
...
综合测试
# 同时测试 TCP 和 UDP
node examples/test-all.js
详细说明
TCP 工作原理
- 服务器启动:在指定端口监听 TCP 连接
- 客户端连接:当客户端连接时,为其创建一个专属连接 ID
- 数据接收:监听客户端发送的所有数据
- 数据分析:将接收的数据转换为 UTF-8 字符串和 HEX 编码进行保存
- 连接管理:跟踪连接统计信息(接收字节数、数据包数等)
- 数据回复:向客户端回复确认消息
UDP 工作原理
- 服务器启动:在指定端口监听 UDP 消息
- 消息接收:接收来自各个客户端的 UDP 消息
- 客户端追踪:为每个唯一的(IP:端口)组合维护客户端统计
- 数据分析:将消息数据转换并保存
- 消息回复:向发送者回复确认消息
事件系统
TCPDetector 事件
listening: 服务器开始监听connection: 新客户端连接data: 接收到数据disconnect: 客户端断开连接error: 发生错误stopped: 服务器已关闭
UDPDetector 事件
listening: 服务器开始监听message: 接收到 UDP 消息error: 发生错误stopped: 服务器已关闭
应用场景
- 🧪 协议测试:测试和调试 TCP/UDP 应用程序
- 🔍 请求监听:捕获和分析客户端的网络请求
- 📊 流量分析:监控网络流量和连接统计
- 🛠️ 开发调试:在开发过程中调试网络通信
- 📡 网络监控:实时监控网络连接状态
常见问题
Q: 如何在远程服务器上运行?
A: 使用 --host 0.0.0.0 让工具监听所有网卡,然后客户端使用服务器的 IP 地址连接。
Q: 能否同时监听多个端口?
A: 可以,每个 TCP 或 UDP 协议支持一个端口。如果需要监听多个端口,可以启动多个工具实例。
Q: 接收到的数据如何保存?
A: 当前实现在内存中保存。可修改代码将数据写入文件或数据库。
Q: TCP 连接超时设置
A: 需要修改 socket 配置,可在 tcp-detector.js 中的 handleNewConnection 函数中添加:
socket.setTimeout(30000); // 30秒超时
socket.on('timeout', () => socket.destroy());
扩展功能建议
- ☐ 支持 HTTPS/TLS 加密连接
- ☐ 支持 WebSocket 监听
- ☐ 数据持久化到文件/数据库
- ☐ Web UI 显示实时统计
- ☐ 数据导出功能(CSV/JSON)
- ☐ 流量图表分析
- ☐ 自定义数据过滤规则
许可证
MIT
作者
TCP/UDP 客户端请求检测工具
支持
如有问题或建议,欢迎反馈!