获取远程计算机MAC

编写说明

工作环境中不允许进入3层交换机,但客户机不允许断网,实现获取IP地址主要用于IP冲突检测。通过于没有IP冲突时的MAC对比,查看与那台计算机的IP产生冲突。

示例代码

// MAC.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <WinSock2.h>
#include <IPHlpApi.h>

#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"IPHlpApi.lib")

BOOL GetMac(CHAR *IpAddr, BYTE *MacAddr)
{
CHAR macAddr[13]={0};
IPAddr ipAddr;
ULONG Mac[2];
ULONG MacLen;

memset (Mac, 0xff, sizeof (Mac));
MacLen = 6;
ipAddr=inet_addr(IpAddr);
DWORD hr = SendARP (ipAddr, 0, Mac, &MacLen);
if(hr==0)
{
PBYTE pbMac = (PBYTE)Mac;
for (ULONG i=0;i<MacLen;i++)
{
MacAddr[i]=pbMac[i];
}
}
else
{
return FALSE;
}

return TRUE;
}

int main(int argc, char* argv[])
{
if (argc!=2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
printf("MAC命令格式不正确!\n");
printf("\t格式:MAC IP地址\n");
printf("\t例子:MAC 135.2.7.2\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
return 0;
}
//CHAR IpAddr[16]=argv[1];
BYTE MacAddr[6]="";
CHAR szMacAddr[18]="";

BOOL bReturn=GetMac(argv[1],MacAddr);
sprintf(szMacAddr,"%02X-%02X-%02X-%02X-%02X-%02X",MacAddr[0],MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
if (bReturn)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),10);
printf("%s\n",szMacAddr);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),12);
printf("主机 %s 网络不通或者对方关闭ICMP回显!\n",argv[1]);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
}

return 0;
}



posted @ 2012-02-01 10:37  哆啦无梦  阅读(667)  评论(0编辑  收藏  举报