现在没分了,下面的程序我没怎么搞懂,麻烦高手给个解释嘛??
1.获取IP地址的函数:
function LocalIP:string;
type
TaPInAddr=array [0..10] of PInAddr;
PaPInAddr=^TaPInAddr;
var
phe:PHostEnt;
pptr:PaPInAddr;
Buffer:array [0..63] of char;
I:Integer;
GInitData:TWSADATA;
begin
WSAStartup($101, GInitData);
Result:='';
GetHostName(Buffer, SizeOf(Buffer));
phe:=GetHostByName(buffer);
if phe=nil then Exit;
pptr:=PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I]<> nil do begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
WSACleanup;
2.获取MAC地址的:
function  NBGetAdapterAddress(a:integer):String;
Var
NCB:TNCB;
ADAPTER:TADAPTERSTATUS;
LANAENUM:TLANAENUM;
intIdx:Integer;
cRC:Char;
 strTemp:String;
Begin
Result:='';
Try
ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command:=Chr(NCBENUM);
cRC:=NetBios(@NCB);
NCB.ncb_buffer:=@LANAENUM;
NCB.ncb_length:=SizeOf(LANAENUM);
cRC:=NetBios(@NCB);
If   Ord(cRC)<>0   Then   
exit;
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command:=Chr(NCBRESET);
NCB.ncb_lana_num:=LANAENUM.lana[a];
cRC:=NetBios(@NCB);
If   Ord(cRC)<>0   Then  exit;
ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command:=Chr(NCBASTAT);
NCB.ncb_lana_num:=LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname,   '*');   
NCB.ncb_buffer:=@ADAPTER;
NCB.ncb_length:=SizeOf(ADAPTER);
cRC:=NetBios(@NCB);
strTemp:='';
For   intIdx:=0 To 5   Do
              strTemp:=strTemp+InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
Result:=strTemp;
Finally   
end;
end;

解决方案 »

  1.   

    就是具体是怎么获得Ip,MAC的啊?这两个函数的实现方法或思想步骤是怎样的啊?
    我是菜鸟,麻烦了阿,好急哦!!!
      

  2.   

    //-------------------------------------------
    //LocalIP返回本机上IP地址列表中最后一个IP地址
    //-------------------------------------------function LocalIP:string;
    type
      TaPInAddr=array [0..10] of PInAddr;
      PaPInAddr=^TaPInAddr;
    var
      phe:PHostEnt;
      pptr:PaPInAddr;
      Buffer:array [0..63] of char;
      I:Integer;
      GInitData:TWSADATA;
    begin
      //初始化Windows Socket
      WSAStartup($101, GInitData);
      Result:='';
      //得到本地机器名
      GetHostName(Buffer, SizeOf(Buffer));
      //根据机器名得到机器信息
      phe:=GetHostByName(buffer);
      //如果没得到机器信息,则退出
      if phe=nil then Exit;
      //h_addr_list存放的是IP地址列表
      pptr:=PaPInAddr(Phe^.h_addr_list);
      I := 0;
      //遍历IP地址列表
      while pptr^[I]<> nil do
      begin
        //将IP地址转换成字符串
        result:=StrPas(inet_ntoa(pptr^[I]^));
        Inc(I);
      end;
      //结束使用Windows Socket
      WSACleanup;
    end;
      

  3.   

    function  NBGetAdapterAddress(a:integer):String;
    Var
      NCB:TNCB;
      ADAPTER:TADAPTERSTATUS;
      LANAENUM:TLANAENUM;
      intIdx:Integer;
      cRC:Char;
      strTemp:String;
    Begin
      Result:='';
      Try
        //------------
        //使用NCBENUM命令
        //得到网卡数量
        //------------
        ZeroMemory(@NCB,SizeOf(NCB));
        NCB.ncb_command:=Chr(NCBENUM);
        cRC:=NetBios(@NCB);
        NCB.ncb_buffer:=@LANAENUM;
        NCB.ncb_length:=SizeOf(LANAENUM);
        cRC:=NetBios(@NCB);
        If   Ord(cRC)<>0   Then
          exit;    //--------------
        //使用NCBRESET命令
        //重置网卡
        //使用其它命令前必须重置网卡
        //-------------
        ZeroMemory(@NCB, SizeOf(NCB));
        NCB.ncb_command:=Chr(NCBRESET);
        NCB.ncb_lana_num:=LANAENUM.lana[a];
        cRC:=NetBios(@NCB);
        If   Ord(cRC)<>0   Then  Exit;    //--------------
        //使用NCBASTAT命令
        //得到网卡状态
        //-------------
        ZeroMemory(@NCB,SizeOf(NCB));
        NCB.ncb_command:=Chr(NCBASTAT);
        NCB.ncb_lana_num:=LANAENUM.lana[a];
        StrPCopy(NCB.ncb_callname,   '*');
        NCB.ncb_buffer:=@ADAPTER;
        NCB.ncb_length:=SizeOf(ADAPTER);
        cRC:=NetBios(@NCB);
        //adapter_address是网卡MAC地址
        strTemp:='';
        For   intIdx:=0 To 5   Do
          strTemp:=strTemp+InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
        Result:=strTemp;
      Finally
      end;
    end;