NetBios获取网卡MAC

ahjoe 2005-02-16 06:03:50
function GetAdapterSN(num: integer): string;
var
ibuf: array [0..5] of Byte;
sn: string[12];
i: integer;
st: string;
pbuf: PChar;
ncb: TNCB;
uRetCode: CHAR;
lana_enum: TLANAENUM;
begin
FillChar(ncb, sizeof(ncb), 0);
ncb.ncb_command := Char(NCBENUM);
uRetCode := Netbios( @ncb );
ncb.ncb_buffer := @lana_enum;
ncb.ncb_length := sizeof(lana_enum);
uRetCode := Netbios( @ncb );// 获取网卡数量、编号信息。 此处返回值总是 7
// NRC_BADDR = $07; // illegal buffer address
if uRetCode = #0 then
......

调试系统是 XP, 请问如何改正?
...全文
269 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahjoe 2005-03-01
  • 打赏
  • 举报
回复
inet_addr 在 winsock 单元
snopyli 2005-02-25
  • 打赏
  • 举报
回复
To:ahjoe(强哥)

inet_addr 没有给出定义类型
snowmaplecn 2005-02-25
  • 打赏
  • 举报
回复
up
getit911 2005-02-25
  • 打赏
  • 举报
回复
原来是调用nbtstat 生成文件,可以用管道重定向nbstat的标准输出,就不用临时文件了
luckyboy97 2005-02-25
  • 打赏
  • 举报
回复
收藏,学习
victor_yang 2005-02-25
  • 打赏
  • 举报
回复
交流一下,我的方法

var
// vMac:String;
vtmpPath,vtmpFile:Pchar;
vOrder,vNewName:String;
vF:Integer;
vFile:PChar;
F:TextFile;
begin
vtmpPath:=GetMemory(MAX_PATH);
vtmpFile:=GetMemory(MAX_PATH);
GetTempPath(MAX_PATH,vtmpPath);
GetTempFileName(vtmpPath,'sh',0,vtmpFile);
vNewName:=ChangeFileExt(vtmpFile,'.bat');
vOrder:=format('nbtstat -a %s >%s',[AServerName,StrPas(vtmpFile)]);
AssignFile(F,vNewName);
Rewrite(F);
Writeln(F,vOrder);
CloseFile(F);
ShellExecute(Application.Handle,'open',PChar(vNewName),nil,nil,SW_HIDE);
Sleep(300);
vF:=FileOpen(StrPas(vtmpFile),fmOpenRead);
FileSeek(vF,0,0);
vSize:=FileSeek(vF,0,2);
FileSeek(vF,0,0);
vFile:=PChar(AllocMem(vSize + 1));
FileRead(vF,vFile^,vSize);
FileClose(vF);
Result:=ReadMacAddr(StrPas(vFile));
DeleteFile(StrPas(vtmpFile));
DeleteFile(vNewName);
FreeMem(vtmpPath);
FreeMem(vtmpFile);
ahjoe 2005-02-24
  • 打赏
  • 举报
回复
// 在XP下用NetBios取MAC有时会失败.
// 用SendARP获取MAC (我在win98使用该函数得不到MAC)
function SendARP( const DestIP : DWord; const SrcIP : DWord;
const pMacAddr : Pointer; const PhyAddrLen : PULONG) : DWord;
stdcall; external 'IPHLPAPI.DLL' name 'SendARP';

....


function GetRemoteMAC(ip:string):String;
var
dwResult : DWord;
ulIPAddr : DWord;
ulMACAddr : Array [0..5] of Byte;
ulAddrLen : ULONG;
begin
ulIPAddr := inet_addr(PChar(ip));
ulAddrLen := 6;
FillChar(ulMACAddr, 6, $ff);
dwResult := SendARP(ulIPAddr,0,@ulMACAddr,@ulAddrLen);
if dwResult=0 then
Result:=(IntToHex(ulMACAddr[0],2)+
IntToHex(ulMACAddr[1],2)+
IntToHex(ulMACAddr[2],2)+
IntToHex(ulMACAddr[3],2)+
IntToHex(ulMACAddr[4],2)+
IntToHex(ulMACAddr[5],2));
end;
snopyli 2005-02-24
  • 打赏
  • 举报
回复
To:ahjoe(强哥)

能否共享你的成果吗?

如何采用SendARP方法可以获取IP。
jinjazz 2005-02-24
  • 打赏
  • 举报
回复
mark
tengxiang05 2005-02-24
  • 打赏
  • 举报
回复
Mark
smiler007 2005-02-24
  • 打赏
  • 举报
回复
收藏一下,有用
cobi 2005-02-24
  • 打赏
  • 举报
回复
收藏一下,有用
ahjoe 2005-02-24
  • 打赏
  • 举报
回复
已经解决。采用SendARP方法可以获取IP。
分不能给自己,删除贴子又没有信誉。
大家顶吧,这50分一定要送出去呀。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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