能否讲讲怎样取网卡物理地址并作为机器的唯一性识别标志。(20分)

  • 主题发起人 主题发起人 TENTODBV
  • 开始时间 开始时间
T

TENTODBV

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个小共享程序,用硬盘物理序列号作为机器识别。试过用一些加密控件和取硬盘序列号的代码,一般都能顺利取得物理序列号。但最近遇到一台机子,用各种方法都无法取得硬盘号。想改用MAC地址作为机器识别,但不知怎样实现。希望得到各位帮助。
 
在网络上搜索了一下。发现MAC地址是可以改的。看来用MAC意义不大。
 
Creates a globally unique identifier.<br><br>Unit<br><br>SysUtils<br><br>Category<br><br>interface and GUID utilities<br><br>Delphi syntax:<br><br>function CreateGUID(out Guid: TGUID): HResult;<br><br>C++ syntax:<br><br>extern PACKAGE HRESULT __stdcall CreateGUID(GUID &amp;Guid);<br><br>Description<br><br>CreateGUID sets Guid to a new-created Globally Unique Identifier. <br><br>Under Windows, CreateGUID calls the Windows API CoCreateGUID. <br> Under Linux, CreateGUID calls uuid_generate_time.
 
mac改不容易吧,应该是通过软件来更改的吧<br>单钝手工是很难改的吧
 
硬件内建的MAC确实不容易改(相对而言).关键是没有资料如何读取这个硬件内建的.基本找的到的都是软的.只要在网卡的配置那里改一改就可以了,虽然可以同样的方法判断用户的MAC是否是软件修改的(指的是网卡配置),但当用户的MAC是修改过的时候,没有一个合理的方法获取.
 
其实windowsxp的那种识别方法不错,就是利用硬盘序列号+mac+cpu id+.......反正挺多的
 
这个资料你看看吧<br>可以采用三种方式:<br>1、98下,采用GUID;<br>2、2000,XP下,通过ARP或UDP<br>举个例子:<br>用ARP,FIPAddr=你的网卡捆绑的IP<br>...<br>implementation<br>function inet_addr(const cp: PChar): DWord; stdcall; external 'WS2_32.DLL' name 'inet_addr';<br>function SendARP(const DestIP: DWord;<br>&nbsp; const SrcIP: DWord;<br>&nbsp; const pMacAddr: Pointer;<br>&nbsp; const PhyAddrLen: PULONG): DWord; stdcall; external 'IPHLPAPI.dll' name 'SendARP';<br><br>{$R *.dfm}<br>function TForm1.GetMacByIP(FIPAddr: string): string;<br>... &nbsp;<br><br>function TForm1.GetMacByIP(FIPAddr: string): string;<br>var<br>&nbsp; dwResult: DWord;<br>&nbsp; ulIPAddr: DWord;<br>&nbsp; ulMacAddr: array[0..5] of Byte;<br>&nbsp; ulAddrLen: ULONG;<br>begin<br>&nbsp; ulIPAddr := INet_Addr(PChar(FIPAddr));<br><br>&nbsp; if ulIPAddr = INADDR_NONE then<br>&nbsp; &nbsp; exit;<br>&nbsp; ulAddrLen := 6;<br>&nbsp; dwResult := SendARP(ulIPAddr, 0, @ulMacAddr, @ulAddrLen);<br><br>&nbsp; if dwResult = 0 then<br>&nbsp; &nbsp; result := (IntToHex(ulMacAddr[0], 2) + ':' +<br>&nbsp; &nbsp; &nbsp; IntToHex(ulMacAddr[1], 2) + ':' +<br>&nbsp; &nbsp; &nbsp; IntToHex(ulMacAddr[2], 2) + ':' +<br>&nbsp; &nbsp; &nbsp; IntToHex(ulMacAddr[3], 2) + ':' +<br>&nbsp; &nbsp; &nbsp; IntToHex(ulMacAddr[4], 2) + ':' +<br>&nbsp; &nbsp; &nbsp; IntToHex(ulMacAddr[5], 2))<br>&nbsp; else<br>&nbsp; &nbsp; result := '';<br>end;
 
后退
顶部