《Windows网络与通信程序设计》——示例:获取MAC地址
来源:互联网 发布:刘路造假事件知乎 编辑:程序博客网 时间:2024/05/22 18:22
示例:获取MAC地址
说明:
下面的例子输出了本机的IP地址、网络(内部 LAN )的子网掩码、网关的lP地址和本机的MAC地址。
代码:
unit uLocalHostInfo;
interface
uses
Windows,SysUtils,Classes;
procedure GetGlobalData(AList: TStrings);
implementation
uses WinSock2;
const
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;
type
PIP_ADDRESS_STRING = ^IP_ADDRESS_STRING;
IP_ADDRESS_STRING = array[0..15] of char; // IP as string
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_ADDRESS_STRING;
Context: DWORD;
end;
//---IP_ADAPTER_INFO结构包含了本地计算机上网络适配器的信息
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO; //--指向适配器列表中的下一个适配器(计算机可能有多个适配器)
ComboIndex: DWORD; //--保留字段
AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of char; //--适配器名称
Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char; //--对适配器的描述
AddressLength: UINT; //--MAC地址的长度(应为6个字节)
Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte; //--MAC地址
Index: DWORD; //--适配器索引
aType: UINT; //--适配器类型,如MIB_IF_TYPE_ETHERNET
DHCPEnabled: UINT; //--指定此适配器是否使用了DHCP(动态主机配置)协议
CurrentIPAddress: PIP_ADDR_STRING; //--保留宇段
IPAddressList: IP_ADDR_STRING; //--与适配器相关的IP地址列表
GatewayList: IP_ADDR_STRING; //--网关地址列表
DHCPServer: IP_ADDR_STRING; //--DHCP服务器
HaveWINS: BOOL; //--指定此适配器是否使用WINS(Windows Internet名称服务)
PrimaryWINSServer: IP_ADDR_STRING; //--WINS服务器的主IP地址
SecondaryWINSServer: IP_ADDR_STRING; //--WINS服务器的第二IP地址
LeaseObtained: LongInt; //--获取当前DHCP租用时间
LeaseExpires: LongInt; //--当前DHCP租用期满的时间
end;
{
作用:获取本地机器的适配器信息。
函数调用成功返回ERROR_SUCCESS
}
function GetAdaptersInfo(
pAdapterInfo: PIP_ADAPTER_INFO; //--指向一个缓冲区.用来取得IP_ADAPTER_INFO结构的列表
pOutBufLen: PULONG //--用来指定上面缓冲区的大小。如果大小不够.此参数返回所需大小
): DWORD; stdcall; external 'Iphlpapi.dll' name 'GetAdaptersInfo';
procedure GetGlobalData(AList: TStrings);
//--可以通过"ipconfig /all"命令进行验证
var
g_ucLocalMac: array[0..5] of PChar; // 本地MAC地址
g_dwGatewayIP: DWORD; // 网关IP地址
g_dwLocalIP: DWORD; // 本地IP地址
g_dwMask: DWORD; // 子网掩码
pAdapterInfo:PIP_ADAPTER_INFO;
ulLen:ULONG;
in1: TInAddr;
p:PChar;
begin
pAdapterInfo := nil;
ulLen := 0;
//---为适配器结构申请内存
GetAdaptersInfo(pAdapterInfo,@ulLen);
pAdapterInfo := AllocMem(ulLen);
//---取得本地适配器结构信息
if (GetAdaptersInfo(pAdapterInfo,@ulLen) = ERROR_SUCCESS) then
begin
if pAdapterInfo <> nil then
begin
move(pAdapterInfo.Address[1],g_ucLocalMac[0],length(g_ucLocalMac));
g_dwGatewayIP := inet_addr(pAdapterInfo.GatewayList.IpAddress);
g_dwLocalIP := inet_addr(pAdapterInfo.IpAddressList.IpAddress);
g_dwMask := inet_addr(pAdapterInfo.IpAddressList.IpMask);
end;
end;
//---
AList.Add('-------------------- 本地主机信息 -----------------------');
//---
in1.S_addr := g_dwLocalIP;
AList.Add(format(' IP Address : %s',[inet_ntoa(in1)]));
//---
in1.S_addr := g_dwMask;
AList.Add(format(' Subnet Mask : %s',[inet_ntoa(in1)]));
//---
in1.S_addr := g_dwGatewayIP;
AList.Add(format('Default Gateway : %s',[inet_ntoa(in1)]));
//---
p := @g_ucLocalMac[0];
AList.Add(format(' MAC Address : %.2X-%.2X-%.2X-%.2X-%.2X-%.2X',[Ord(p[0]), Ord(p[1]), Ord(p[2]), Ord(p[3]), Ord(p[4]), Ord(p[5])]));
//---
FreeMem(pAdapterInfo);
end;
end.
- 《Windows网络与通信程序设计》——示例:获取MAC地址
- 《Windows网络与通信程序设计》——示例:地址信息
- 《Windows网络与通信程序设计》——示例:获取本机IP地址
- 《Windows网络与通信程序设计》——示例:Winsock库的装入和释放
- 学习《windows网络与通信程序设计》一
- 网络通信---MAC地址
- java获取有线网络的ip地址 与mac地址
- Windows 网络与通信程序设计 王艳平 Phoenix 金羽 防火墙
- 获取本地IP与网络Ip及Mac地址
- Windows C 获取mac地址
- c++ windows 获取mac地址
- 嵌入式 获取网卡设备以及IP和MAC地址示例以及网络编程之ioctl小结
- 《Windows网络与通信程序设计》读书笔记----IOCP与可伸缩网络程序
- MAC地址与网络端口
- windows程序设计——串口通信
- iOS —— 获取Mac地址
- windows mobile 6.5 获取mac 地址
- windows、liunx 下获取mac地址
- Type Casting
- 实现一些WinCE下没有的函数
- 叹!!!
- 《Windows网络与通信程序设计》——示例:获取本机IP地址
- 主表先查询连接子表时间查询
- 《Windows网络与通信程序设计》——示例:获取MAC地址
- ajaxpro框架
- 哈佛图书馆自习室墙上的训言
- 报表制作工具中参数名的内部保留字段
- CIFS:通用 Internet 文件系统 (Common Internet File System)
- Linux内核设计与实现读书笔记(5)-中断和中断处理程序
- Intel系统编程指南第八章——8.9 对硬件多线程性能处理器的编程考虑
- 二级指针各种说法(先转着好看看)
- GCC-3.4.6源代码学习笔记(134)