本机名、IP、MAC都是一些比较常用网络参数,怎么用C/C++获取呢?

研究了两三个小时...

需要说明的都在代码注释里

 #include <stdio.h>
#include <Windows.h>
#include <IPHlpApi.h> #pragma comment(lib,"ws2_32.lib") // Socket静态库,取本机IP用
#pragma comment(lib,"IPHlpApi.lib") // 发送ARP报文要用的静态库,取MAC用 /*
取主机名
成功返回主机名,失败返回NULL.
*/
char *MyGetHostName(void); /*
取本机IP
成功返回本机IP,失败返回NULL.
*/
char *MyGetHostIp(void); /*
取本机MAC
成功返回本机MAC,失败返回NULL.
*/
char *MyGetHostMac(void); int main(void)
{
char *lpName = NULL;
char *lpIp = NULL;
char *lpMac = NULL; lpName = MyGetHostName();
lpIp = MyGetHostIp();
lpMac = MyGetHostMac();
printf("PCName : %s\n", lpName);
printf("IPAddr : %s\n", lpIp);
printf("M A C : %s\n", lpMac); free(lpName);
free(lpIp);
free(lpMac);
system("pause");
return ;
} char *MyGetHostName(void)
{
char *lpName = NULL;
DWORD dwLen = ; GetComputerName(NULL, &dwLen);
lpName = (char *)malloc(dwLen);
memset(lpName, , dwLen);
GetComputerName(lpName, &dwLen);
return (lpName ? lpName : NULL);
} char *MyGetHostIp(void)
{
char *ip = NULL;
WSADATA wsaData = { };
struct hostent *phostinfo = NULL; ip = (char *)malloc(sizeof(char)* );
memset(ip, , );
WSAStartup(MAKEWORD(, ), &wsaData);
phostinfo = gethostbyname("");
lstrcpyn(ip, inet_ntoa(*(struct in_addr *)(*phostinfo->h_addr_list)), );
WSACleanup();
if (ip)
{
return ip;
}
else {
free(ip);
return NULL;
}
} char *MyGetHostMac(void)
{
IPAddr ip = inet_addr(MyGetHostIp());
PVOID *pMac = NULL;
ULONG MacAddr[] = { }; // Mac地址长度6字节
ULONG uMacSize = ; // 通过ARP报文响应获取MAC地址
DWORD dwRet = SendARP(ip, , &MacAddr, &uMacSize);
if (dwRet == NO_ERROR)
{
BYTE *bPhyAddr = (BYTE *)MacAddr; if (uMacSize)
{
char *sMac = (char *)malloc(sizeof(char)* );
int n = ; memset(sMac, , );
sprintf_s(sMac, (size_t), "%.2X-%.2X-%.2X-%.2X-%.2X-%.2X", (int)bPhyAddr[], (int)bPhyAddr[], (int)bPhyAddr[], (int)bPhyAddr[], (int)bPhyAddr[], (int)bPhyAddr[]);
return sMac;
}
else
{
printf("Mac地址获取失败!\n");
}
}
else
{
printf("ARP报文发送失败:%d\n",dwRet);
}
return NULL;
}

效果图:

最新文章

  1. 基于java的分布式爬虫
  2. 服务设计模式一:Web服务概述
  3. HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
  4. unity shader在小米2s上的问题
  5. C#学习日志 day 5 plus------ interface 数组及stringBuilder相关
  6. zabbix 监控jvm
  7. pycharm2017.3专业版激活注册码
  8. hive 分组排序,topN
  9. c语言之单链表的创建及排序
  10. System.IO.Pipelines: .NET上高性能IO
  11. Task 的用法
  12. python笔记(三)---文件读写、修改文件内容、处理json、函数
  13. MySql数据库执行insert时候报错:Column count doesn&#39;t match value count at row 1
  14. Centos6.8实现SVN提交后自动更新目录
  15. Linux 操作系统死机故障处理方法总结
  16. JQuery下载及选择器总结
  17. python&amp;django 常见问题及解决方法
  18. [LOJ2271] [SDOI2017] 遗忘的集合
  19. C++解析(1):C到C++的升级
  20. hdu 1542/1255 Atlantis/覆盖的面积

热门文章

  1. [转]AngularJS 使用 UI Router 实现表单向导
  2. vs2012配置使用entity framework 6
  3. node搭环境(三)之安装vue-devtools
  4. myBatis分页插件配置
  5. PHP中函数的定义与使用
  6. css3骰子(transform初识)
  7. android studio gradle统一管理版本
  8. selenium profile remotedriver
  9. ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request 不进入controller
  10. PostgresQL中的NUlls first/last功能