delphi技术专题---获取网卡物理地址之内存获取方式函数源码

本文主要是介绍delphi技术专题---获取网卡物理地址之内存获取方式函数源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请保留本网页地址:http://blog.csdn.net/sushengmiyan/article/details/8544442

先贴代码:

{----------------------------------------------------------------------------\-
作者:sushengmiyan 2013.01.26
参数:Alana: Integer = 0
返回:string
功能:通过LANA号获取Mac物理地址 (内存方式获取),整体步骤如下:一、枚举系统上可用的所有LANA编号二、重置计划使用的每个LANA编号三、适配器命令获取网卡地址
\-----------------------------------------------------------------------------}function MemGetNetCardName(Alana: Integer = 0): string;
varNCB: TNCB;//Netbios控制块AdapterStatus: TAdapterStatus;//取网卡状态LanaEnum: TLanaEnum; //LANA枚举值I: Integer;CRC: Char;//netBios返回值
beginResult := '';Try{ http://blog.csdn.net/sushengmiyan/article/details/8543811一、枚举LANA值①.申请分配一个TNCB结构           NCB: TNCB;②.将TNCB结构变量初始化成O        ZeroMemory(@NCB , SizeOf(NCB));③.置命令为NCBENUM                NCB.ncb_Command := chr(NCBENUM);④.为ncb_buffer分配LANA_ENUM      NCB.ncb_buffer := @LANAENUM;⑤.为NCB_length制定长度           NCB.NCB_length := Sizeof(LANAENUM);⑥.调用Netbios函数获取Netbios     CRC := NetBios(@NCB);⑦.返回值NRC_GOODRET表示成功      NCB.ncb_retcode = Chr(NRC_GOODRET)}ZeroMemory(@NCB , SizeOf(NCB));NCB.ncb_Command := Chr(NCBENUM);NCB.ncb_buffer := @LANAENUM;NCB.NCB_length := Sizeof(LANAENUM);CRC := NetBios(@NCB);if not (NCB.ncb_retcode = Chr(NRC_GOODRET)) then Exit;{ http://blog.csdn.net/sushengmiyan/article/details/8543811二、重置计划使用的每个LANA编号①.申请分配一个TNCB结构           NCB: TNCB;②.将TNCB结构变量初始化成O        ZeroMemory(@NCB , SizeOf(NCB));③.置命令为NCBRESET               NCB.ncb_Command := chr(NCBRESET);④.给命令设置LANA编号             NCB.ncb_lana_num := LanaEnum.lana[Alana];⑤.调用Netbios函数获取Netbios     CRC := NetBios(@NCB);⑥.返回值NRC_GOODRET表示成功      NCB.ncb_retcode = Chr(NRC_GOODRET)}ZeroMemory(@NCB , SizeOf(NCB));NCb.ncb_Command := Chr(NCBRESET);NCB.ncb_lana_num := LanaEnum.lana[Alana];CRC := Netbios(@NCB);if not (NCB.ncb_retcode = Chr(NRC_GOODRET)) then Exit;{ http://blog.csdn.net/sushengmiyan/article/details/8543811三、使用TAdapterStatus结构获取网卡地址①.申请分配一个TNCB结构           NCB: TNCB;②.将TNCB结构变量初始化成O        ZeroMemory(@NCB , SizeOf(NCB));③.置命令为NCBASTAT               NCB.ncb_Command := chr(NCBASTAT);④.为ncb_buffer分配LANA_ENUM      NCB.ncb_buffer := @LANAENUM;⑤.设置ncb_callname               NCB.ncb_callname := '* ' + #0;⑥.为ncb_buffer分配AdapterStatus  NCB.ncb_buffer := @AdapterStatus;⑦.为NCB_length制定长度           NCB.NCB_length := Sizeof(AdapterStatus);⑧.调用Netbios函数获取Netbios     CRC := NetBios(@NCB);}ZeroMemory(@NCB , SizeOf(NCB));NCb.ncb_Command := chr(NCBASTAT);NCB.ncb_lana_num := LANAENUM.lana[Alana];NCB.ncb_callname := '* ' + #0;//不明白为何如此设置,*代表啥子?//有懂的可以邮件分享 429119108@qq.com   O(∩_∩)O谢谢NCB.ncb_buffer := @AdapterStatus;NCB.ncb_length := SizeOf(AdapterStatus);CRC := NetBios(@NCB);//获取形如AA-BB-CC-DD-EE-FF形式的mac物理地址字符串Result := '';for I := 0 to 5 doif SameStr(Result , '') thenResult := Result + IntToHex(Integer(AdapterStatus.adapter_address[I]) , 2)elseResult := Result + '-' + IntToHex(Integer(AdapterStatus.adapter_address[I]) , 2);FinallyEnd;
end;


关于理论方面的知识,前面已经介绍过了,如果遇到不明白的可以去前面几篇文章查看,这里面我也有不明白的,希望有明白的可以指教一下~O(∩_∩)O谢谢。

查看获取的mac地址是否正确的方式:

在Windows 2000/XP/Vista/WIN8中

点击 开始-运行-进入后输入ipconfig /all
在出现的结果中查找‘物理地址’或者Physical Address后的字符串即可。


这篇关于delphi技术专题---获取网卡物理地址之内存获取方式函数源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751880

相关文章

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼