3389微探针

/**************************************
/* 作者:半斤八兩
/* 博客:http://cnblogs.com/bjblcracked
/* 日期:2014-05-05  17:44
/**************************************


 

只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!


今天看到这个贴子作者寻问3389扫描的问题.
http://bbs.pediy.com/showthread.php?t=187377
想起来以前刚接触的电脑不久的时候,也是经常扫3389,
不过那时候还没有啥工具,我是写了个bat脚本,直接调用mstsc来扫描的. 
那个速度,慢的,是可想而知的...

正好今天就试着写了一个.(重温一下以前的"欢乐"时光) 

  1 CRITICAL_SECTION g_tagSection = {0};
  2 
  3 DWORD g_dwIp = 0;
  4 SOCKADDR_IN sPortAddr = {0};
  5 
  6 // 是否查看超时IP
  7 DWORD g_dwViewAllIP = 0;
  8 
  9 // 开放3389端口的IP个数
 10 DWORD g_dwOpenPortIPNumber = 0;
 11 
 12 void InitSocket()
 13 {
 14     WORD wVersionRequested;
 15     WSADATA wsaData;
 16     int err;
 17     
 18     wVersionRequested = MAKEWORD( 2, 2 );
 19     
 20     err = WSAStartup( wVersionRequested, &wsaData );
 21     if ( err != 0 ) {
 22         return;
 23     }
 24     
 25     if ( LOBYTE( wsaData.wVersion ) != 2 ||
 26         HIBYTE( wsaData.wVersion ) != 2 ) {
 27         WSACleanup();
 28         return;
 29     }
 30 }
 31 
 32 
 33 
 34 
 35 DWORD IsTest(SOCKET sPort, SOCKADDR_IN sPortAddr)
 36 {
 37     int flag = 1;
 38     struct timeval timeout;
 39     fd_set r;
 40     int ret;
 41     int error;
 42     int len = sizeof(int);
 43     int err = 0;
 44 
 45 
 46     err = connect(sPort, (SOCKADDR*)&sPortAddr, sizeof(sPortAddr));
 47     
 48     if (SOCKET_ERROR == err)
 49     {
 50         FD_ZERO(&r);
 51         FD_SET(sPort, &r);
 52         
 53         timeout.tv_sec = 1;
 54         timeout.tv_usec = 0;
 55         
 56         ret = select(0, 0, &r, 0, &timeout);
 57         
 58         if (ret > 0)
 59         {
 60             getsockopt(sPort, SOL_SOCKET, SO_ERROR, (PCHAR)&error, &len);
 61             
 62             if(error == 0) 
 63             {
 64                 
 65                 printf("IP: [%s]	Open Port 3389
", inet_ntoa(sPortAddr.sin_addr));
 66                 g_dwOpenPortIPNumber++;
 67                 
 68                 ret = TRUE;
 69             }
 70             else
 71             {
 72                 puts("time close port 3389");
 73                 ret = FALSE;
 74             }
 75         }
 76         else 
 77         {
 78             ret = FALSE;
 79         }
 80     }    
 81     else
 82     {
 83         puts("close port 3389");
 84         ret = TRUE;
 85     }
 86     
 87     
 88     if (!ret) 
 89     {
 90         if(g_dwViewAllIP)
 91             printf("IP: [%s]		连接超时!!!
", inet_ntoa(sPortAddr.sin_addr));
 92     }
 93 
 94     return TRUE;
 95 }
 96 
 97 
 98 void IsChildProc(VOID*)
 99 {
100     EnterCriticalSection(&g_tagSection);
101 
102     SOCKET sPort = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
103     
104     DWORD arp = 1;
105     if (ioctlsocket(sPort, FIONBIO, &arp) != 0)
106     {  
107         closesocket(sPort);  
108         return;  
109     }
110 
111 
112     if(g_dwIp >= 0xff000000)
113     {
114         Sleep(2000);
115         puts("---------------------------------------------------------------");
116         printf("

			总共扫到 [%d] 个主机开放端口!   :)


", g_dwOpenPortIPNumber);
117         system("pause");
118         exit(0);
119         return;
120     }
121     
122     g_dwIp += 0x01000000;
123     in_addr inaddr;
124     inaddr. s_addr = g_dwIp;
125     sPortAddr.sin_addr = inaddr;
126 
127     LeaveCriticalSection(&g_tagSection);
128 
129     IsTest(sPort, sPortAddr);
130 
131     closesocket(sPort);
132 }
133 
134 void IsFoundOpenPortProc(VOID*)
135 {
136     while(TRUE)
137     {
138         HANDLE Thread = (HANDLE)_beginthread(IsChildProc, 0, NULL);
139 
140         Sleep(100);
141     }
142 }
143 
144 int main(int argc, char* argv[])
145 {
146     system("color 0a & title 3389微探针 By 半斤八兩 & cls");
147 
148     InitSocket();
149 
150     puts("-------------------------------------------------");
151     puts("-                3389 微探针                    -");
152     puts("-                                               -");
153     puts("-      快速扫描3389端口     -_=||               -");
154     puts("-                                               -");
155     puts("-             By 半斤八兩                       -");
156     puts("-                                               -");
157     puts("-                   2014.05.05                  -");
158     puts("-------------------------------------------------");
159 
160     puts("请输入1个IP, 格式如下: 192.168.5.0");
161     BYTE szIp[MAXBYTE] = {0};
162     scanf("%s", szIp);
163     puts("您是否想查看所有IP?(包括超时IP), 输入0只显示开放3389的IP. 输入1显示所有IP");
164     scanf("%d", &g_dwViewAllIP);
165 
166     SYSTEM_INFO tagSystemInfo = {0};
167     GetSystemInfo(&tagSystemInfo);
168 
169     InitializeCriticalSection(&g_tagSection);
170 
171     g_dwIp = inet_addr((PCHAR)szIp);
172 
173 //    sPortAddr.sin_addr.S_un.S_addr = inet_addr("115.22.143.1");  // 3389 测试
174     sPortAddr.sin_family = AF_INET;
175     sPortAddr.sin_port = htons(3389);
176 
177     for (int i = 0; i < (int)tagSystemInfo.dwNumberOfProcessors * 20; ++i)
178     {
179         _beginthread(IsFoundOpenPortProc, 0, NULL);
180     }
181 
182     Sleep(INFINITE);
183 
184     DeleteCriticalSection(&g_tagSection);
185 
186 
187     return 0;
188 }

Bin和Code下载地址:

<看雪学院>

原文地址:https://www.cnblogs.com/BjblCracked/p/3709762.html