这个不是多线程很慢.....
结果先:
- 000-failed 192.168.1.113 :: 20
- 111-success 192.168.1.113 :: 21
- 000-failed 192.168.1.113 :: 22
- 000-failed 192.168.1.113 :: 23
- 000-failed 192.168.1.113 :: 24
- 000-failed 192.168.1.113 :: 25
- 000-failed 192.168.1.113 :: 26
- 000-failed 192.168.1.113 :: 27
- 000-failed 192.168.1.113 :: 28
- 000-failed 192.168.1.113 :: 29
- 请按任意键继续. . .
程序:
- #include <WinSock2.h>
- #include <stdio.h>
- #include <time.h>
- #include <iostream>
- #pragma comment(lib, "ws2_32.lib")
- clock_t start, end;
- float costtime;
- void usage(void)
- {
- std::cout<<"\tusage: Tcpscan RemoteIP StartPort - EndPort\n";
- std::cout<<"\tExample: TcpScan 192.168.1.1 80-100 \n";
- }
- int main(int argc, char **argv)
- {
- char *host;
- int nStartPort, nEndPort;
- char *pPortIntervals;
- if(argc != 3)
- {
- usage();
- return 0;
- }
- // 处理端口参数
- pPortIntervals = argv[2]; // store
- if (strstr(argv[2], "-"))
- {
- nStartPort = atoi(argv[2]);
- for(; *pPortIntervals; )
- {
- if(*(pPortIntervals++) == '-')
- break;
- }
- nEndPort = atoi(pPortIntervals);
- //
- if(nStartPort<1 || nEndPort>65535)
- {
- std::cout<<"Port Error!"<<std::endl;
- return 0;
- }
- }
- // Target - IP
- host = argv[1];
- // socket;
- WSADATA ws;
- SOCKET socketUse;
- struct sockaddr_in addr;
- int result;
- long lResult;
- char tempBuf[256];
- // address ip MAKEWORE(1,1)和MAKEWORD(2,2)的区别在于,前者只能一次接收一次,不能马上发送,而后者能
- lResult = WSAStartup(MAKEWORD(2, 2), &ws);
- addr.sin_family = AF_INET;
- addr.sin_addr.s_addr = inet_addr(host);
- // 每个端口,开一个socket
- start = clock();
- for(int nPort = nStartPort; nPort < nEndPort; nPort++)
- {
- socketUse = socket(AF_INET, SOCK_STREAM, 0);
- addr.sin_port = htons(nPort);
- if(socketUse == INVALID_SOCKET)
- break;
- // connect
- result = connect(socketUse, (struct sockaddr*)&addr, sizeof(addr));
- if(result == 0)
- {
- // 根据返回值判断端口是否开放
- sprintf_s(tempBuf, "111-success %s :: %d \n", host, nPort);
- std::cout<<tempBuf;
- closesocket(socketUse);
- }else
- {
- sprintf_s(tempBuf, "000-failed %s :: %d \n", host, nPort);
- std::cout<<tempBuf;
- }
- }//end for
- end = clock();
- costtime = (float)(end - start);
- sprintf_s(tempBuf, " Cost time: %f second", costtime);
- WSACleanup();
- system("pause");
- return 1;
- }