本机名、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;
}

效果图:

C/C++获取本机名+本机IP+本机MAC的更多相关文章

  1. Python - 获取本机IP地址、Mac地址

    Python - 获取本机IP地址.Mac地址 在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 直接看代码: # Python - 获取本机I ...

  2. win7下的IP-主机名映射

    今天学了个技巧,win7下有个目录:C:\Windows\System32\drivers\etc 该目录下有个文件: hosts 在这个文件里面我们可以映射IP-主机名: 127.0.0.1 loc ...

  3. C++获取本机用于连接的IP地址

    最近写个程序需要获取本机用于连接的IP地址,经过很多的尝试后,最终使用的方法如下: 使用cmd命令    netstat  | findstr “192.168.6.66:3333” > D:\ ...

  4. windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录)

    windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录) 一.总 ...

  5. 获取本机的IP地址和mac地址

    1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address() ...

  6. JS获取客户端IP地址、MAC和主机名七种方法

    一.使用JS获取客户端IP的几个方法方法一(只针对IE且客户端的IE允许AcitiveX运行,通过平台:XP,SERVER03,2000).获取客户端IP代码:<HTML><HEAD ...

  7. JS获取客户端IP地址、MAC和主机名的7个方法汇总

    今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...

  8. C++获得本机所有网卡的IP和MAC地址信息

    一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...

  9. 使用Python获取计算机名,ip地址,mac地址等等

    获取计算机名 # 获取计算机名,常用的方法有三种 import os import socket # method one name = socket.gethostname() print(name ...

随机推荐

  1. SimpleAdapter与listview,gridview的组合用法

    首先要明白SimpleAdapter构造方法的几个参数的含义: public SimpleAdapter(Context context, List<? extends Map<Strin ...

  2. Kudu的优点

    不多说,直接上干货! Kudu目前具有以下优点  OLAP 工作的快速处理: 与 MapReduce,Spark 和其他 Hadoop 生态系统组件集成: 与 Apache Impala(incuba ...

  3. Qmake 配置自定义编译过程

    Qmake 配置自定义编译过程 需求:动态更换资源文件 在 Windows10 下编写 Qt 项目时,有这样的需求: 程序用到的资源文件可以动态更换而不需要重新编译整个项目 解决方案 0.1 将所有的 ...

  4. 远程登陆服务器(window系统)

    1,打开命令输入框: 快捷键:win+R 2.输入命令:mstsc 3.输入你的IP地址和用户名(一般为administrator) 4.输入密码

  5. 拼json对象批量向后台添加数据

    网站中如果遇到批量提交格式相同数据,可以使用json来传输 $("#catalogSave").click(function(){ var array=[]; $("[n ...

  6. mvn install报错

    好不容易第一次部署运行报错: [INFO] BUILD FAILURE[INFO] ---------------------------------------------------------- ...

  7. 什么是css sprites,如何使用?

    css sprites:精灵图(雪碧图):把一堆小图片整合在一张大图上,通过背景图片相关设置(背景图片.背景图是否重复.背景图定位),显示图片,减轻服务器对图片的请求数量 优点: 1.减少网页的HTT ...

  8. JavaScript流程控制语句脑图

    JavaScript流程控制语句脑图 图片是从网上找来的,在这记录一下,以备后面需要的时候查找方便. JavaScript通过规定的语句让有条件的按照一定的方式执行. 分为:循环语句 while do ...

  9. 让你迅速了解redis

    (1)什么是redis? Redis 是一个基于内存的高性能key-value数据库. (2)Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数 ...

  10. Unity3d开发集成Google Admob广告增加收入

    在Unity游戏中植入广告是Unity 游戏产品增加收入的一种重要方式,常用的广告有谷歌Admob,百度ssp,腾讯广点通,unity公司的unityads等等,而使用的最多的应该属于谷歌Admob, ...