怎样得到远程主机的MAC地址

zhangquan666666 2003-06-05 06:17:29
各位高手:我想得到已知ip地址的机器的MAC网卡地址,后来在网上知道SENDARP完成此功能,可是我试了几次都不行。谁能帮我完成这个功能!

...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
popmailzjw 2003-08-06
  • 打赏
  • 举报
回复
收藏
jenemery 2003-08-06
  • 打赏
  • 举报
回复
mark
newsofter 2003-06-12
  • 打赏
  • 举报
回复
查找计算机的MAC地址
unit MacAdress;

interface


uses SysUtils,NB30, Classes, Controls, StdCtrls,windows,messages,Dialogs;

type
TMACAdress = array[0..5] of byte;
ENCBError = class(Exception);


function GetMACAdress(AdapterNum:byte):TMACAdress;
function MACAdressToStr(aMACAdr:TMACAdress):string;
function IsMACAdress(aMACAdr:TMACAdress):boolean;

var
MacAdressFormat:string;
implementation

ResourceString
SNCBError='NetBios-Fehler %d';

type TAStat=packed record
Adapter_Status:TAdapterStatus;
Name_Buffer:array[0..49] of TNameBuffer;
end;

function MACAdressToStr(aMACAdr:TMACAdress):string;
begin
Result:=Format( MacAdressFormat,
[aMACAdr[0],
aMACAdr[1],
aMACAdr[2],
aMACAdr[3],
aMACAdr[4],
aMACAdr[5]]
);
end;

procedure CheckResult(aReturnCode:char);
begin
if Byte(aReturnCode)<>NRC_GOODRET then
raise ENCBError.Create(Format(SNCBError,[byte(aReturnCode)]));
end;

function IsMACAdress(aMACAdr:TMACAdress):boolean;
var i:integer;
begin
for i:=0 to 5 do if aMACAdr[i]<>0 then begin Result:=True; exit end;
Result:=False;
end;

function GetMACAdress(AdapterNum:byte):TMACAdress;
var Adapter:TAStat;
NCB:TNCB;
begin
FillChar(NCB,SizeOf(NCB),0);
NCB.ncb_command:=char(NCBRESET);
NCB.ncb_lana_num:=char(AdapterNum);
CheckResult(NetBIOS(@NCB));

FillChar(NCB,SizeOf(NCB),0);
NCB.ncb_command:=char(NCBASTAT);
NCB.ncb_lana_num:=char(AdapterNum);

StrCopy(NCB.ncb_callname,'* ');
NCB.ncb_buffer:=@Adapter;
NCB.ncb_length:=sizeof(Adapter);
CheckResult(NetBIOS(@NCB));

Move(Adapter.Adapter_Status.adapter_address[0],Result[0],SizeOf(Result));
end;


initialization
MacAdressFormat:='%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x';
end.

引用:
uses MacAdress
...............
begin
showMessage(MACAdressToStr(GetMACAdress(0)));
end;
蓝色光芒 2003-06-12
  • 打赏
  • 举报
回复
理解错误,你说的IP地址 应该说成是MAC地址。Sry
蓝色光芒 2003-06-12
  • 打赏
  • 举报
回复
回复人: zhangquan666666(成全) ( ) 信誉:100 2003-06-05 20:01:00 得分:0


这是获得本机的ip地址!


你运行过这段代码没有???
blh 2003-06-12
  • 打赏
  • 举报
回复
ping 目的机器ip地址
arp -a 就可以看见
(本方法只在同一网段中有效)
erp2 2003-06-12
  • 打赏
  • 举报
回复
nbtstat命令就可以了,搞这么复杂做什么。
cuihl 2003-06-06
  • 打赏
  • 举报
回复
这与网络有关啊。
如果在同一个局域网比较简单,arp请求就可以了。
如果在不同的网络,就复杂点了,要有arp代理才行。
我也不是很懂,只是从TCP/IP祥解里面看来的,具体到程序怎么实现就不清楚了。
与网络硬件关系比较大。
zhangquan666666 2003-06-05
  • 打赏
  • 举报
回复
这是获得本机的ip地址!
蓝色光芒 2003-06-05
  • 打赏
  • 举报
回复
uses nb30
....
Function kbGetAdapterAddress(a:Integer) : String; //获得网卡物理地址
Var
NCB : TNCB; // Netbios control block file://NetBios控制块
ADAPTER : TADAPTERSTATUS; // Netbios adapter status//取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // Temporary work value//临时变量
cRC : Char; // Netbios return code//NetBios返回值
strTemp : String; // Temporary string//临时变量
Begin
Result := '';
Try
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBENUM);
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);
NetBios(@NCB);
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]),2);
Result := strTemp;
Finally
End;
End;

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧