tcp-udp-ke-hu-duan-qing-qiu-jian-ce-gong-ju
# TCP/UDP 客户端请求检测工具
https://github.com/wkitt4/tcp-udp-detector
一个基于 Node.js 的通用网络协议检测工具,能够监听 TCP 和 UDP 连接,捕获并分析客户端的请求内容。
## 功能特性
✨ **核心功能**
- 📡 **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:直接使用
```bash
# 进入项目目录
cd tcp-udp-detector
# 启动工具
node src/cli.js
```
### 方式2:作为 npm 模块安装
```bash
# 全局安装
npm install -g ./
# 使用全局命令启动
tcp-udp-detector
```
### 方式3:本地项目使用
```bash
# 在你的项目中安装此包
npm install ../tcp-udp-detector
# 在代码中使用
const { createDetectorServer } = require('tcp-udp-detector');
```
## 使用方法
### CLI 命令行使用
#### 基础启动
```bash
# 默认启用 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
```
#### 自定义端口
```bash
# 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
```
#### 自定义监听地址
```bash
# 仅本地监听
node src/cli.js --host 127.0.0.1
# 监听特定网卡 IP
node src/cli.js --host 192.168.1.100
```
#### 其他选项
```bash
# 显示帮助信息
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 模块使用
#### 基础用法
```javascript
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);
```
#### 高级用法:直接使用检测器
```javascript
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 客户端测试
```bash
# 在一个终端启动检测服务器
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 客户端测试
```bash
# 在一个终端启动检测服务器
node src/cli.js
# 在另一个终端运行 UDP 客户端
node examples/udp-client.js
```
输出示例:
```
[UDP客户端] 向 localhost:4000 发送消息
[UDP客户端] 发送: Hello UDP Server!
[UDP客户端] 收到回复: 已接收消息 #1 (19 字节)
...
```
### 综合测试
```bash
# 同时测试 TCP 和 UDP
node examples/test-all.js
```
## 详细说明
### TCP 工作原理
1. **服务器启动**:在指定端口监听 TCP 连接
2. **客户端连接**:当客户端连接时,为其创建一个专属连接 ID
3. **数据接收**:监听客户端发送的所有数据
4. **数据分析**:将接收的数据转换为 UTF-8 字符串和 HEX 编码进行保存
5. **连接管理**:跟踪连接统计信息(接收字节数、数据包数等)
6. **数据回复**:向客户端回复确认消息
### UDP 工作原理
1. **服务器启动**:在指定端口监听 UDP 消息
2. **消息接收**:接收来自各个客户端的 UDP 消息
3. **客户端追踪**:为每个唯一的(IP:端口)组合维护客户端统计
4. **数据分析**:将消息数据转换并保存
5. **消息回复**:向发送者回复确认消息
### 事件系统
#### 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` 函数中添加:
```javascript
socket.setTimeout(30000); // 30秒超时
socket.on('timeout', () => socket.destroy());
```
## 扩展功能建议
- [ ] 支持 HTTPS/TLS 加密连接
- [ ] 支持 WebSocket 监听
- [ ] 数据持久化到文件/数据库
- [ ] Web UI 显示实时统计
- [ ] 数据导出功能(CSV/JSON)
- [ ] 流量图表分析
- [ ] 自定义数据过滤规则
## 许可证
MIT
## 作者
TCP/UDP 客户端请求检测工具
## 支持
如有问题或建议,欢迎反馈!