hardikghimire/project-tripundra
GitHub: hardikghimire/project-tripundra
基于 Linux io_uring 异步 I/O 机制的高性能端口扫描器,支持 TCP 状态机扫描、ARP 探测与原始数据包构造,适用于大规模并发网络侦察场景。
Stars: 1 | Forks: 0
# Project-tripundra
## 发送数据包
- **主要方法**:它使用 `io_uring_prep_sendmsg()` 进行异步 I/O
- **替代方法**:`scan.cpp` 中的 `send_tcp_packets()` 函数使用 `sendmsg()` 系统调用
- **针对# Project-tripundra
## 发送数据包
- **主要方法**:使用 `io_uring_prep_sendmsg()` 进行异步 I/O
- **替代方法**:`scan.cpp` 中的 `send_tcp_packets()` 函数使用 `sendmsg()` 系统调用
- **ARP 协议**:`send_arp_request()` 使用 `io_uring_prep_sendto()` 进行批量 ARP 请求
- **原始套接字**:通过 `socket(AF_INET, SOCK_RAW, IPPROTO_RAW)` 创建,用于构造自定义的 IP/TCP 头部
## 接收数据包
- **主要方法**:`receive_response()` 使用 `io_uring_prep_recvmsg()` 进行异步接收
- **原始套接字**:通过 `socket(AF_INET, SOCK_RAW, IPPROTO_TCP)` 创建,用于接收 TCP 响应
- **ARP 协议**:`receive_arp_reply()` 使用 `io_uring_prep_recvmsg()` 进行 ARP 响应接收
- **非阻塞 I/O**:使用带有 `O_NONBLOCK` 标志的 `fcntl()` 将套接字设置为非阻塞模式
## 处理与架构
- **通过 io_uring 实现异步 I/O**:
- 发送环:`io_uring_queue_init()` 用于批量发送
- 接收环:`io_uring_queue_init()` 用于批量接收
- 超时:`io_uring_wait_cqe_timeout()` 用于处理响应超时
- 队列深度可通过 `--send-uring` 和 `--rcv-uring` 进行配置
## 并发处理
- 使用 `moodycamel::ConcurrentQueue` 进行数据包任务排队
- 独立的发送线程用于数据包传输
- 使用 `std::atomic` 标志进行线程协调(`terminate_flag`)
- 使用 `std::mutex` 进行输出同步(`cout_mutex`)
## 缓冲区管理
- 自定义 `PacketBufferPool` 用于内存池化
- 线程局部缓冲池以减少竞争
- 并发队列用于缓冲区重用
# 功能特性
- **智能 EMWA RTT**:带有重试机制的自适应增量 RTT(之前的 learn incremental RTT)
- **状态机扫描**:通过正确的 4 次握手进行扫描(优雅的连接关闭)
- **原始访问**:为教育目的提供了适当的原始数据包访问代码
- **SIGINT 处理**:紧急协议激活,通过实时保护防止扫描器崩溃
- **RAII**:当对象超出作用域时,使用 RAII 进行自动清理(异常安全的资源管理)
- **输出**:以现代格式打印扫描输出
- **校验和操作**:用于测试的高级数学无效校验和模式及位操作
- **TCP 标志**:新增了两个 TCP 标志:ECE 和 CWR
- **公共数据库**:支持两个公共数据库(Security Trials 和 Shodan InternetDB)
- **DNS 解析**:提供灵活的 DNS 解析

# 默认扫描
# PublicDB 扫描 (--enum)
# 调试响应 (--debug 为选项,packet 为类别)
# 状态机扫描
# 状态机扫描握手
## 发送数据包
- **主要方法**:它使用 `io_uring_prep_sendmsg()` 进行异步 I/O
- **替代方法**:`scan.cpp` 中的 `send_tcp_packets()` 函数使用 `sendmsg()` 系统调用
- **针对# Project-tripundra
## 发送数据包
- **主要方法**:使用 `io_uring_prep_sendmsg()` 进行异步 I/O
- **替代方法**:`scan.cpp` 中的 `send_tcp_packets()` 函数使用 `sendmsg()` 系统调用
- **ARP 协议**:`send_arp_request()` 使用 `io_uring_prep_sendto()` 进行批量 ARP 请求
- **原始套接字**:通过 `socket(AF_INET, SOCK_RAW, IPPROTO_RAW)` 创建,用于构造自定义的 IP/TCP 头部
## 接收数据包
- **主要方法**:`receive_response()` 使用 `io_uring_prep_recvmsg()` 进行异步接收
- **原始套接字**:通过 `socket(AF_INET, SOCK_RAW, IPPROTO_TCP)` 创建,用于接收 TCP 响应
- **ARP 协议**:`receive_arp_reply()` 使用 `io_uring_prep_recvmsg()` 进行 ARP 响应接收
- **非阻塞 I/O**:使用带有 `O_NONBLOCK` 标志的 `fcntl()` 将套接字设置为非阻塞模式
## 处理与架构
- **通过 io_uring 实现异步 I/O**:
- 发送环:`io_uring_queue_init()` 用于批量发送
- 接收环:`io_uring_queue_init()` 用于批量接收
- 超时:`io_uring_wait_cqe_timeout()` 用于处理响应超时
- 队列深度可通过 `--send-uring` 和 `--rcv-uring` 进行配置
## 并发处理
- 使用 `moodycamel::ConcurrentQueue` 进行数据包任务排队
- 独立的发送线程用于数据包传输
- 使用 `std::atomic` 标志进行线程协调(`terminate_flag`)
- 使用 `std::mutex` 进行输出同步(`cout_mutex`)
## 缓冲区管理
- 自定义 `PacketBufferPool` 用于内存池化
- 线程局部缓冲池以减少竞争
- 并发队列用于缓冲区重用
# 功能特性
- **智能 EMWA RTT**:带有重试机制的自适应增量 RTT(之前的 learn incremental RTT)
- **状态机扫描**:通过正确的 4 次握手进行扫描(优雅的连接关闭)
- **原始访问**:为教育目的提供了适当的原始数据包访问代码
- **SIGINT 处理**:紧急协议激活,通过实时保护防止扫描器崩溃
- **RAII**:当对象超出作用域时,使用 RAII 进行自动清理(异常安全的资源管理)
- **输出**:以现代格式打印扫描输出
- **校验和操作**:用于测试的高级数学无效校验和模式及位操作
- **TCP 标志**:新增了两个 TCP 标志:ECE 和 CWR
- **公共数据库**:支持两个公共数据库(Security Trials 和 Shodan InternetDB)
- **DNS 解析**:提供灵活的 DNS 解析

# 默认扫描
# PublicDB 扫描 (--enum)
# 调试响应 (--debug 为选项,packet 为类别)
# 状态机扫描
# 状态机扫描握手
标签:ARP, C++, DNS解析, IO_URING, Raw Socket, TCP, 内存池, 内核API, 原始套接字, 并发编程, 开源项目, 异步I/O, 插件系统, 数据擦除, 数据泄露防护, 数据统计, 无锁队列, 端口扫描, 网络安全, 网络扫描器, 网络探测, 隐私保护