如何在局域网内获取已知IP地址的计算机对应的网卡mac地址?

98ly 2006-09-27 05:33:44
如何在局域网内获取已知IP地址的计算机对应的网卡mac地址?用程序实现。
...全文
865 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
i_love_pc 2006-09-29
  • 打赏
  • 举报
回复
原来MAC也能改,学习了,谢谢!
i_love_pc 2006-09-29
  • 打赏
  • 举报
回复
重装系统后,得到的MAC会变的???
=============================
听说MAC是不会变的
lbg 2006-09-29
  • 打赏
  • 举报
回复
如果得到本机的MAC怎么做?用Y___Y(一叶障目)的方法好象不行,因为重装系统后,得到的MAC会变的,很奇怪
lbg 2006-09-29
  • 打赏
  • 举报
回复
是会变的 ,因为我用MAC地址加密用户密码的,每次用户重装系统后,我必须更改我的数据库中的MAC地址记录,我碰到过很多此了,安装诺顿后也会出现这种情况
do2008 2006-09-27
  • 打赏
  • 举报
回复
就用SendArp,顶
98ly 2006-09-27
  • 打赏
  • 举报
回复
谢谢keiy,你的回答很正确。结贴了。
柯本 2006-09-27
  • 打赏
  • 举报
回复
LZ要行到的是网内IP的MAC,非本机的,可用iphlpapi.dll中的SendARP
#include <winsock.h>
...
typedef int _stdcall (*TSendARP)( int DestIP, int SrcIP, byte pMacAddr[], int &PhyAddrLen );

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TSendARP SendARP;

HWND h=LoadLibrary("iphlpapi.dll");
if (h==NULL)
{
ShowMessage("Error!,Can't find iphlpapi.dll");
return;
}
SendARP=(TSendARP)GetProcAddress(h,"SendARP");
if (SendARP==NULL)
{
ShowMessage("Error!Can't find SendARP");
return;
}
int dip=inet_addr("192.168.0.13");
byte mac[6];
memset(mac,0,6);
int l=6;
int r=SendARP(dip,0,mac,l);
if(r!=NO_ERROR)
{
ShowMessage("SendARP Error! ");
return;
}
String x;
x.printf("%02x-%02x-%02x-%02x-%02x-%02x",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
ShowMessage(x);
}
Y___Y 2006-09-27
  • 打赏
  • 举报
回复
这个是获得网络配置信息的程序
u_char g_ucLocalMac[6]; // 本地MAC地址
DWORD g_dwGatewayIP; // 网关IP地址
DWORD g_dwLocalIP; // 本地IP地址
DWORD g_dwMask; // 子网掩码

BOOL GetGlobalData()
{
PIP_ADAPTER_INFO pAdapterInfo = NULL;
ULONG ulLen = 0;

// 为适配器结构申请内存
::GetAdaptersInfo(pAdapterInfo,&ulLen);
pAdapterInfo = (PIP_ADAPTER_INFO)::GlobalAlloc(GPTR, ulLen);

// 取得本地适配器结构信息
if(::GetAdaptersInfo(pAdapterInfo,&ulLen) == ERROR_SUCCESS)
{
if(pAdapterInfo != NULL)
{
memcpy(g_ucLocalMac, pAdapterInfo->Address, 6);
g_dwGatewayIP = ::inet_addr(pAdapterInfo->GatewayList.IpAddress.String);
g_dwLocalIP = ::inet_addr(pAdapterInfo->IpAddressList.IpAddress.String);
g_dwMask = ::inet_addr(pAdapterInfo->IpAddressList.IpMask.String);
}
}

printf(" \n -------------------- 本地主机信息 -----------------------\n\n");
in_addr in;
in.S_un.S_addr = g_dwLocalIP;
printf(" IP Address : %s \n", ::inet_ntoa(in));

in.S_un.S_addr = g_dwMask;
printf(" Subnet Mask : %s \n", ::inet_ntoa(in));

in.S_un.S_addr = g_dwGatewayIP;
printf(" Default Gateway : %s \n", ::inet_ntoa(in));

u_char *p = g_ucLocalMac;
printf(" MAC Address : %02X-%02X-%02X-%02X-%02X-%02X \n", p[0], p[1], p[2], p[3], p[4], p[5]);

printf(" \n \n ");

return TRUE;
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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