Posts Tagged ‘端口扫描器’
C++网络安全工具编程(一)connect端口扫描器
星期日, 四月 28th, 2013 171 views端口扫描的种类有很多,其中最简单的即为基于TCP三次握手协议的connect扫描器。其原理为与服务端口建立一个socket连接,当连接上时即可判断端口打开,之后断开连接,进行下一端口的试探。
首先来看一个最简的c++客户端与目标服务器建立socket连接的基础代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include "stdafx.h" #include <string .h> #include <winsock .h> #include <iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //初始化Windows Sockets 动态库 WSADATA wsaData; if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { cout< <"找不到可使用的WinSock dll!"<<endl; return 1; } //创建套接字 SOCKET sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sClient==INVALID_SOCKET) { cout<<"创建客户端socket失败!"<<endl; return 1; } //连接服务器 SOCKADDR_IN addrServ; addrServ.sin_family=AF_INET; addrServ.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrServ.sin_port=htons(10046); if(connect(sClient,(sockaddr *)&addrServ,sizeof(sockaddr))==SOCKET_ERROR) { cout<<"连接服务器失败!"<<endl; closesocket(sClient); return 1; } else cout<<"连接服务器成功!"<<endl; //关闭套接字,释放资源 closesocket(sClient); WSACleanup(); return 0; |