一个基于C语言开发的高性能多线程网络端口扫描器,支持SYN半开放扫描和TCP连接扫描两种模式。
-
双模式扫描:
- TCP Connect扫描:使用系统网络API进行连接测试
- SYN半开放扫描:发送SYN包进行快速端口检测(需要root权限)
- 智能源IP选择:自动获取最优路由的本地IP地址
-
高性能:
- 多线程并发扫描(最多256个线程)
- 动态端口列表支持:无1024端口限制,支持全端口扫描(1-65535)
- 智能批处理和速率控制
- 优化的网络超时设置
- 性能接近nmap的SYN扫描能力
-
灵活的目标定义:
- 支持单个IP、IP范围、CIDR格式
- 支持端口列表和端口范围
- 支持逗号分隔的多目标
- 动态内存分配,无端口数量限制
-
专业功能:
- UDPXY服务专门检测
- 真正的半开连接SYN扫描
- 详细的调试信息和包解析
- 结果文件输出
- 静默和快速模式
makemake debugsudo make install./portscanner <ip> <start_port> <end_port> [选项]# 单个IP
./portscanner 192.168.1.1 80 443
# IP范围
./portscanner 192.168.1.1-192.168.1.254 22 80
# CIDR格式
./portscanner 192.168.1.0/24 80 443
# 多个IP组合
./portscanner -ip "192.168.1.1,192.168.2.1-192.168.2.10,10.0.0.0/24" -ports "22,80,443,8080"./portscanner 192.168.1.1 1-1000 -mode tcpsudo ./portscanner 192.168.1.1 1-1000 -mode syn基于实际测试,两种扫描模式的性能对比:
| 扫描模式 | 适用场景 | 性能表现 | 隐蔽性 | 权限要求 |
|---|---|---|---|---|
| TCP连接 | 通用网络扫描 | 优秀 | 一般 | 普通用户 |
| SYN扫描 | 大规模/局域网扫描 | 优秀+ | 高 | root权限 |
性能测试结果:
- 小规模扫描(<100端口):两种模式性能相当(~1.0秒)
- 中等规模扫描(100-1000端口):SYN扫描略有优势
- 大规模扫描(>1000端口):SYN扫描在并发性能上更优
- 本地网络扫描:SYN扫描检测速度更快
| 选项 | 说明 | 默认值 |
|---|---|---|
-ip <list> |
IP地址列表 | 使用位置参数 |
-ports <list> |
端口列表 | 使用位置参数 |
-mode <tcp|syn> |
扫描模式 | tcp |
-t <num> |
线程数 | 50 |
-cto <ms> |
连接超时(毫秒) | 500 |
-rto <ms> |
接收超时(毫秒) | 2000 |
-out <file> |
输出文件 | 无 |
-udpxy |
启用UDPXY检测 | 关闭 |
-v |
详细模式 | 关闭 |
-d |
调试模式 | 关闭 |
-fast |
快速模式 | 关闭 |
-q |
静默模式 | 关闭 |
# 扫描单个主机的常用端口
./portscanner 192.168.1.1 1 1000
# 扫描整个网段的SSH端口
./portscanner 192.168.1.0/24 22 22
# 全端口SYN扫描(新功能:支持全部65535端口)
sudo ./portscanner 192.168.1.1 1 65535 -mode syn -fast -q# 扫描5000个端口(突破了原1024端口限制)
sudo ./portscanner 203.0.113.100 4000 9000 -mode syn
# 快速扫描大量端口
sudo ./portscanner target.com 1 10000 -mode syn -fast -t 80# 针对速度优化的SYN扫描
sudo ./portscanner 192.168.1.0/24 1-1000 -mode syn -fast -t 100 -cto 300
# 针对准确性优化的TCP连接扫描
./portscanner 192.168.1.1 80,443,22,21 -mode tcp -cto 2000 -rto 5000# 扫描UDPXY服务(常用于IPTV)
./portscanner 192.168.1.0/24 4000 4010 -udpxy -out udpxy_results.txt
# 快速静默UDPXY扫描
./portscanner 192.168.1.0/24 4000 4010 -udpxy -fast -q -out results.txt# SYN扫描(需要root权限)- 推荐用于大规模扫描
sudo ./portscanner 10.0.0.0/8 22,80,443 -mode syn -t 100
# 多IP多端口扫描 - 支持无限端口数量
./portscanner -ip "192.168.1.1-192.168.1.50,10.0.0.1" -ports "22,80,443,8080,8000-8100" -out scan_results.txt
# 调试模式详细扫描 - 查看SYN包交互过程
sudo ./portscanner 192.168.1.1 80 443 -mode syn -d -v
# 隐蔽扫描 - SYN扫描不完成三次握手
sudo ./portscanner target.com 1-1000 -mode syn -t 20 -cto 3000- TCP Connect扫描:无特殊权限要求
- SYN扫描:需要root权限来创建原始套接字
sudo chown root:root portscanner
sudo chmod +s portscanner# 大网段快速SYN扫描 - 突破端口限制
sudo ./portscanner 10.0.0.0/16 1-5000 -mode syn -fast -t 200 -cto 200 -q
# 全端口扫描 - 新功能支持完整端口范围
sudo ./portscanner target.com 1-65535 -mode syn -fast -t 150
# 降低检测率的隐蔽SYN扫描
sudo ./portscanner target.com 1-1000 -mode syn -t 10 -cto 5000# 本地/局域网扫描 - 推荐SYN模式
sudo ./portscanner 192.168.1.0/24 1-1000 -mode syn
# 外部网络扫描 - 两种模式性能相当
./portscanner external.target.com 80,443,22 -mode tcp
sudo ./portscanner external.target.com 80,443,22 -mode syn
# 服务检测扫描 - 推荐TCP模式
./portscanner target 80,443 -mode tcp -udpxy
# 大规模快速扫描 - 推荐SYN模式
sudo ./portscanner targets 1-10000 -mode syn -fast- 小规模扫描(<100个目标):10-50线程
- 中等规模扫描(100-1000个目标):50-100线程
- 大规模扫描(>1000个目标):100-200线程
- 全端口扫描(1-65535端口):150-200线程(SYN模式)
- 网络受限环境:10-30线程
- 无端口限制:支持扫描完整的65535端口范围
- 智能源IP:自动选择最优网络路由的源IP地址
- 真正SYN扫描:完整的SYN包发送和响应解析
- 动态内存:根据扫描规模动态分配内存
开始扫描 1 个IP,5001 个端口,共 5001 个任务,使用 40 个线程
扫描模式: SYN扫描
[+] 203.0.113.100:4000 端口开放
[+] 203.0.113.100:5201 端口开放
[+] 203.0.113.100:8000 端口开放
[调试] 203.0.113.100:8000 收到SYN-ACK,端口开放
进度: 5001/5001 (100.0%) | 发现开放端口: 28
扫描完成!总共处理了 5001 个任务
=== 扫描结果摘要 ===
发现开放端口: 28
扫描成功率: 0.6%
192.168.1.1:22
192.168.1.1:80
192.168.1.100:4000
- TCP Connect:完整的三次握手连接测试
- SYN扫描:半开放扫描,发送SYN包检测端口状态
- 真正的SYN包构造和发送
- 专用响应监听线程
- SYN-ACK和RST包解析
- 智能源IP地址选择
- 超时控制:可配置的连接和接收超时
- 并发控制:智能的线程池和任务队列管理
- 非阻塞套接字操作
- 原始套接字的高效利用
- 连接重用和资源管理
- 自适应的延迟控制
- 批处理任务分发
- 动态内存分配优化
- 突破端口限制:从1024端口扩展到65535全端口支持
- 智能路由检测:自动获取到目标的最优源IP地址
- 真正SYN实现:不是简单的connect()调用,而是真正的SYN包操作
- 性能接近nmap:在本地网络扫描中达到与nmap相当的性能
Q: SYN扫描不工作 A: 确保以root权限运行,并检查系统是否支持原始套接字。程序会自动回退到TCP模式。
Q: 扫描速度慢
A: 尝试使用 -fast 选项,或调整 -t(线程数)和 -cto(超时)参数。SYN模式通常更快。
Q: 显示"当前版本最多支持1024个端口" A: 请使用最新版本,新版本已支持全端口扫描(1-65535)。
Q: 大量"连接被拒绝"错误 A: 目标可能有连接限制,尝试减少线程数或增加延迟,或使用SYN模式。
Q: 无法检测到已知开放的端口
A: 检查防火墙设置,尝试增加超时时间,或对比TCP和SYN两种模式的结果。
Q: SYN扫描显示"过滤"状态 A: 可能是网络防火墙过滤了SYN包,这是正常现象。可以尝试TCP模式对比。
# 启用详细调试信息(查看SYN包交互)
sudo ./portscanner target 80 80 -mode syn -d -v
# 测试单个端口的SYN扫描
sudo ./portscanner target 80 80 -mode syn -t 1 -d
# 对比两种扫描模式
./portscanner target 80 80 -mode tcp -d
sudo ./portscanner target 80 80 -mode syn -d
# 检查网络连通性
ping target
telnet target 80
nmap -sS -p 80 target # 对比nmap的SYN扫描结果此工具仅用于合法的网络安全测试和系统管理目的。使用者有责任确保:
- 只在拥有授权的网络和系统上使用
- 遵守当地法律法规
- 不用于恶意攻击或未授权的网络扫描
- 注意扫描频率,避免影响目标系统正常运行
- 语言:C (POSIX兼容)
- 依赖:pthread, 标准网络库
- 平台:Linux, Unix, macOS
- 许可:MIT License
欢迎提交问题报告和功能请求。在贡献代码时,请确保:
- 遵循现有的代码风格
- 添加适当的错误处理
- 更新相关文档
- 测试在不同平台上的兼容性
注意:SYN扫描功能需要原始套接字权限,在某些受限环境中可能无法使用。程序会自动回退到TCP连接扫描模式。
- ✅ 突破端口限制:支持全端口扫描(1-65535),移除了1024端口限制
- ✅ 真正SYN扫描:实现完整的SYN包发送和响应解析机制
- ✅ 智能源IP选择:自动获取到目标的最优路由源IP地址
- ✅ 性能优化:SYN扫描性能接近nmap水平
- ✅ 动态内存管理:根据扫描规模自动分配内存
- ✅ 增强调试:详细的SYN包交互调试信息
- TCP连接扫描
- 多线程支持
- UDPXY检测
- 基础SYN扫描框架