📄 portready.c
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////
//工程 :PortReady
//版本 :1.6
//编译 :LCC-Win32 3.3
//版权 :源代码公开,不保留版权
//作者 :点普工作室(Yonsm)
//主页 :http://dotpot.533.net
//邮箱 :dotpot@163.net
//日期 :2002年1月
//说明 :用Visual C++ 6.0在Release方式下编译后大小为80KB,
// 正式发布版本用LCC-Win32编译,大小为49KB。
// LCC-Win32及其汉化补丁可在点普工作室主页上下载。
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//LCC-Win32编译时请添加下列文件到工程中(可使用相对目路径):
// WSOCK32.lib
// SHELL32.lib
// PortReady.c
// Resource.rc
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
#include <winsock.h>
#include <stdio.h>
#include <commctrl.h>
#include <shellapi.h>
#include "NewComCtrl.h"
#include "Resource.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct tagThread
{
DWORD dwAddr;
WORD wPort;
}THREADINFO;
typedef struct tagItem
{
DWORD dwAddr;
WORD wPort;
LPSTR lpstrBanner;
}ITEMINFO;
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
HWND g_hWnd;
HWND g_hwndListView;
HWND g_hwndStatus;
HWND g_hwndToolTip;
HMENU g_hMenu;
HHOOK g_hHook;
HINSTANCE g_hInst;
HCURSOR g_hCursor;
HBITMAP g_hBitmap[6];
BYTE byteIP[4];
FILE *fpFile;
POINT ptCur;
IN_ADDR iaServer;
THREADINFO thdINFO[300];
BOOL isGetBanner;
BOOL isUsePortRange;
BOOL isUsePortList;
BOOL isUseResultIP;
BOOL isStopForce;
BOOL isKeepHistroy = TRUE;
BOOL isNoAsk;
int i;
int nTimeOut;
int nThreadNum;
int nScannedPort;
int nStartPort;
int nEndPort;
int nPort[100];
int nPortCount;
int nSkipHost;
int nItemCount;
DWORD dwStartIP;
DWORD dwEndIP;
DWORD dwThreadID;
char *p;
char strTemp[600];
const char c_szResolve[] = "正在解析域名...";
const char c_szGetBanner[] = "正在获取标识...";
const char c_szCancelBanner[] = "扫描中止,放弃标识";
const char c_szWelcome[] = "欢迎到访问『http://dotpot.533.net』";
const char *c_szToolTip[] =
{
"起始IP地址",
"停止IP地址",
"选择是否使用端口范围",
"选择是否使用端口列表",
"起始端口",
"停止端口",
"端口列表,使用逗号(,)将不同端口隔开",
"扫描线程数目,默认100个线程",
"连接超时时间,默认2秒",
"扫描结果窗口,右击可调出弹出菜单",
"开始扫描",
"停止扫描",
"http://dotpot.533.net",
"mailto:dotpot@163.com"
};
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL WINAPI LoadResult(char *strFileName);
BOOL WINAPI SaveResult(char *strFileName,BOOL isSaveSelected);
void WINAPI StartScan();
void WINAPI ResolveDomain();
void WINAPI ScanThread(int intCurThread);
void WINAPI On_InitDialog();
void WINAPI On_Command(WPARAM wParam);
void WINAPI On_NoTify(WPARAM wParam,LPARAM lParam);
void WINAPI On_DrawItem(WPARAM wParam,LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK HyperLinkProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
static BOOL CALLBACK AboutDlgProc(HWND g_hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK MainDlgProc(HWND g_hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WSADATA wsaData;
INITCOMMONCONTROLSEX initCom;
g_hInst=hInstance;
initCom.dwICC=ICC_INTERNET_CLASSES;
initCom.dwSize=sizeof(INITCOMMONCONTROLSEX);
InitCommonControlsEx(&initCom);
if(WSAStartup(MAKEWORD(1, 1), &wsaData))
{
MessageBox(NULL,"无法初始化 Winsock DLL\t","错误",MB_OK|MB_ICONSTOP);
return 0;
}
DialogBox(g_hInst, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, (DLGPROC) MainDlgProc);
WSACleanup();
return 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
static BOOL CALLBACK MainDlgProc(HWND hWndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_INITDIALOG:
g_hWnd=hWndDlg;
On_InitDialog();
return TRUE;
case WM_CTLCOLORSTATIC:
if(GetDlgCtrlID((HWND)lParam) == IDC_HOME || GetDlgCtrlID((HWND)lParam) == IDC_MAIL)
{
SetTextColor((HDC)wParam, 0xFF0000);
SetBkColor((HDC)wParam, GetSysColor(COLOR_MENU));
return (int)GetStockObject(HOLLOW_BRUSH);
}
break;
case WM_DRAWITEM:
On_DrawItem(wParam,lParam);
return TRUE;
case WM_NOTIFY:
On_NoTify(wParam,lParam);
return TRUE;
case WM_HELP:
SendMessage(g_hWnd,WM_SYSCOMMAND,IDC_HELPCMD,0);
return TRUE;
case WM_SIZE:
if(wParam==SIZE_MAXIMIZED || wParam==SIZE_RESTORED)
{
MoveWindow(g_hwndListView,15,120,LOWORD(lParam)-30,HIWORD(lParam)-155,TRUE);
MoveWindow(GetDlgItem(g_hWnd,IDG_RESULT),6,100,LOWORD(lParam)-12,HIWORD(lParam)-125,TRUE);
SendMessage(g_hwndStatus,WM_SIZE,wParam,lParam);
ListView_SetColumnWidth(g_hwndListView,2,LOWORD(lParam)-280);
}
break;
case WM_SYSCOMMAND:
if(LOWORD(wParam)==IDC_HELPCMD)
{
if(SearchPath(NULL,"Readme",".txt",MAX_PATH,strTemp,NULL))
ShellExecute(g_hWnd,"open",strTemp,NULL,NULL,SW_MAXIMIZE);
else if(MessageBox(g_hWnd,"帮助文件Readme.txt丢失\n\n要连接到http://dotpot.533.net重新下载吗?","找不到Readme.txt",MB_YESNO|MB_ICONQUESTION)==IDYES)
ShellExecute(g_hWnd,"open","http://dotpot.533.net",NULL,NULL,SW_MAXIMIZE);
}
break;
case WM_COMMAND:
On_Command(wParam);
break;
case WM_CLOSE:
for(i=0;i<6;i++)
DeleteObject(g_hBitmap[i]);
if(fpFile=fopen("PortReady.ini","w"))
{
SendDlgItemMessage(g_hWnd,IDIP_STARTIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
byteIP[0]=(BYTE)FIRST_IPADDRESS(dwStartIP);
byteIP[1]=(BYTE)SECOND_IPADDRESS(dwStartIP);
byteIP[2]=(BYTE)THIRD_IPADDRESS(dwStartIP);
byteIP[3]=(BYTE)FOURTH_IPADDRESS(dwStartIP);
sprintf(strTemp,"起始地址=%d.%d.%d.%d\n",byteIP[0],byteIP[1],byteIP[2],byteIP[3]);
fputs(strTemp,fpFile);
SendDlgItemMessage(g_hWnd,IDIP_ENDIP,IPM_GETADDRESS,0,(LPARAM) &dwStartIP);
byteIP[0]=(BYTE)FIRST_IPADDRESS(dwStartIP);
byteIP[1]=(BYTE)SECOND_IPADDRESS(dwStartIP);
byteIP[2]=(BYTE)THIRD_IPADDRESS(dwStartIP);
byteIP[3]=(BYTE)FOURTH_IPADDRESS(dwStartIP);
sprintf(strTemp,"停止地址=%d.%d.%d.%d\n端口范围=%d->%d\n线程=%d\n延时=%d\n获取端口标识=%s\n保留历史记录=%s\n使用端口范围=%s\n使用端口列表=%s\n清除时不询问=%s\n端口列表=",
byteIP[0],byteIP[1],byteIP[2],byteIP[3],
GetDlgItemInt(g_hWnd,IDE_STARTPORT,NULL,0),GetDlgItemInt(g_hWnd,IDE_ENDPORT,NULL,0),
GetDlgItemInt(g_hWnd,IDE_THREAD,NULL,0),
GetDlgItemInt(g_hWnd,IDE_TIMEOUT,NULL,0),
((GetMenuState(g_hMenu,IDC_GETBANNER,MF_BYCOMMAND) & MF_CHECKED))?"Yes":"No",
((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED))?"Yes":"No",
SendDlgItemMessage(g_hWnd,IDC_USERANGE,BM_GETCHECK,0,0)?"Yes":"No",
SendDlgItemMessage(g_hWnd,IDC_USELIST,BM_GETCHECK,0,0)?"Yes":"No",
isNoAsk ? "Yes" : "No"
);
fputs(strTemp,fpFile);
GetDlgItemText(g_hWnd,IDE_PORTLIST,strTemp,sizeof(strTemp));
fputs(strTemp,fpFile);
fclose(fpFile);
}
if(((GetMenuState(g_hMenu,IDC_KEEPHISTORY,MF_BYCOMMAND) & MF_CHECKED)) )
SaveResult("PortList.txt",FALSE);
EndDialog(g_hWnd,0);
}
return FALSE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG msg;
if (nCode>=0 && (IsChild(g_hWnd, ((MOUSEHOOKSTRUCT*)lParam)->hwnd)))
{
if (wParam==WM_MOUSEMOVE || wParam==WM_LBUTTONDOWN || wParam==WM_RBUTTONDOWN)
{
msg.lParam = 0;
msg.wParam = 0;
msg.message = wParam;
msg.hwnd = ((MOUSEHOOKSTRUCT*)lParam)->hwnd;
SendMessage(g_hwndToolTip, TTM_RELAYEVENT, 0, (LPARAM) (LPMSG) &msg);
}
}
return (CallNextHookEx(g_hHook, nCode, wParam, lParam));
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK HyperLinkProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_LBUTTONUP:
switch(GetDlgCtrlID(hwnd))
{
case IDC_HOME:
ShellExecute(g_hWnd,"open",c_szToolTip[12],NULL,NULL,SW_MAXIMIZE);
break;
case IDC_MAIL:
ShellExecute(g_hWnd,"open",c_szToolTip[13],NULL,NULL,SW_MAXIMIZE);
}
break;
case WM_NCHITTEST:
case WM_SETCURSOR:
SetCursor(g_hCursor);
break;
default:
return CallWindowProc((WNDPROC)GetWindowLong(hwnd,GWL_USERDATA),hwnd,uMsg,wParam,lParam);
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
#define pItem1 ((ITEMINFO *) lParam1)
#define pItem2 ((ITEMINFO *) lParam2)
if(!lParamSort)
{
if( (pItem1->dwAddr) == (pItem2->dwAddr) )
{
if( (pItem1->wPort) == (pItem2->wPort) )
return 0;
else if( (pItem1->wPort) > (pItem2->wPort) )
return 1;
else
return -1;
}
else if( (pItem1->dwAddr) > (pItem2->dwAddr) )
return 1;
else
return -1;
}
else if(lParamSort==1)
{
if( (pItem1->wPort) == (pItem2->wPort) )
{
if( (pItem1->dwAddr) == (pItem2->dwAddr) )
return 0;
else if( (pItem1->dwAddr) > (pItem2->dwAddr) )
return 1;
else
return -1;
}
else if( (pItem1->wPort) > (pItem2->wPort) )
return 1;
else
return -1;
}
else
{
return( lstrcmpi(pItem1->lpstrBanner,pItem2->lpstrBanner) );
}
#undef pItem1
#undef pItem2
}
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
void WINAPI On_InitDialog()
{
TOOLINFO ti;
HICON hIcon;
LV_COLUMN lvc;
long sbParts[4];
HIMAGELIST hImageList;
g_hCursor = LoadCursor(g_hInst, MAKEINTRESOURCE(IDC_CURSOR_HAND));
g_hMenu = GetSystemMenu(g_hWnd,FALSE);
AppendMenu(g_hMenu,MF_SEPARATOR,0,NULL);
AppendMenu(g_hMenu,MF_ENABLED,IDC_HELPCMD,"帮助(&H)\tF1");
g_hMenu=GetSubMenu(LoadMenu(g_hInst, MAKEINTRESOURCE(IDM_MENU)),0);
g_hBitmap[0]=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_CHECK));
g_hBitmap[1]=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_UNCHECK));
SetMenuItemBitmaps(g_hMenu, IDC_GETBANNER, MF_BYCOMMAND,g_hBitmap[1],g_hBitmap[0]);
SetMenuItemBitmaps(g_hMenu, IDC_KEEPHISTORY, MF_BYCOMMAND,g_hBitmap[1],g_hBitmap[0]);
for(i=0;i<6;i++)
g_hBitmap[i]=LoadBitmap(g_hInst, MAKEINTRESOURCE( (i%3)+200 ) );
CreateUpDownControl(WS_CHILD|WS_BORDER|WS_VISIBLE|UDS_SETBUDDYINT|UDS_ALIGNRIGHT, 0,0,0,0,g_hWnd,0,g_hInst,GetDlgItem(g_hWnd,IDE_THREAD),300,1,100);
CreateUpDownControl(WS_CHILD|WS_BORDER|WS_VISIBLE|UDS_SETBUDDYINT|UDS_ALIGNRIGHT, 0,0,0,0,g_hWnd,0,g_hInst,GetDlgItem(g_hWnd,IDE_TIMEOUT),20,1,2);
sbParts[0]=241;
sbParts[1]=355;
sbParts[2]=455;
sbParts[3]=-1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -