当前位置: 首页 > news >正文

C++ 扫描局域网某个端口是否开放(如 5555 )(android adb) 线程并发加速

在这里插入图片描述
当然可以,C++ 扫描 IP 的同时判断端口是否开放(比如 5555) 是完全可行的。你可以通过 TCP 套接字连接测试 来实现端口探测,这比 ICMP Ping 更精准,也能用于 ADB 连接前判断设备是否可达。


✅ 用 C++ 扫描局域网某个端口是否开放(如 5555)

以下是一个完整示例,使用 WinSock 在 Windows 上测试每个 IP 的端口是否可连接:


✅ 示例代码(TCP 端口扫描 5555)

#include <iostream>
#include <string>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")bool isPortOpen(const std::string& ip, int port, int timeout_ms = 100) {SOCKET sock;sockaddr_in addr;WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sock == INVALID_SOCKET) return false;u_long mode = 1; // 非阻塞模式ioctlsocket(sock, FIONBIO, &mode);addr.sin_family = AF_INET;addr.sin_port = htons(port);inet_pton(AF_INET, ip.c_str(), &addr.sin_addr);connect(sock, (sockaddr*)&addr, sizeof(addr));fd_set writeSet;FD_ZERO(&writeSet);FD_SET(sock, &writeSet);timeval timeout;timeout.tv_sec = 0;timeout.tv_usec = timeout_ms * 1000;int result = select(0, NULL, &writeSet, NULL, &timeout);closesocket(sock);WSACleanup();return result > 0;
}int main() {std::string base_ip = "192.168.1.";for (int i = 1; i <= 254; ++i) {std::string ip = base_ip + std::to_string(i);if (isPortOpen(ip, 5555)) {std::cout << "[ADB FOUND] " << ip << ":5555 is OPEN!" << std::endl;std::string cmd = "adb connect " + ip + ":5555";system(cmd.c_str());} else {std::cout << "[ ] " << ip << ":5555 closed" << std::endl;}}return 0;
}

✅ 输出示例:

[ ] 192.168.1.1:5555 closed
[ADB FOUND] 192.168.1.123:5555 is OPEN!
...

✅ 编译说明:

  • Windows 平台,使用 Visual Studio 或 g++(MinGW)
  • 需要链接 ws2_32.lib
  • 如果你用命令行编译,可以使用:
g++ scan_adb.cpp -o scan_adb.exe -lws2_32

✅ 高级优化(可选):

  • 多线程加速(使用 std::thread 同时扫多个 IP)
  • 扫描多个端口(如 5555, 22, 80 等)
  • 判断连接后是否真的 ADB(可尝试发送 ADB 握手)

✅ 总结:

方法能否发现 ADB?扫描速度准确性推荐度
ICMP ping只能判断设备是否在线中等不能判断端口⭐⭐
TCP 端口扫描(如上)✅ 可判断 5555 是否开放快速(可并发)✅ ✅⭐⭐⭐⭐⭐

需要我帮你:

  • 把这段代码封装成 GUI 小工具?
  • 加上线程并发加速?
  • 加上 JSON 日志输出?

你可以告诉我,我可以一步步帮你构建成专业扫描器。

并行快速

好!我们现在来升级你这个 C++ 扫描器:


🎯 目标:

扫描整个局域网段(如 192.168.1.1~254),并发线程检测每个 IP 的 5555 端口是否开放,如果开放,自动执行 adb connect 命令。


✅ 技术实现要点:

  • 使用 std::thread 并发处理多个 IP 扫描
  • 控制线程数量避免资源耗尽(线程池风格)
  • TCP socket 检测端口是否开放(非阻塞 + select)

✅ 完整示例代码:支持多线程扫描 5555 端口

#include <iostream>
#include <string>
#include <thread>
#include <vector>
#include <mutex>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")std::mutex print_mutex;bool isPortOpen(const std::string& ip, int port, int timeout_ms = 100) {SOCKET sock;sockaddr_in addr;WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sock == INVALID_SOCKET) return false;u_long mode = 1; // 非阻塞ioctlsocket(sock, FIONBIO, &mode);addr.sin_family = AF_INET;addr.sin_port = htons(port);inet_pton(AF_INET, ip.c_str(), &addr.sin_addr);connect(sock, (sockaddr*)&addr, sizeof(addr));fd_set writeSet;FD_ZERO(&writeSet);FD_SET(sock, &writeSet);timeval timeout;timeout.tv_sec = 0;timeout.tv_usec = timeout_ms * 1000;int result = select(0, NULL, &writeSet, NULL, &timeout);closesocket(sock);WSACleanup();return result > 0;
}void scanIP(const std::string& ip, int port) {if (isPortOpen(ip, port)) {std::lock_guard<std::mutex> lock(print_mutex);std::cout << "[ADB FOUND] " << ip << ":" << port << " is OPEN!" << std::endl;std::string cmd = "adb connect " + ip + ":" + std::to_string(port);system(cmd.c_str());} else {std::lock_guard<std::mutex> lock(print_mutex);std::cout << "[ ] " << ip << ":" << port << " closed." << std::endl;}
}int main() {const std::string base_ip = "192.168.1.";const int port = 5555;const int max_threads = 50; // 同时并发的最大线程数std::vector<std::thread> threads;for (int i = 1; i <= 254; ++i) {std::string ip = base_ip + std::to_string(i);threads.emplace_back(scanIP, ip, port);// 控制线程数量(简单线程池)if (threads.size() >= max_threads) {for (auto& t : threads) t.join();threads.clear();}}// 等待所有线程结束for (auto& t : threads) {if (t.joinable()) t.join();}std::cout << "\n✅ 扫描完成。" << std::endl;return 0;
}

✅ 编译说明(Windows):

g++(MinGW)编译:

g++ adb_scanner.cpp -o adb_scanner.exe -lws2_32 -std=c++11

或者用 Visual Studio 新建 C++ 项目,将代码复制进去即可。


✅ 输出示例:

[ ] 192.168.1.1:5555 closed.
[ADB FOUND] 192.168.1.103:5555 is OPEN!
[ ] 192.168.1.10:5555 closed.
...
✅ 扫描完成。

✅ 可扩展方向(如果你需要我帮忙实现):

  • IP 段参数化(支持从命令行输入 192.168.0.0/24
  • 扫描多个端口(如 5555, 80, 22)
  • 多线程带进度条
  • JSON/CSV 输出结果
  • GUI 工具版(用 Qt 或 Win32)

需要我做这些扩展其中哪一个?或者打包成 EXE 给你直接用?

http://www.dtcms.com/a/293924.html

相关文章:

  • 3d移动translate3d
  • 秋招Day17 - Spring - Spring Boot
  • 【图像处理基石】如何实现一个车辆检测算法?
  • Nginx和Apache的区别
  • 多维任务筛选工具功能解析:如何通过智能筛选功能精准对接任务需求?
  • There are 2 missing blocks. The following files may be corrupted
  • 亚马逊AI新项目Starfish:重构电商Listing生态的机遇与挑战
  • 西班牙智能警示灯法案:引领欧洲智能交通新趋势
  • 0.0 深度学习资料网站
  • 工业控制系统的现状与发展趋
  • 分享一个tauri-plugin-http的工具类
  • python3写一个异步流式 http 接口服务调用大模型(async, stream, sanic)---6.2
  • 基于数据挖掘的短视频点赞影响因素分析【LightGBM、XGBoost、随机森林、smote】
  • 探索大语言模型(LLM):提升 RAG 性能的全方位优化策略
  • 深圳TCL外包岗位要去吗?
  • NLP基础全面解析:从概念到实践
  • 主要分布在背侧海马体(dHPC)CA1区域(dCA1)的时间细胞对NLP中的深层语义分析的积极影响和启示
  • WebGIS 中常用空间数据格式
  • Linux网络:网络层-IP协议
  • 金仓 KEMCC 非云环境初始化与纳管指南
  • 每日一算:华为-批萨分配问题
  • 异常的传递性|模块的概念和导入|自定义模块并导入
  • Nginx + PM2 实现Express API + React 前端 本地测试服务器搭建
  • 从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践
  • [特殊字符] 从数据库无法访问到成功修复崩溃表:一次 MySQL 故障排查实录
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十二课——车牌识别的FPGA实现(4)车牌字符的分割定位
  • 基于Tornado的WebSocket实时聊天系统:从零到一构建与解析
  • 简单理解现代Web应用架构:从简单到企业级
  • 棱镜技术在光谱相机中应用
  • 【Unity实战100例】Unity资源下载系统开发流程详解(移动端、PC端 ,局域网控制台服务)