现在没分了,下面的程序我没怎么搞懂,麻烦高手给个解释嘛??
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地址的函数:
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;
我是菜鸟,麻烦了阿,好急哦!!!
//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;
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;