miguelrr21/port-scanner-cpp
GitHub: miguelrr21/port-scanner-cpp
一个用 C++ 在 Windows 平台上实现的 TCP 端口扫描器,通过 socket 编程帮助开发者学习网络通信与安全基础知识。
Stars: 0 | Forks: 0
# port-scanner-cpp
使用 C++ 构建的 TCP 端口扫描器,用于学习网络和安全基础知识
我是在 Windows 11 Home 而不是 Linux 环境下完成的这个项目,因此我不得不使用 `` 和 `#include ` 库。
## V1 Single-port-scanner
首先,我们必须将要扫描的 IP 和 PORT 作为参数输入(例如:scanner.exe x.x.x.x 80)
那个端口“80”是作为字符串存储的,由于参数始终是 c-string,因此我们对端口参数使用 STOI(String to integer,字符串转整数)。
下一步是为通信创建一个 socket,但在创建它之前,我们必须先将其初始化(因为这是在 Windows 环境下,Linux 总是默认就绪的)。在确认 winsock 一切正常后,我们创建 socket:
socket(domain, type, protocol);
在检查它是否创建成功后,我们配置一个连接超时时间,以防端口被防火墙过滤(1000 毫秒)
现在我们使用 `sockaddr_in` 来准备目标 IP,它代表了 IP 和 PORT(sockets API 的要求)
destino.sin_port = htons(port);
将端口号转换为网络所期望的字节格式(big-endian),这是必须执行的(MANDATORY)。
然后我们使用 `inet_pton` 对 IP 进行同样的操作(将其转换为二进制)
接下来就是三次握手(three way handshake)了,它让我们知道该端口是打开还是关闭的。
如果出现错误,我们会检查 WSA 错误缓冲区,以确认是超时还是端口已关闭。
最后,我们必须关闭 socket 并清理 WSA。
## V2 Port-range-scanner
现在,程序会扫描一段端口范围(通过语法为“x-y”的参数指定)。我们使用解析(parsing)方法,先获取“-”的位置,然后对每个字符串使用 `stoi`,从而提取出要检查的第一个和最后一个端口。
之后,我们只需在创建 socket 之前添加一个从 portIni 到 portFin 的 `for` 循环,因为 socket 不能用于多个端口。
我还实现了一个 `chrono` 来检查每个端口建立连接的时间,并移除了超时设置。
最后,我们清理 WSA。
标签:C++, 插件系统, 数据擦除, 数据统计, 端口扫描, 网络安全, 网络编程, 隐私保护