weskitt
发布于 2025-11-30 / 1 阅读
0

TCP/UDP 客户端请求检测工具

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

交互式命令

启动工具后,可在命令行输入以下命令:

命令 说明
statss 显示 TCP/UDP 统计信息
tcp 显示所有 TCP 连接详情
udp 显示所有 UDP 客户端详情
clearcls 清空屏幕
helph 显示命令帮助
exitquitq 退出程序

作为 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 工作原理

  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 函数中添加:

socket.setTimeout(30000); // 30秒超时
socket.on('timeout', () => socket.destroy());

扩展功能建议

  • 支持 HTTPS/TLS 加密连接
  • 支持 WebSocket 监听
  • 数据持久化到文件/数据库
  • Web UI 显示实时统计
  • 数据导出功能(CSV/JSON)
  • 流量图表分析
  • 自定义数据过滤规则

许可证

MIT

作者

TCP/UDP 客户端请求检测工具

支持

如有问题或建议,欢迎反馈!