国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

獲得遠程或本地機器的網卡的MAC

2019-11-18 18:25:08
字體:
來源:轉載
供稿:網友

下面的函數以'XX-XX-XX-XX-XX-XX' 的格式返回遠程或本地機器的MAC地址。

Function to return the MAC address of a remote or local machine in the format 'XX-XX-XX-XX-XX-XX'

返回的MAC地址是一個能用在多個方面的唯一標識。使用方法:
ShowMessage(GetMacAddress('//MHEYDON');
輸出'00-02-08-E7-99-6B'

// ======================================================================
//返回值是主機AServerName的MAC地址
//AServerName參數的格式為'//ServerName' 或者 'ServerName'
//參數ServerName為空時返回本機的MAC地址
//MAC地址以'XX-XX-XX-XX-XX-XX'的格式返回
// ======================================================================

function GetMacAddress(const AServerName : string) : string;
type
     TNetTransportEnum = function(pszServer : PWideChar;
                                  Level : DWord;
                                  var pbBuffer : pointer;
                                  PRefMaxLen : LongInt;
                                  var EntriesRead : DWORD;
                                  var TotalEntries : DWORD;
                                  var ResumeHandle : DWORD) : DWORD; stdcall;

     TNetApiBufferFree = function(Buffer : pointer) : DWORD; stdcall;

     PTransportInfo = ^TTransportInfo;
     TTransportInfo = record
                       quality_of_service : DWORD;
                       number_of_vcs : DWORD;
                       transport_name : PWChar;
                       transport_address : PWChar;
                       wan_ish : boolean;
                     end;

var E,ResumeHandle,
    EntriesRead,
    TotalEntries : DWORD;
    FLibHandle : THandle;
    sMachineName,
    sMacAddr,
    Retvar : string;
    pBuffer : pointer;
    pInfo : PTransportInfo;
    FNetTransportEnum : TNetTransportEnum;
    FNetApiBufferFree : TNetApiBufferFree;
    pszServer : array[0..128] of WideChar;
    i,ii,iIdx : integer;
begin
  sMachineName := trim(AServerName);
  Retvar := '00-00-00-00-00-00';

  // Add leading // if missing
  if (sMachineName <> '') and (length(sMachineName) >= 2) then begin
    if copy(sMachineName,1,2) <> '//' then
      sMachineName := '//' + sMachineName
  end;

  // Setup and load from DLL
  pBuffer := nil;
  ResumeHandle := 0;
  FLibHandle := LoadLibrary('NETAPI32.DLL');

  // Execute the external function
  if FLibHandle <> 0 then begin
    @FNetTransportEnum := GetProcAddress(FLibHandle,'NetWkstaTransportEnum');
    @FNetApiBufferFree := GetProcAddress(FLibHandle,'NetApiBufferFree');
    E := FNetTransportEnum(StringToWideChar(sMachineName,pszServer,129),0,
                           pBuffer,-1,EntriesRead,TotalEntries,Resumehandle);

    if E = 0 then begin
      pInfo := pBuffer;

      // Enumerate all protocols - look for TCPip
      for i := 1 to EntriesRead do begin
        if pos('TCPIP',UpperCase(pInfo^.transport_name)) <> 0 then begin
          // Got It - now format result 'xx-xx-xx-xx-xx-xx'
          iIdx := 1;
          sMacAddr := pInfo^.transport_address;

          for ii := 1 to 12 do begin
            Retvar[iIdx] := sMacAddr[ii];
            inc(iIdx);
            if iIdx in [3,6,9,12,15] then inc(iIdx);
          end;
        end;

        inc(pInfo);
      end;
      if pBuffer <> nil then FNetApiBufferFree(pBuffer);
    end;

    try
      FreeLibrary(FLibHandle);
    except 
      // 錯誤處理
    end;
  end;
  result:=Retvar;
end;


上一篇:通用查詢組件設計(續)

下一篇:增強MIDAS的安全性

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 巧家县| 融水| 清苑县| 崇义县| 辉县市| 旺苍县| 原平市| 麦盖提县| 潮安县| 项城市| 彭阳县| 平泉县| 小金县| 文安县| 习水县| 达孜县| 随州市| 宜春市| 三江| 宣恩县| 孙吴县| 罗源县| 九江县| 鄂伦春自治旗| 大关县| 本溪市| 巴南区| 黎平县| 囊谦县| 延长县| 绥江县| 马尔康县| 达孜县| 五莲县| 汶川县| 万全县| 昆山市| 郸城县| 金阳县| 仙桃市| 昌宁县|