社区
C++ 语言
帖子详情
如何将通过VC程序获取的MAC地址和IP地址一一对应起来?
kid5
2011-09-19 04:15:39
高分求助。如标题
...全文
1152
5
打赏
收藏
如何将通过VC程序获取的MAC地址和IP地址一一对应起来?
高分求助。如标题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kid5
2011-09-20
打赏
举报
回复
[Quote=引用 1 楼 yuelengdihai 的回复:]
在程序中用doc命令:nbtstat -A 192.168.0.2能查看对应的mac地址
[/Quote]
这个命令不错,配合在程序中执行,很有用,十分感谢
kid5
2011-09-20
打赏
举报
回复
[Quote=引用 3 楼 agoago_2009 的回复:]
#include <winsock2.h> //该头文件定义了Socket编程的功能
#include <stdio.h> //该头文件声明了输入输出流函数
#include <stdlib.h> //该头文件定义了一些通用函数
#include <httpext.h> //该头文件支持HTTP请求
#include <windef.h> //该……
[/Quote]
我需要的是IP和MAC要对应起来。还是感谢你。
Gloveing
2011-09-19
打赏
举报
回复
#include <winsock2.h> //该头文件定义了Socket编程的功能
#include <stdio.h> //该头文件声明了输入输出流函数
#include <stdlib.h> //该头文件定义了一些通用函数
#include <httpext.h> //该头文件支持HTTP请求
#include <windef.h> //该头文件定义了Windows的所有数据基本型态
#include <Nb30.h> //该头文件声明了netbios的所有的函数
#pragma comment(lib,"ws2_32.lib") //连接ws2_32.lib库.只要程序中用到Winsock API 函数,都要用到 Ws2_32.lib
#pragma comment(lib,"netapi32.lib") //连接Netapi32.lib库,MAC获取中用到了NetApi32.DLL的功能
//在Win32平台上的Winsock编程都要经过下列的基本步骤:定义变量->获得Winsock版本->加载Winsock库->
//初始化->创建套接字->设置套接字选项->关闭套接字->卸载Winsock库,释放所有资源。
void CheckIP(void) //定义checkIP函数,用于取本机的ip地址
{
WSADATA wsaData;
char name[155]; //定义用于存放获得主机名的变量
char *ip; //定义IP地址变量
PHOSTENT hostinfo;
//调用MAKEWORD()获得Winsocl版本的正确值,用于下面的加载Winscok库
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )
{ //加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续往下执行
if( gethostname ( name, sizeof(name)) == 0)
{ //如果成功,将本地主机名存放入由name参数指定的缓冲区中
if((hostinfo = gethostbyname(name)) != NULL)
{ //这是获取主机,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo为PHOSTENT型的变量。
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
//inet_addr()函数把地址串转换为IP地址
//调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的IP地址(如202.197.11.12.)
printf(" IP地址: %s\n",ip); //输出IP地址
}
}
WSACleanup( ); //卸载Winsock库,并释放所有资源
}
}
//通过WindowsNT/Win2000中内置的NetApi32.DLL的功能来实现的。首先通过发送NCBENUM命令,获取网卡的
//数目和每张网卡的内部编号,然后对每个网卡标号发送NCBASTAT命令获取其MAC地址。
int getMAC(char * mac) //用NetAPI来获取网卡MAC地址
{
NCB ncb; //定义一个NCB(网络控制块)类型的结构体变量ncb
typedef struct _ASTAT_ //自定义一个结构体_ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, *PASTAT;
ASTAT Adapter;
typedef struct _LANA_ENUM //自定义一个结构体_ASTAT_
{
UCHAR length;
UCHAR lana[MAX_LANA]; //存放网卡MAC地址
}LANA_ENUM;
LANA_ENUM lana_enum;
// 取得网卡信息列表
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb)); //将已开辟内存空间ncb 的值均设为值 0
memset(&lana_enum, 0, sizeof(lana_enum)); //清空一个结构类型的变量lana_enum,赋值为0
//对结构体变量ncb赋值
ncb.ncb_command = NCBENUM; //统计系统中网卡的数量
ncb.ncb_buffer = (unsigned char *)&lana_enum; //ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区
ncb.ncb_length = sizeof(LANA_ENUM);
//向网卡发送NCBENUM命令,以获取当前机器的网卡信息,如有多少个网卡,每个网卡的编号(MAC地址)
uRetCode = Netbios(&ncb); //调用netbois(ncb)获取网卡序列号
if(uRetCode != NRC_GOODRET)
return uRetCode;
//对每一个网卡,以其网卡编号为输入编号,获取其MAC地址
for(int lana=0; lana<lana_enum.length; lana++)
{
ncb.ncb_command = NCBRESET; //对网卡发送NCBRESET命令,进行初始化
ncb.ncb_lana_num = lana_enum.lana[lana];
uRetCode = Netbios(&ncb);
}
if(uRetCode != NRC_GOODRET)
return uRetCode;
// 准备取得接口卡的状态块取得MAC地址
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT; //对网卡发送NCBSTAT命令,获取网卡信息
ncb.ncb_lana_num = lana_enum.lana[0]; //指定网卡号,这里仅仅指定第一块网卡,通常为有线网卡
strcpy((char*)ncb.ncb_callname, "*"); //远程系统名赋值为*
ncb.ncb_buffer = (unsigned char *)&Adapter; //指定返回的信息存放的变量
ncb.ncb_length = sizeof(Adapter);
//接着发送NCBASTAT命令以获取网卡的信息
uRetCode = Netbios(&ncb);
// 取得网卡的信息,并且如果网卡正常工作的话,返回标准的冒号分隔格式。
if(uRetCode != NRC_GOODRET)
return uRetCode;
//把网卡MAC地址格式转化为常用的16进制形式,输出到字符串mac中
sprintf(mac,"%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);
return 0;
}
int main(void) //主函数,程序的入口
{
CheckIP(); //调用CheckIP()函数获得,输出IP地址
char mac[200];
getMAC(mac); //调用getMAC()函数获得,输出MAC地址
printf(" mac地址 : %s \n",mac);
return 0;
}
ryfdizuo
2011-09-19
打赏
举报
回复
up~
去vc网络编程版问问看,
cocoabird
2011-09-19
打赏
举报
回复
在程序中用doc命令:nbtstat -A 192.168.0.2能查看对应的mac地址
MFC Windows
程序
设计[314]之
获取
Windows的
MAC
地址
和
IP
地址
等相关参数(附源码)
MFC是微软公司提供的一个类库(class libraries),用以减少应用
程序
开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习
起来
很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。......
华为网络面试题
1、在无盘工作站向服务器申请
IP
地址
时,使用的是( )协议。 A、ARP B、RARP C、ICMP D、IGMP ANSWER:B ARP(
地址
解析协议)是设备通过自己知道的
IP
地址
来获得自己不知道的物理
地址
的协议。假如一个设备不知道它自己的
IP
地址
,但是知道自己的物理
地址
,网络上的无盘工作站就是这种情况,设备知道的只是网络接口卡上的物理
地址
。这种情况下应该怎么办呢?RA...
[计算机网络] 链路层与局域网
MAC
地址
MAC
多路访问协议
链路层与局域网 网络层与链路层工作 网络层 链路层 提供两台主机之间的通信服务。 网络层的数据报如何被封装成链路层的帧; 路径:由源主机和目的主机之间的一系列通信链路和路由器组成 分组如何通过各段链路 接受链路层服务 链路层协议是否能够提供路由器之间的可靠数据传输; 能够在各段链路层提供异构服务的情况下,完成端到端的工作。 通信路径上不同的链路是否采用不同的链路层协议。 链路层信道类型 广播链路 点对点链路 许多主机被连接到相同的通信信道(共享信道) **直接
计算机网络面试题
目录(?)[-] 一华为公司面试新员工的有关计算机网络的题目和答案GB0-180 华为认证网络工程师模拟考试 一、华为公司面试新员工的有关计算机网络的题目和答案 RFC1918文件规定了保留作为局域网使用的私有
地址
: 10.0.0.0 - 10.255.255.255 (10/8
VC
常用代码
分类:
VC
学习 2009-03-07 15:28 1141人阅读 评论(0) 收藏 举报 =========================================================== //注意事项 //先执行OnInitDialog()函数,然后执行构造函数! //98下没有新宋体 //XP下窗口高度加8 ===========
C++ 语言
64,686
社区成员
250,505
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章