📄 portready.c
字号:
if(j==nEndPort)
{
j=nStartPort;
dwCurIP++;
}
else
j++;
}
}
else//未使用端口范围,则一定使用端口列表
{
if(k==nPortCount-1)
{
k=0;
dwCurIP++;
}
else
{
k++;
}
j=nPort[k];
}
}
}
if(isStopForce)
{
SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_SETADDRESS,0,dwCurIP);
SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_SETADDRESS,0,dwEndIP);
}
for(dwCurIP=0,j=1;nThreadNum;)
{
if(!(dwCurIP%500000))
{
if(isStopForce)
{
EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
strcpy(strString,"扫描中止,等待线程退出");
}
else
strcpy(strString,"所有线程创建完毕,等待退出");
for(intINT=0;intINT < (int)((dwCurIP/500000)%7);intINT++)
strcat(strString,">");
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)strString);
if(dwCurIP==3000000)
j=0;
else if(dwCurIP==0)
j=1;
}
if(j)
dwCurIP++;
else
dwCurIP--;
}
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isStopForce?(LPARAM)"扫描中止":(LPARAM)"扫描完成");
sprintf(strString,"耗时%d毫秒",GetTickCount()-dwStartTime);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);
EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),1);
EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
}
else
{
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"没有要进行扫描的端口");
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"Ready");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI ScanThread(int intTread)
{
LV_ITEM lvi;
FD_SET mask;
u_long value;
SOCKET sockfd;
TIMEVAL timeout;
SOCKADDR_IN addr;
int intCurThread = intTread;
int intINT;
char strString[600];
char *pPoint1;
char *pPoint2;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd==INVALID_SOCKET)
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)"无法创建Socket");
else
{
value=1;
ioctlsocket(sockfd,FIONBIO,&value);
addr.sin_family = AF_INET;
addr.sin_port = htons(thdINFO[intCurThread].wPort);
addr.sin_addr.s_addr = ntohl(thdINFO[intCurThread].dwAddr);
connect(sockfd,(struct sockaddr *) &addr, sizeof(addr));
timeout.tv_sec=nTimeOut;
timeout.tv_usec=0;
FD_ZERO(&mask);
FD_SET(sockfd,&mask);
value=select(sockfd+1,NULL,&mask,NULL,&timeout);
if(value && value!=SOCKET_ERROR)
{
ITEMINFO *pItem = LocalAlloc(LPTR, sizeof(ITEMINFO));
pItem->dwAddr=thdINFO[intCurThread].dwAddr;
pItem->wPort=thdINFO[intCurThread].wPort;
pItem->lpstrBanner=NULL;
nItemCount++;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvi.pszText = LPSTR_TEXTCALLBACK;
lvi.iItem = 65535;
lvi.iSubItem = 0;
lvi.lParam=(LPARAM)pItem;
switch(pItem->wPort)
{
case 21:
lvi.iImage = 1;
break;
case 23:
lvi.iImage = 2;
break;
case 25:
lvi.iImage = 3;
break;
case 79:
lvi.iImage = 4;
break;
case 80:
lvi.iImage = 5;
break;
case 110:
lvi.iImage = 6;
break;
case 135:
lvi.iImage = 7;
break;
case 139:
lvi.iImage = 8;
break;
case 1080:
case 8080:
lvi.iImage = 9;
break;
case 1433:
lvi.iImage = 10;
break;
case 3389:
lvi.iImage = 11;
break;
default:
lvi.iImage = 0;
}
value=ListView_InsertItem(g_hwndListView, &lvi);
ListView_EnsureVisible(g_hwndListView,value,TRUE);
sprintf(strString,"开放端口:%d",nItemCount);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strString);
if(isGetBanner && ((thdINFO[intCurThread].wPort==21) || (thdINFO[intCurThread].wPort==23) || (thdINFO[intCurThread].wPort==25) || (thdINFO[intCurThread].wPort==79) || (thdINFO[intCurThread].wPort==80) || (thdINFO[intCurThread].wPort==110) ))
{
pItem->lpstrBanner= (LPSTR)c_szGetBanner;
ListView_Update(g_hwndListView,value);
if(thdINFO[intCurThread].wPort==80)
send(sockfd,"GET HEAD HTTP/1.1\n\n",20,0);
ZeroMemory(strString,sizeof(strString));
for(intINT=0;intINT<nTimeOut*20;intINT++)
{
if(isStopForce)
break;
Sleep(100);
if(recv(sockfd,strString,sizeof(strString),0)>0)
break;
}
if((thdINFO[intCurThread].wPort==80) && (pPoint1=strstr(strString,"Server:")))
{
pPoint1+=8;
if( (pPoint2=strchr(pPoint1,'\r')) || (pPoint2=strchr(pPoint1,'\n')) )
*pPoint2='\0';
}
else
pPoint1=strString;
pPoint2=LocalAlloc(LMEM_FIXED, strlen(pPoint1)+1);
strcpy(pPoint2, pPoint1);
pItem->lpstrBanner=(LPSTR)( ( (isStopForce) ? c_szCancelBanner : pPoint2 ) );
ListView_Update(g_hwndListView,value);
}
}
}
nScannedPort++;
sprintf(strString,"已完成:%d%%", nScannedPort*100/((isUseResultIP ? dwStartIP : (dwEndIP-dwStartIP+1-nSkipHost))*(nPortCount*isUsePortList+(nEndPort-nStartPort+1)*isUsePortRange)));
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);
thdINFO[intCurThread].wPort=0;
nThreadNum--;
sprintf(strString,"活动线程:%d",nThreadNum);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)strString);
closesocket(sockfd);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI SaveResult(char *strFileName,BOOL isSaveSelected)
{
if(fpFile=fopen(strFileName,"w"))
{
for(i=0;i<nItemCount;i++)
{
if(isSaveSelected && (!ListView_GetItemState(g_hwndListView,i,LVIS_SELECTED)))
continue;
ListView_GetItemText(g_hwndListView,i,0,strTemp,16);
fputs(strTemp,fpFile);
strTemp[0]='\0';
ListView_GetItemText(g_hwndListView,i,1,strTemp,6);
if(strTemp[0])
{
fputs(":",fpFile);
fputs(strTemp,fpFile);
strTemp[0]='\0';
ListView_GetItemText(g_hwndListView,i,2,strTemp,sizeof(strTemp));
if(strTemp[0])
{
fputs("\t",fpFile);
for(p=strTemp;*p;p++)
{
if(*p=='\n'||*p=='\r')
*p=' ';
}
fputs(strTemp,fpFile);
}
}
fputs("\n",fpFile);
}
fclose(fpFile);
return TRUE;
}
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI LoadResult(char *strFileName)
{
LV_ITEM lvi;
char *pTemp;
if(fpFile=fopen(strFileName,"r"))
{
if(!((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED)))
{
ListView_DeleteAllItems(g_hwndListView);
nItemCount=0;
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)"开放端口:0");
}
while(fgets(strTemp,sizeof(strTemp),fpFile))
{
if( (p=strchr(strTemp,':')) || (p=strchr(strTemp,',')) || (p=strchr(strTemp,';')) || (p=strchr(strTemp,'\t')) )
*(p++)='\0';
if(inet_addr(strTemp)!=INADDR_NONE)
{
ITEMINFO *pItem = LocalAlloc(LPTR, sizeof(ITEMINFO));
pItem->dwAddr=ntohl(inet_addr(strTemp));
if(p)
{
pItem->wPort=atoi(p);
if( (pTemp=strchr(p,'\t')) || (pTemp=strchr(p,':')) || (pTemp=strchr(p,';')) || (pTemp=strchr(p,'@')) )
{
*(pTemp++)='\0';
if( (p=strchr(pTemp,'\n')) || (p=strchr(pTemp,'\r')) )
*p='\0';
p=LocalAlloc(LMEM_FIXED, strlen(pTemp)+1);
strcpy(p,pTemp);
pItem->lpstrBanner = p;
}
}
nItemCount++;
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
lvi.pszText = LPSTR_TEXTCALLBACK;
lvi.iItem = 65535;
lvi.iSubItem = 0;
lvi.lParam=(LPARAM)pItem;
switch(pItem->wPort)
{
case 21:
lvi.iImage = 1;
break;
case 23:
lvi.iImage = 2;
break;
case 25:
lvi.iImage = 3;
break;
case 79:
lvi.iImage = 4;
break;
case 80:
lvi.iImage = 5;
break;
case 110:
lvi.iImage = 6;
break;
case 135:
lvi.iImage = 7;
break;
case 139:
lvi.iImage = 8;
break;
case 1080:
case 8080:
lvi.iImage = 9;
break;
case 1433:
lvi.iImage = 10;
break;
case 3389:
lvi.iImage = 11;
break;
default:
lvi.iImage = 0;
}
ListView_EnsureVisible(g_hwndListView,ListView_InsertItem(g_hwndListView, &lvi),TRUE);
sprintf(strTemp,"开放端口:%d",nItemCount);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)3,(LPARAM)strTemp);
}
}
fclose(fpFile);
return TRUE;
}
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI ResolveDomain()
{
int intINT;
char strString[50];
HOSTENT *hstName;
isStopForce=FALSE;
nThreadNum=1;
dwStartIP=GetTickCount();
EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),0);
EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),1);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,(LPARAM)c_szResolve);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)"请等待...");
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)"活动线程:1");
for(intINT=0;intINT<nItemCount;intINT++)
{
if(isStopForce)
break;
if(ListView_GetItemState(g_hwndListView,intINT,LVIS_SELECTED))
{
ListView_EnsureVisible(g_hwndListView,intINT,TRUE);
ListView_SetItemText(g_hwndListView,intINT,2,(LPSTR)c_szResolve);
ListView_GetItemText(g_hwndListView,intINT,0,strString,sizeof(strString));
dwEndIP=inet_addr(strString);
hstName=gethostbyaddr((char *)&dwEndIP,4,PF_INET);
strcpy(strString,hstName ? hstName->h_name : "无法解析域名");
ListView_SetItemText(g_hwndListView,intINT,2,strString);
}
}
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)0,isStopForce?(LPARAM)"解析域名中止":(LPARAM)"解析域名完成");
sprintf(strString,"耗时%d毫秒",GetTickCount()-dwStartIP);
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)1,(LPARAM)strString);
nThreadNum=0;
SendMessage(g_hwndStatus,SB_SETTEXT,(WPARAM)2,(LPARAM)"活动线程:0");
EnableWindow(GetDlgItem(g_hWnd,IDC_SCAN),1);
EnableWindow(GetDlgItem(g_hWnd,IDC_STOP),0);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -