批量获取远程计算机MAC

功能及用途

用于采集局域网所有计算机信息主要是mac地址,ip地址,主机名。

格式化读写函数

fprintf()格式化写

fscanf()格式化读

使用说明

IP文件:ip.txt

IP文件格式:ip+空格+其他信息

IP文件和该执行文件放同一目录

代码

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

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

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

int _tmain(int argc, _TCHAR* argv[])
{
	CHAR szFilePath[MAX_PATH];
	/*GetModuleFileName(NULL,szFilePath,MAX_PATH);*/
	GetCurrentDirectory(MAX_PATH,szFilePath);
	//printf(szFilePath);
	CHAR macAddr[13]={0};
	ULONG   Mac[2];
	ULONG   MacLen;

	memset (Mac, 0xff, sizeof (Mac));
	MacLen = 6;
	
	char ip[16],info[100];
	FILE *fp;
	FILE *fpw;
	char szPath[MAX_PATH];
	sprintf(szPath,"%s\\%s",szFilePath,"ip.txt");
	fp=fopen(szPath,"r");
	sprintf(szPath,"%s\\%s",szFilePath,"mac.txt");
	fpw=fopen(szPath,"w");
	char szMacAddr[20];
	while(!feof(fp))
	{
		
		fscanf(fp,"%s %s",ip,info);
		BYTE MacAddr[6];
		IPAddr ipAddr=inet_addr(ip);
		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];
			}
			char szMacAddr[18];
			sprintf(szMacAddr,"%02X-%02X-%02X-%02X-%02X-%02X",MacAddr[0],MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
			printf("IP:%s\tINFO:%s\tMAC:%s\n",ip,info,szMacAddr);
			fprintf(fpw,"IP:%s\tMAC:%s\t备注:%s\n",ip,szMacAddr,info);
		}
	}
	fclose(fp);
	fclose(fpw);
	getchar();
	return 0;
}
原文地址:https://www.cnblogs.com/shya/p/2334494.html