?? activehostscan.cpp
字號:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iphlpapi.h>
#pragma comment (lib,"ws2_32.lib")
#pragma comment (lib,"iphlpapi.lib")
char StartIP[20]; //掃描起始IP地址
char EndIP[20]; //掃描結束IP地址
int ProgressTag=0; // 進度條標志位
// 解析命令行
void ParseCmd(int argc, char **argv)
{
if(argc != 2)
{
printf("usage : ActiveHostScan.exe [StartIP-EndIP]");
exit(0);
}
char *pdest;
int result;
ZeroMemory(StartIP,20);
ZeroMemory(EndIP,20);
int ch = '-'; // 分隔符
pdest = strchr( argv[1], ch );
result = pdest - argv[1] + 1; // 尋找‘-’的位置
strncpy(StartIP,argv[1],result-1); // 提取起始IP地址
strncpy(EndIP,argv[1]+result,strlen(argv[1])-result); // 提取結束IP地址
}
// 定義進度提示函數
void ProgressShow(void)
{
// 進度條
char *progressbar[12]=
{
" | ",
" / ",
" - ",
" \\ ",
" | ",
" / ",
" - ",
" \\ ",
" | ",
" / ",
" - ",
" \\ ",
};
printf(" =%s=\r", progressbar[ProgressTag]);
ProgressTag=(ProgressTag==11)?0:ProgressTag+1;
Sleep(2);
}
// 掃描目標主機是否存活
int ScanHostState(char *ip)
{
HRESULT hr;
IPAddr ipAddr;
ULONG pulMac[2];// MAC地址
ULONG ulLen;
char *szMac;
// 轉換成網絡字節順序
ipAddr = inet_addr (ip);
// 設置MAC地址為廣播地址0xff
memset (pulMac, 0xff, sizeof (pulMac));
ulLen = 6;
hr = SendARP (ipAddr, 0, pulMac, &ulLen);
// 如果返回無錯則表明指定目標主機存活
if(hr == NO_ERROR)
{
size_t i, j;
szMac = new char[ulLen*3];
PBYTE pbHexMac = (PBYTE) pulMac;
// 轉換MAC地址為字符串格式以便輸出
for (i = 0, j = 0; i < ulLen - 1; ++i) {
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}
sprintf (szMac + j, "%02X", pbHexMac[i]);
printf ("主機 %s 響應! MAC地址: %s\n",ip, szMac);
delete [] szMac;
return 1;
}
return 0;
}
// 主函數
int main(int argc, char **argv)
{
// 解析命令行
ParseCmd(argc,argv);
struct in_addr targetaddr; // 目標機地址結構
unsigned long ips=inet_addr(StartIP); //計算起始IP地址的網絡字節
unsigned long ipe=inet_addr(EndIP); // 計算結束IP地址的網絡字節
ips=ntohl(ips); // 計算起始IP地址的主機字節
ipe=ntohl(ipe); // 計算結束IP地址的主機字節
DWORD dwStart = GetTickCount(); //記錄開始時間
// 開始循環探測主機
for(int k=ips;k<=ipe;k++)
{
ProgressShow();
targetaddr.S_un.S_addr=htonl(k);
// 探測指定主機是否存活
ScanHostState(inet_ntoa(targetaddr));
Sleep(10);
}
printf("\n探測消耗時間:%d ms \n",GetTickCount()-dwStart);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -