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++, 插件系统, 数据擦除, 数据统计, 端口扫描, 网络安全, 网络编程, 隐私保护