📄 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 + -