首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

扫描网络端口代码,所有手打,高手您受累看看

2013-01-01 
扫描网络端口代码,全部手打,高手您受累看看以下为《小小黑客之路》扫描代码,在下原封不动在vs2008打出,好不

扫描网络端口代码,全部手打,高手您受累看看
以下为《小小黑客之路》扫描代码,在下原封不动在vs2008打出,好不容易调试得没有bug了,结果ui界面中按钮全部哑火,
任凭怎么点都没一点反应!到底怎么回事,有没有高手能给我这个小白指点一下呢?
源代码:

#include <windows.h>
#include "resource.h"
#include <iostream>
#include <stdio.h>
using namespace std;
#include <commctrl.h>
#include <WinSock.h>

#pragma comment(lib,"WS2_32")
#include <string.h>


BOOL InitPortScan()
{WSADATA WsaData;
 WORD WsaVersion=MAKEWORD(2,2);
 if(WSAStartup(WsaVersion,&WsaData)!=0)
 {MessageBoxA(NULL,"WSAStartup fail;",NULL,NULL);
  return FALSE;
 }
 return TRUE;
}
struct MainThreadParam
{DWORD StartIp;
 DWORD EndIp;
 DWORD StartPort;
 DWORD EndPort;
 HANDLE hCopyEvent;
};


struct ThreadParam
{DWORD Ip;
 DWORD Port;
 HANDLE hCopyOkEvent;
 HANDLE hThreadNum;
};

DWORD WINAPI PortScanthread(LPVOID LpParam)
{ThreadParam Param;
 MoveMemory(&Param,LpParam,sizeof(Param));
 SetEvent(Param.hCopyOkEvent);
 SOCKET Sock;
 SOCKADDR_IN SockAddr={0};
 Sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 if(Sock==INVALID_SOCKET)
 {MessageBoxA(NULL,"INVALID_SOCKET",NULL,NULL); 
 }
 SockAddr.sin_family=AF_INET;
 SockAddr.sin_addr.s_addr=htonl(Param.Ip);
 SockAddr.sin_port=htons(Param.Port);
 char *IpChar=inet_ntoa(SockAddr.sin_addr);
 char str[200];
 if(connect(Sock,(SOCKADDR *)&SockAddr,sizeof(SockAddr))==0)
 {sprintf_s(str,"%s:%d联接成功\n",IpChar,Param.Port);
  }
 else
 {sprintf_s(str,"%s:%d联接失败\n",IpChar,Param.Port);
 }
 //InsertInfo(str);
 //ReleaseSemaphore(Param.hThreadNum,1,NULL);
 closesocket(Sock);
 return 0;
}



DWORD WINAPI MainThread(LPVOID LpParam)
{MainThreadParam Param;
 MoveMemory(&Param,LpParam,sizeof(Param));
 SetEvent(Param.hCopyEvent);
 ThreadParam threadparam={0};
 HANDLE hThreadCopyOkEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
 threadparam.hCopyOkEvent=hThreadCopyOkEvent;
 HANDLE hThreadNum=CreateSemaphore(NULL,256,256,NULL);
 threadparam.hThreadNum=hThreadNum;
 for(DWORD Ip=Param.StartIp;Ip<=Param.EndIp;Ip++)
 {for(DWORD Port=Param.StartPort;Ip<=Param.EndPort;Port++)
   {DWORD WaitRes=WaitForSingleObject(hThreadNum,200);
    if(WaitRes==WAIT_OBJECT_0)
{threadparam.Ip=Ip;
     threadparam.Port=Port;
 CreateThread(NULL,0,PortScanthread,&threadparam,0,NULL);
 WaitForSingleObject(threadparam.hCopyOkEvent,INFINITE);
 ResetEvent(threadparam.hCopyOkEvent);
}
else if(WaitRes==WAIT_TIMEOUT)
{Port--;
 continue;
}
   }
 }
 return 0;
}


BOOL StartScanner(DWORD StartIp,DWORD EndIp,DWORD StartPort,DWORD EndPort)
{InitPortScan();
 MainThreadParam param;
 HANDLE hMainCopyEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
 param.hCopyEvent=hMainCopyEvent;
 param.StartIp=StartIp;
 param.EndIp=EndIp;
 param.StartPort=StartPort;
 param.EndPort=EndPort;
 CreateThread(NULL,0,MainThread,(LPVOID *)&param,0,NULL);
 WaitForSingleObject(hMainCopyEvent,INFINITE);


 ResetEvent(hMainCopyEvent);
 return TRUE;
}

LRESULT CALLBACK DlgProc(HWND hDlgMain,UINT uMsg,WPARAM wParam,LPARAM lParam)
{HWND hDlg=hDlgMain;
 DWORD StartIp;
 DWORD EndIp;
 DWORD StartPort;
 DWORD EndPort;

 static BOOL Flag=TRUE;
 switch(uMsg)
 {case WM_INITDIALOG:
  break;
  case WM_COMMAND:
   switch (LOWORD(wParam))
   {case IDC_BUTTON_START:
    
   if(Flag)
    {//UINT  IPM_GETADDRESS;
 SendMessage(GetDlgItem(hDlg,IDC_LIST_RST),LB_RESETCONTENT,NULL,NULL);
     SendMessage(GetDlgItem(hDlg,IDC_IP_START),IPM_GETADDRESS,0,(LPARAM)&StartIp);
 SendMessage(GetDlgItem(hDlg,IDC_IP_END),IPM_GETADDRESS,0,(LPARAM)&EndIp);
 StartPort=GetDlgItemInt(hDlg,IDC_EDIT_STARTPORT,NULL,FALSE);
 EndPort=GetDlgItemInt(hDlg,IDC_EDIT_ENDPORT,NULL,FALSE);
 StartScanner(StartIp,EndIp,StartPort,EndPort);
    }
   break;
   default:
   break;
  }
   break;
  case WM_CLOSE:
  EndDialog(hDlg,NULL);
  DestroyWindow(hDlg);
  break;
      default:
  break;
 }
 return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,(DLGPROC)DlgProc);
 return 0;
}


[解决办法]
是不是资源文件有问题
[解决办法]
多线程啊
不错啊  欣赏了
[解决办法]
这只是一部分代码,最基本的消息循环都没有怎么可能响应按钮事件
你先弄明白一个最基本的win32程序的执行流程再整这个吧。
[解决办法]
确实没有消息循环,  怎么getmessage呢?
[解决办法]
不好意思  没看到DoDialog()函数

热点排行