📄 portready.c
字号:
case IDC_SORTIP:
case IDC_SORTPORT:
case IDC_SORTBANNER:
ListView_SortItems( g_hwndListView, CompareFunc, LOWORD(wParam) - 514 );
break;
case IDC_TELNET:
for(i=0;i<nItemCount;i++)
{
if(ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED))
{
ListView_GetItemText(g_hwndListView,i,0,strTemp,sizeof(strTemp));
p=strTemp+strlen(strTemp);
*(p++)=' ';
ListView_GetItemText(g_hwndListView,i,1,p,6);
ShellExecute(g_hWnd,"open","telnet.exe",strTemp,NULL,SW_SHOWNORMAL);
}
}
break;
case IDC_RESOLVEDOMAIN:
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ResolveDomain,0,0,&dwThreadID);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI On_NoTify(WPARAM wParam,LPARAM lParam)
{
#define lpmsg ((LPNMHDR)lParam)
switch(lpmsg->code)
{
case TTN_NEEDTEXT:
((LPTOOLTIPTEXT) lParam)->lpszText = (LPSTR) c_szToolTip[GetDlgCtrlID((HWND) lpmsg->idFrom) - 400];
break;
case TTN_SHOW:
SendMessage(g_hwndStatus,SB_SETTEXT,0,(LONG) c_szToolTip[GetDlgCtrlID((HWND) lpmsg->idFrom) - 400]);
break;
case TTN_POP:
SendMessage(g_hwndStatus,SB_SETTEXT,0,(LONG)c_szWelcome);
break;
case LVN_COLUMNCLICK:
#define pnm ((NM_LISTVIEW *) lParam)
ListView_SetColumnWidth(g_hwndListView,0,150);
ListView_SetColumnWidth(g_hwndListView,1,75);
ListView_SortItems( g_hwndListView, CompareFunc, (LPARAM) (pnm->iSubItem) );
#undef pnm
break;
case LVN_GETDISPINFO:
#define pnmv ((LV_DISPINFO *) lParam)
if (pnmv->item.mask & LVIF_TEXT)
{
#define pItem ((ITEMINFO *)(pnmv->item.lParam))
if( !(pnmv->item.iSubItem) )
{
iaServer.s_addr=htonl(pItem->dwAddr);
lstrcpy(pnmv->item.pszText, inet_ntoa(iaServer));
}
else if( pnmv->item.iSubItem == 1 )
{
char strString[6];
sprintf(strString,"%d",pItem->wPort);
lstrcpy(pnmv->item.pszText,strString);
}
else
lstrcpy(pnmv->item.pszText, pItem->lpstrBanner);
#undef pItem
}
#undef pnmv
break;
case NM_RCLICK:
i=ListView_GetSelectedCount(g_hwndListView);
EnableMenuItem(g_hMenu,IDC_COPY,i?MF_ENABLED:MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_CUT,(i && !nThreadNum) ? MF_ENABLED : MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_SELECTINVERSE,i?MF_ENABLED:MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_RESOLVEDOMAIN,(i && !nThreadNum) ? MF_ENABLED : MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_TELNET,i?MF_ENABLED:MF_GRAYED);
ModifyMenu(g_hMenu,IDC_DEL,MF_BYCOMMAND,IDC_DEL,i?"删除(&D)\tDel":"清除(&D)\tCtrl+Del");
EnableMenuItem(g_hMenu,IDC_SORTIP,nItemCount ? MF_ENABLED: MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_SORTPORT,nItemCount ? MF_ENABLED : MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_SORTBANNER,nItemCount ? MF_ENABLED : MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_DEL,(nItemCount && !nThreadNum)?MF_ENABLED:MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_SELECTALL,nItemCount?MF_ENABLED:MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_SAVE,nItemCount?MF_ENABLED:MF_GRAYED);
EnableMenuItem(g_hMenu,IDC_LOAD,nThreadNum ? MF_GRAYED : MF_ENABLED);
GetCursorPos(&ptCur);
TrackPopupMenu(g_hMenu,0,ptCur.x,ptCur.y,0,g_hWnd,NULL);
break;
case LVN_KEYDOWN:
i=ListView_GetSelectedCount(g_hwndListView);
#define pnm ((LV_KEYDOWN *) lParam)
switch(pnm->wVKey)
{
case 46://Del
if(!nThreadNum)
{
if(HIBYTE(GetKeyState(VK_CONTROL)))
{
ListView_DeleteAllItems(g_hwndListView);
nItemCount=0;
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)"开放端口:0");
}
else if(nItemCount)
SendMessage(g_hWnd,WM_COMMAND,IDC_DEL,0);
}
break;
case 65://Ctrl+A
if(nItemCount && HIBYTE(GetKeyState(VK_CONTROL)) )
SendMessage(g_hWnd,WM_COMMAND,IDC_SELECTALL,0);
break;
case 67://Ctrl+C
if(i && HIBYTE(GetKeyState(VK_CONTROL)))
SendMessage(g_hWnd,WM_COMMAND,IDC_COPY,0);
break;
case 68://Ctrl+D
isUseResultIP = !isUseResultIP;
ListView_SetExtendedListViewStyle(g_hwndListView,isUseResultIP ? (LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES|LVS_EX_CHECKBOXES) : (LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES) );
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isUseResultIP ? (LPARAM)"请选择结果窗口的地址进行扫描" : (LPARAM)"要激活隐藏功能,请在结果窗口按Ctrl+D");
break;
case 73://Ctrl+I
if(i && HIBYTE(GetKeyState(VK_CONTROL)))
SendMessage(g_hWnd,WM_COMMAND,IDC_SELECTINVERSE,0);
break;
case 88://Ctrl+X
if(i && (!nThreadNum) && HIBYTE(GetKeyState(VK_CONTROL)))
SendMessage(g_hWnd,WM_COMMAND,IDC_CUT,0);
break;
}
#undef pnm
}
#undef lpmsg
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI On_DrawItem(WPARAM wParam,LPARAM lParam)
{
HDC hdcMem;
hdcMem = CreateCompatibleDC(((LPDRAWITEMSTRUCT) lParam)->hDC);
SetBkMode(hdcMem,TRANSPARENT);
SelectObject(hdcMem, GetStockObject(DEFAULT_GUI_FONT));
i = ((LPDRAWITEMSTRUCT) lParam)->itemState & ODS_SELECTED;
if(wParam==IDC_SCAN)
{
if( ( (LPDRAWITEMSTRUCT) lParam)->itemState & ODS_DISABLED )
SelectObject(hdcMem, g_hBitmap[2]);
else
SelectObject(hdcMem, g_hBitmap[i]);
TextOut(hdcMem,12+i,5+i,"扫 描",5);
}
else if(wParam==IDC_STOP)
{
if( ( (LPDRAWITEMSTRUCT) lParam)->itemState & ODS_DISABLED )
SelectObject(hdcMem, g_hBitmap[5]);
else
SelectObject(hdcMem, g_hBitmap[i+3]);
TextOut(hdcMem,12+i,5+i,"停 止",5);
}
BitBlt(((LPDRAWITEMSTRUCT) lParam)->hDC,((LPDRAWITEMSTRUCT) lParam)->rcItem.left,((LPDRAWITEMSTRUCT) lParam)->rcItem.top,((LPDRAWITEMSTRUCT) lParam)->rcItem.right - ((LPDRAWITEMSTRUCT) lParam)->rcItem.left, ((LPDRAWITEMSTRUCT) lParam)->rcItem.bottom - ((LPDRAWITEMSTRUCT) lParam)->rcItem.top, hdcMem, 0, 0, SRCCOPY);
DeleteDC(hdcMem);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI StartScan()
{
int k = 0;
int j;
int intINT;
int intMAXThread;
char *pPoint1;
char *pPoint2;
char strString[600];
IN_ADDR iaServer;
DWORD dwStartTime,dwCurIP;
BOOL isStartScanRange = TRUE;
nSkipHost = 0;
nPortCount = 0;
nScannedPort = 0;
isStopForce = FALSE;
ZeroMemory(&thdINFO,300*sizeof(THREADINFO));
isGetBanner=(GetMenuState(g_hMenu,IDC_GETBANNER,MF_BYCOMMAND) & MF_CHECKED);
isKeepHistroy=(GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED);
isUsePortRange=SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_GETCHECK,0,0);
isUsePortList=SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_GETCHECK,0,0);//获取BOOL数据
intMAXThread=GetDlgItemInt(g_hWnd,IDE_THREAD,NULL,0);
if(!intMAXThread)
{
SetDlgItemInt(g_hWnd,IDE_THREAD,50,0);
intMAXThread=50;
}
nTimeOut=GetDlgItemInt(g_hWnd,IDE_TIMEOUT,NULL,0);
if(!nTimeOut)
{
SetDlgItemInt(g_hWnd,IDE_TIMEOUT,3,0);
nTimeOut=3;
}
SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_GETADDRESS,0,(LPARAM) &dwEndIP);
if(dwStartIP>dwEndIP)
{
dwCurIP=dwStartIP;
dwStartIP=dwEndIP;
dwEndIP=dwCurIP;
SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_SETADDRESS,0,dwStartIP);
SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,dwEndIP);
}
if(isUsePortRange)
{
nStartPort=GetDlgItemInt(g_hWnd,IDE_STARTPORT,NULL,0);
nEndPort=GetDlgItemInt(g_hWnd,IDE_ENDPORT,NULL,0);
if(nStartPort>nEndPort)
{ intINT=nStartPort;
nStartPort=nEndPort;
nEndPort=intINT;
}
if(!nStartPort)
{
if(!nEndPort)
{
isUsePortRange=FALSE;
}
else
{
nStartPort=nEndPort;
SetDlgItemInt(g_hWnd,IDE_STARTPORT,nEndPort,0);
SetDlgItemInt(g_hWnd,IDE_ENDPORT,nEndPort,0);
}
}
}//获取端口范围
if(isUsePortList)
{
GetDlgItemText(g_hWnd,IDE_PORTLIST,strString,599);
pPoint1=strString;
for(nPortCount=0;*pPoint1 && (nPortCount<100);)
{
j=atoi(pPoint1);
if(j && j<65535 && (j<nStartPort || j>nEndPort || !isUsePortRange ))
{
nPort[nPortCount]=j;
nPortCount++;
}
if(!( (pPoint2=strchr(pPoint1,',')) || (pPoint2=strchr(pPoint1,';')) || (pPoint2=strchr(pPoint1,' ')) || (pPoint2=strchr(pPoint1,'.')) ))
break;
pPoint1=++pPoint2;
}
if(!nPortCount)
isUsePortList=FALSE;
}//获取端口列表
if(isUsePortList||isUsePortRange)
{
EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),0);
EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),1);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"已完成:0%");
if(isUsePortList)
j=nPort[0];
else
j=nStartPort;
if(isUseResultIP)
{
dwCurIP=0;
for (dwStartIP=0,dwEndIP=0;(int)dwEndIP < nItemCount;dwEndIP++)
if(ListView_GetCheckState(g_hwndListView,dwEndIP))
dwStartIP++;
}
else
{
dwCurIP=dwStartIP;
if(!isKeepHistroy)
{
ListView_DeleteAllItems(g_hwndListView);
nItemCount=0;
sprintf(strTemp,"开放端口:%d",nItemCount);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strTemp);
}
}
dwStartTime=GetTickCount();
while(dwCurIP<=dwEndIP)
{
if(isStopForce)
break;
if( ((dwCurIP % 256)==0 || (dwCurIP % 256)==255) && !isUseResultIP)
{
nSkipHost++;
dwCurIP++;
continue;
}
if(nThreadNum<intMAXThread)
{
for(intINT=0;intINT<intMAXThread;intINT++)
if(thdINFO[intINT].wPort==0)
break;
if(isUseResultIP)
{
while(dwCurIP<dwEndIP)
{
if(ListView_GetCheckState(g_hwndListView,dwCurIP))
break;
dwCurIP++;
}
if(dwCurIP==dwEndIP)
break;
ListView_GetItemText(g_hwndListView,dwCurIP,0,strTemp,16);
thdINFO[intINT].dwAddr=htonl(inet_addr(strTemp));
}
else
{
thdINFO[intINT].dwAddr=dwCurIP;
}
thdINFO[intINT].wPort=j;
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ScanThread,(LPVOID)intINT,0,&dwThreadID);
nThreadNum++;
iaServer.s_addr=htonl(thdINFO[intINT].dwAddr);
sprintf(strString,"正在扫描 %s:%d",inet_ntoa(iaServer),j);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)strString);
sprintf(strString,"活动线程:%d",nThreadNum);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)strString);
if(isUsePortRange)
{
if(isUsePortList)//既使用端口范围,又使用端口列表
{
if(k==nPortCount-1)
{
if(isStartScanRange)
{
j=nStartPort;
isStartScanRange=FALSE;
}
else
{
if(j==nEndPort)
{
j=nPort[0];
k=0;
isStartScanRange=TRUE;
dwCurIP++;
}
else
j++;
}
}
else
{
k++;
j=nPort[k];
}
}
else//使用端口范围,未使用端口列表
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -