Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取本机IP MAC地址

获取本机IP MAC地址

作者头像
用户1154259
发布于 2018-01-17 06:27:06
发布于 2018-01-17 06:27:06
9.2K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #include <windows.h>
 2 #include <stdio.h>
 3 #include "Iphlpapi.h" //包含对IP帮助函数的定义
 4 #pragma comment(lib,"Iphlpapi.lib")
 5 #pragma comment(lib,"WS2_32.lib")//全局数据
 6 u_char g_ucLocalMac[6];
 7 DWORD g_dwGatewayIP;
 8 DWORD g_dwLocalIP;
 9 DWORD g_dwMask;
10 BOOL GetGlobalData()
11 {
12     PIP_ADAPTER_INFO pAdapterInfo = NULL;
13     ULONG ulLen = 0;
14     //为适配器结构申请内存
15     ::GetAdaptersInfo(pAdapterInfo,&ulLen);
16     pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ulLen);
17     //取得本地适配器结构信息
18     if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS)
19     {
20         if(pAdapterInfo != NULL)
21         {
22             memcpy(g_ucLocalMac,pAdapterInfo->Address,6);
23             g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String);
24             g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
25             g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
26         }
27     }
28 
29     printf("\n ---------------------本地主机信息---------------------\n\n");
30     in_addr in;
31     in.S_un.S_addr = g_dwLocalIP;
32     printf("    IP Address : %s\n",::inet_ntoa(in));
33 
34     in.S_un.S_addr = g_dwMask;
35     printf("    Subnet Mask : %s\n",::inet_ntoa(in));
36 
37     in.S_un.S_addr = g_dwGatewayIP;
38     printf("    Default Gateway:%s\n",::inet_ntoa(in));
39 
40     u_char *p = g_ucLocalMac;
41     printf("    MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]);
42 
43     printf("\n\n");
44 
45     return TRUE;
46 }

主要使用帮助函数GetAdapterInfo即可。

VS成功实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 // getMac.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <windows.h>
 6  #include <stdio.h>
 7  #include "Iphlpapi.h" //包含对IP帮助函数的定义
 8  #pragma comment(lib,"Iphlpapi.lib")
 9  #pragma comment(lib,"WS2_32.lib")//全局数据
10  u_char g_ucLocalMac[6];
11  DWORD g_dwGatewayIP;
12  DWORD g_dwLocalIP;
13  DWORD g_dwMask;
14  BOOL GetGlobalData()
15  {
16      PIP_ADAPTER_INFO pAdapterInfo = NULL;
17      ULONG ulLen = 0;
18      //为适配器结构申请内存
19      ::GetAdaptersInfo(pAdapterInfo,&ulLen);
20      pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR,ulLen);
21      //取得本地适配器结构信息
22      if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS)
23      {
24          if(pAdapterInfo != NULL)
25          {
26              memcpy(g_ucLocalMac,pAdapterInfo->Address,6);
27              g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String);
28              g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
29              g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
30          }
31      }
32  
33      printf("\n ---------------------本地主机信息---------------------\n\n");
34      in_addr in;
35      in.S_un.S_addr = g_dwLocalIP;
36      printf("    IP Address : %s\n",::inet_ntoa(in));
37  
38      in.S_un.S_addr = g_dwMask;
39      printf("    Subnet Mask : %s\n",::inet_ntoa(in));
40  
41      in.S_un.S_addr = g_dwGatewayIP;
42      printf("    Default Gateway:%s\n",::inet_ntoa(in));
43  
44      u_char *p = g_ucLocalMac;
45      printf("    MAC Address:%02X-%02X-%02X-%02X-%02X-%02X\n",p[0],p[1],p[2],p[3],p[4],p[5]);
46  
47      printf("\n\n");
48  
49      return TRUE;
50  }
51 
52 int _tmain(int argc, _TCHAR* argv[])
53 {
54     GetGlobalData();
55     return 0;
56 }

结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-10-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C/C++ 获取 MAC 地址的几种方法
Netbios #include <windows.h> #pragma comment(lib, "Netapi32.lib") namespace { bool GetAdapterInfo(int adapterNum, std::string& macOUT) { NCB Ncb; memset(&Ncb, 0, sizeof(Ncb)); Ncb.ncb_command = NCBRESET; // 重置网卡,以便我们可以查询 Ncb.ncb_lana_num = adapterNum
王瑞MVP
2022/12/28
1.4K0
C/C++ 获取主机网卡MAC地址
MAC地址(Media Access Control address),又称为物理地址或硬件地址,是网络适配器(网卡)在制造时被分配的全球唯一的48位地址。这个地址是数据链路层(OSI模型的第二层)的一部分,用于在局域网(LAN)中唯一标识网络设备。获取网卡地址主要用于网络标识和身份验证的目的。MAC地址是一个唯一的硬件地址,通常由网卡的制造商在制造过程中分配。通过获取MAC地址可以判断当前主机的唯一性可以与IP地址绑定并实现网络准入控制。
王瑞MVP
2023/11/20
8910
C/C++ 获取主机网卡MAC地址
16.2 ARP 主机探测技术
ARP (Address Resolution Protocol,地址解析协议),是一种用于将 IP 地址转换为物理地址(MAC地址)的协议。它在 TCP/IP 协议栈中处于链路层,为了在局域网中能够正确传输数据包而设计,由协议数据单元和对应的操作命令组成。ARP 既可以由操作系统处理,也可以由网卡处理。
王瑞MVP
2023/10/21
4050
16.2 ARP 主机探测技术
15.1 套接字通过域名取IP地址
首先我们来实现一个DNS查询功能,该功能的目的是传入一个网站域名自动将该域名解析为对应的IP地址,该功能的实现依赖于gethostbyname函数,该函数将主机名作为参数,并返回一个指向hostent类型结构的指针,结构包含有关主机的信息。结构包含许多字段,其中最重要的是h_name和h_addr_list。h_name是主机名,h_addr_list是一个指向具有主机IP地址的地址列表的指针。
王瑞MVP
2023/10/17
7850
15.1 套接字通过域名取IP地址
C++如何获取网卡地址(跨平台)
  获取电脑网卡的硬件地址。就是Linux下运行ifconfig出来的硬件地址。直接上代码:  
xcywt
2023/05/23
1.4K0
C++如何获取网卡地址(跨平台)
计网 | C语言Socket编程获取本机IP及指定域名IP
需要注意的是引用winsock2.h头文件后,还需要链接该头文件的实现文件,在本机上使用宏#pragma comment (lib, "ws2_32.lib")无法成功添加该实现文件ws2_32。手动编译时会出现如下报错信息:
Ranlychan
2023/03/05
3.9K0
腾讯云上Winpcap网络编程三之ARP协议获得MAC地址表
学习文档 这里我们直接进入正题吧,关于Winpcap的基础知识讲解这里就不再赘述了。在这里给大家提供一些学习网址: Winpcap网络编程及通信编程 Winpcap中文技术文档 学习内容 获取设备列表
崔庆才
2017/03/30
2.9K0
获取本机地址信息,遇到小问题...有待解决
程序代码: 1 #include "../common/InitSock.h" 2 #include <stdio.h> 3 CInitSock initSock; 4 void main() 5 { 6 char szHost[256]; 7 ::gethostname(szHost,256); 8 hostent *pHost = ::gethostbyname(szHost); 9 in_addr addr; 10 for(int i =0;;
用户1154259
2018/01/17
8230
网络嗅探器
网络嗅探器:把网卡设置成混杂模式,并可实现对网络上传输的数据包的捕获与分析。 原理:   通常的套接字程序只能响应与自己MAC地址相匹配的 或者是 广播形式发出的数据帧,对于其他形式的数据帧网络接口采取的动作是直接丢弃   为了使网卡接收所有经过他的封包,要将其设置成混杂模式,通过原始套接字来实现。 设置混杂模式:   创建原始套接字,   绑定到一个明确的本地地址,   向套接字发送SIO_RCVALL控制命令,   接收所有的IP包 代码实现步骤:   1 创建原始套接字   2 绑定到明确地址   3
用户1154259
2018/01/17
2.1K0
网络嗅探器
侦听局域网内密码
只需在前面的网络嗅探程序基础上,添加对搜索出的端口号进行的增加功能即可: 代码如下: 在DecodeIPPacket中添加: switch(::ntohs(pTCPHdr->destinationPort)) { case 21: { GetFtp((char*)pTCPHdr+sizeof(TCPHeader),pIPHdr->ipDestination);
用户1154259
2018/01/17
1.6K0
侦听局域网内密码
C/C++ Npcap包实现数据嗅探
npcap 是Nmap自带的一个数据包处理工具,Nmap底层就是使用这个包进行收发包的,该库,是可以进行二次开发的,不过使用C语言开发费劲,在进行渗透任务时,还是使用Python构建数据包高效,这东西没啥意义.
王瑞MVP
2022/12/28
1.1K0
18.1 Socket 原生套接字抓包
原生套接字抓包的实现原理依赖于Windows系统中提供的ioctlsocket函数,该函数可将指定的网卡设置为混杂模式,网卡混杂模式(Promiscuous Mode)是常用于计算机网络抓包的一种模式,也称为监听模式。在混杂模式下,网卡可以收到经过主机的所有数据包,而非只接收它所对应的MAC地址的数据包。
王瑞MVP
2023/10/25
4980
18.1 Socket 原生套接字抓包
运用Npcap库实现SYN半开放扫描
Npcap 是一款高性能的网络捕获和数据包分析库,作为 Nmap 项目的一部分,Npcap 可用于捕获、发送和分析网络数据包。本章将介绍如何使用 Npcap 库来实现半开放扫描功能。TCP SYN 半开放扫描是一种常见且广泛使用的端口扫描技术,用于探测目标主机端口的开放状态。由于这种方法并不完成完整的 TCP 三次握手过程,因此具有更高的隐蔽性和扫描效率。
王瑞MVP
2024/08/10
2290
运用Npcap库实现SYN半开放扫描
网络编程基础第二讲.网络编程框架
     socket 是开发接口.是TCP/IP网络环境下.应用程序与驱动程序之间访问的接口.
IBinary
2019/05/25
5600
扯谈网络编程之自己实现ping
ping是基于ICMP(Internet Control Message Protocol)协议实现的。而ICMP协议是在IP层实现的。
全栈程序员站长
2022/07/07
6350
Linux下编程获取本地IP地址的常见方法
代码编译运行平台:Linux 64bits+g++(-m64),-m64表示生成64bits的程序。
恋喵大鲤鱼
2018/08/03
8.1K0
Linux下编程获取本地IP地址的常见方法
Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式。英语叫做IPv4 numbers-and-dots notation。
阳光岛主
2019/02/20
6.4K0
C/C++ 获取本机IP地址信息
#include<winsock2.h> #include<iostream> #include<string> using namespace std; #pragma comment(lib, "WS2_32.lib") string getIP() { WSADATA WSAData; char hostName[256]; if (!WSAStartup(MAKEWORD(2, 0),&WSAData)) { if(!gethostnam
王瑞MVP
2022/12/28
2.4K0
记一次蓝队—反钓鱼的策略研究
鄙人最近在某某群中寻找到了一个不知道谁的后门,心血来潮写下此文,以此提供一些蓝队简易反钓鱼的策略
亿人安全
2024/12/27
1110
记一次蓝队—反钓鱼的策略研究
几种服务器端IO模型的简单介绍及实现(上)
一些概念: 同步和异步 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪,而异步是指用户进程触发I/O操作以后便开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。 阻塞和非阻塞 阻塞和非阻塞是针对于进程在访问数据的时候,根据I/O操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 服务器端几种模型: 1、
李海彬
2018/03/23
1.1K0
几种服务器端IO模型的简单介绍及实现(上)
相关推荐
C/C++ 获取 MAC 地址的几种方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验