C/C++获取本机名+本机IP+本机MAC
本机名、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的更多相关文章
- Python - 获取本机IP地址、Mac地址
Python - 获取本机IP地址.Mac地址 在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 直接看代码: # Python - 获取本机I ...
- win7下的IP-主机名映射
今天学了个技巧,win7下有个目录:C:\Windows\System32\drivers\etc 该目录下有个文件: hosts 在这个文件里面我们可以映射IP-主机名: 127.0.0.1 loc ...
- C++获取本机用于连接的IP地址
最近写个程序需要获取本机用于连接的IP地址,经过很多的尝试后,最终使用的方法如下: 使用cmd命令 netstat | findstr “192.168.6.66:3333” > D:\ ...
- windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录)
windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录) 一.总 ...
- 获取本机的IP地址和mac地址
1. 以前一直用ipconfig来查看ip地址,哈哈哈,现在发现挺好玩 #获取本机的IP地址和mac地址 import uuid import socket def get_mac_address() ...
- JS获取客户端IP地址、MAC和主机名七种方法
一.使用JS获取客户端IP的几个方法方法一(只针对IE且客户端的IE允许AcitiveX运行,通过平台:XP,SERVER03,2000).获取客户端IP代码:<HTML><HEAD ...
- JS获取客户端IP地址、MAC和主机名的7个方法汇总
今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本. ...
- C++获得本机所有网卡的IP和MAC地址信息
一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址:如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种:因此,如果要获得本机所有网卡的IP和M ...
- 使用Python获取计算机名,ip地址,mac地址等等
获取计算机名 # 获取计算机名,常用的方法有三种 import os import socket # method one name = socket.gethostname() print(name ...
随机推荐
- 安装rails遇到的问题
1 要安装js运行环境,例如Nodejs,如果使用nvm记得,安装完执行nvm use '版本号' 2 或者在Gemfile文件中加入: gem 'execjs'gem 'therubyracer'然 ...
- DataGridView带图标的单元格实现
目的: 扩展 C# WinForm 自带的表格控件,使其可以自动判断数据的上下界限值,并标识溢出. 这里使用的方法是:扩展 表格的列 对象:DataGridViewColumn. 1.创建类:Data ...
- 用IDEA创建一个SpringBoot项目
next后等待项目构建完成 运行方法一: 方法二:
- java分页三个类 PageBean ResponseUtil StringUtil
package ssmy.page; /** * 分页类 * @author Jesse * */public class PageBean { private int page;//第几页 priv ...
- 《C#多线程编程实现方式》
一.使用线程的理由 1.可以使用线程将代码同其他代码隔离,提高应用程序的可靠性. 2.可以使用线程来简化编码. 3.可以使用线程来实现并发执行. 二.基本知识 1.进程与线程:进程作为操作系统执行程序 ...
- jQuery(四)(DOM一)
jQuery把复杂的代码简单化. 如果我们通过AJAX获取到数据之后然后才能确定结构的话,这种情况就需要动态的处理节点了 一.DOM节点的创建:创建div节点元素的属性和创建div节点元素的样式doc ...
- (三)JavaScript之[事件]与[字符串]
5].事件**JavaScript事件:HTML事件 * HTML事件是发生在HTML元素上的事情 * HTML事件可以是[浏览器的行为],也可以是[用户的行为] * * 实例: * HTML页面完成 ...
- 【起航计划 016】2015 起航计划 Android APIDemo的魔鬼步伐 15 App->Activity->Wallpaper 系统壁纸作为当前Activity的背景
Wallpaper介绍一个Activity如何通过Style把系统Wallpaper作为当前Activity的背景. 这是WallpaperActivity在AndroidManifest.xml中的 ...
- May 1 2017 Week 18 Monday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满了种种可能. Yesterday my girl friend told me that ...
- 如何下载YouTube 8K视频
随着科技的进步,人们对高清视频的要求越来越高,因此视频的分辨率也越来越高.从最开始的720P,到1080P,再到2K,进而到如今4K,不断地满足人们挑剔的胃口.4K分辨率的视频已经逐渐进入人们的生活中 ...