|
发表于 2015-6-9 11:36:39
|
显示全部楼层
- #include <winsock.h>
- #pragma comment(lib, "wsock32")
- int main()
- {
- // 初始化套接字库
- WORD wVersionRequested;
- WSADATA wsaData;
- wVersionRequested = MAKEWORD( 2, 2 );
- WSAStartup( wVersionRequested, &wsaData );
- // 创建socket
- SOCKET PortScan = socket(AF_INET, SOCK_STREAM, 0);
- if (PortScan==INVALID_SOCKET)
- {
- printf("创建客户端socket失败!\n");
- return 0;
- }
- // 连接目标服务器
- char Ipbuff[255] = {0};
- int Port(0);
- printf("Enter the Ip Address\n");
- scanf("%s", Ipbuff);
- printf("Enter the Ip Address\n");
- scanf("%d", &Port);
- SOCKADDR_IN addrServ;
- addrServ.sin_family = AF_INET;
- addrServ.sin_addr.S_un.S_addr = inet_addr(Ipbuff); // 127.0.0.1
- addrServ.sin_port = htons(Port); // 80
- // 判断端口释放开放
- if(connect(PortScan,(sockaddr *)&addrServ,sizeof(sockaddr))==SOCKET_ERROR)
- printf("连接服务器失败!端口%d 关闭\n", Port);
- else
- printf("连接服务器成功!端口%d 开放\n", Port);
- //关闭套接字,释放资源
- closesocket(PortScan);
- WSACleanup();
- return 0;
- }
复制代码
给你简单写了一个 这就是端口扫描的基本原理
简单理解就是你指定一个IP地址, 制定一个端口号, 然后建立连接, 能连接上就说明开放端口, 连接不上就没开放
如果想批量扫描, 可以把Port房到一个for循环里, 从0到65535, 然后逐一判断
如果说是视频课件, 孙鑫C++的VC++视频, 其中有一课就是讲的socket编程, 不是很难 注释也比较清楚了
如果觉得没有界面, 就利用MFC搭一个界面, 不过我个人比较喜欢命令行模式, 凸显逼格 |
|