如何编程实现获取远程计算机的mac地址?局域网内的共享资源? 前者如使用命令行程序nbtstat -a 所作的?后者如各机器上的共享文件夹之类?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString CGetMACDlg::GetMacAddress(CString sNetBiosName/*網絡上的電腦名稱*/){ ASTAT Adapter; NCB ncb; UCHAR uRetCode; memset(&ncb, 0, sizeof(ncb)); ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = 0; uRetCode = Netbios(&ncb); memset(&ncb, 0, sizeof(ncb)); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = 0; sNetBiosName.MakeUpper(); FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20); strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName); ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20; ncb.ncb_callname[NCBNAMSZ] = 0x0; ncb.ncb_buffer = (unsigned char *) &Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios(&ncb); CString sMacAddress; if (uRetCode == 0) { sMacAddress.Format(_T("%02X-%02X-%02X-%02X-%02X-%02X"), Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5]); } return sMacAddress;} 1)第一个问题我这有源码#include <iphlpapi.h>BOOL CTestChangeIpDlg::GetMacAddr(const char *dest_ip, char *outbuf, int outlen){ HRESULT hr; ULONG pulMac[2]; ULONG ulLen = 6; //mac addr include 6 bytes IPAddr dest_ipAddr; dest_ipAddr = inet_addr(dest_ip); if(dest_ipAddr == INADDR_NONE) return FALSE; memset (pulMac, 0xff, sizeof (pulMac)); hr = SendARP(dest_ipAddr, 0, pulMac, &ulLen); if(hr != NO_ERROR) { TRACE("GetMacAddr(): SendARP() Error!\n"); return FALSE; } size_t i, j; char * szMac = new char[ulLen*3]; PBYTE pbHexMac = (PBYTE) pulMac; // Convert the binary MAC address into human-readable for (i = 0, j = 0; i < ulLen - 1; ++i) { j += sprintf (szMac + j, "%02X:", pbHexMac[i]); } j += sprintf (szMac + j, "%02X", pbHexMac[i]); if(outlen < (int)strlen(szMac)+1) { TRACE("GetMacAddr(): no enough buffer size!\n"); delete[] szMac; return FALSE; } strncpy(outbuf,szMac,strlen(szMac)+1); delete[] szMac; return TRUE;}2)NetShareEnum()函数等;具体见MSDN 如何编程实现获取远程计算机的mac地址???行吗?楼上同志说的用来获取本机或局域网内的还可以,局域网以外的嘛,本人认为---不可能,理论上不行。在IP包的包头中并没有MAC这一选项,ARP也只对局域网内的机子有用,在广域网上帧中的MAC地址已经经过了N次的转换,最后到达本机的帧里的MAC地址是最后一次转换后的MAC,一般也就是你的网关或服务器的MAC了。在局域网内可以通过RAP和RARP得到某主机的MAC,正如楼上所说的,在广域网上做不到! 如何编程实现获取远程计算机的mac地址???行吗?楼上同志说的用来获取本机或局域网内的还可以,局域网以外的嘛,本人认为---不可能,理论上不行。在IP包的包头中并没有MAC这一选项,ARP也只对局域网内的机子有用,在广域网上帧中的MAC地址已经经过了N次的转换,最后到达本机的帧里的MAC地址是最后一次转换后的MAC,一般也就是你的网关或服务器的MAC了。在局域网内可以通过RAP和RARP得到某主机的MAC,正如楼上所说的,在广域网上做不到! 楼上的老兄你的ASTAT结构是在哪个头文件定义的我这里根本找不到哦 win32 如何用鼠标控制图片的移动呢!! CIPAddressCtrl IP控件 能把CRichEditView改造成象CHexEdit那样可以显示16进制吗? 菜鸟求救MFC写Access数据库中的查询问题,恳请各位帮帮忙! 求教,关于OnNcHitTest MFC多文档程序中,如何将菜单(包括主窗口菜单)隐藏掉? 求助:如果参数是数组,怎么传入到ORACLE 线程通信的简单问题 如何在onDraw函数中调用InvalidateRect重绘指定区域的图形 菜鸟的提问 在做MouseHook的dll中的问题! 还是一个字符串的问题,在线等待,高分请教,马上给分
{
ASTAT Adapter;
NCB ncb;
UCHAR uRetCode;
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBRESET;
ncb.ncb_lana_num = 0;
uRetCode = Netbios(&ncb);
memset(&ncb, 0, sizeof(ncb));
ncb.ncb_command = NCBASTAT;
ncb.ncb_lana_num = 0;
sNetBiosName.MakeUpper();
FillMemory(ncb.ncb_callname, NCBNAMSZ - 1, 0x20);
strcpy((char *)ncb.ncb_callname, (LPCTSTR) sNetBiosName);
ncb.ncb_callname[sNetBiosName.GetLength()] = 0x20;
ncb.ncb_callname[NCBNAMSZ] = 0x0;
ncb.ncb_buffer = (unsigned char *) &Adapter;
ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios(&ncb);
CString sMacAddress;
if (uRetCode == 0)
{
sMacAddress.Format(_T("%02X-%02X-%02X-%02X-%02X-%02X"),
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]);
}
return sMacAddress;
}
#include <iphlpapi.h>BOOL CTestChangeIpDlg::GetMacAddr(const char *dest_ip, char *outbuf, int outlen)
{
HRESULT hr;
ULONG pulMac[2];
ULONG ulLen = 6; //mac addr include 6 bytes IPAddr dest_ipAddr;
dest_ipAddr = inet_addr(dest_ip);
if(dest_ipAddr == INADDR_NONE)
return FALSE; memset (pulMac, 0xff, sizeof (pulMac));
hr = SendARP(dest_ipAddr, 0, pulMac, &ulLen);
if(hr != NO_ERROR)
{
TRACE("GetMacAddr(): SendARP() Error!\n");
return FALSE;
}
size_t i, j;
char * szMac = new char[ulLen*3];
PBYTE pbHexMac = (PBYTE) pulMac;
// Convert the binary MAC address into human-readable
for (i = 0, j = 0; i < ulLen - 1; ++i) {
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}
j += sprintf (szMac + j, "%02X", pbHexMac[i]);
if(outlen < (int)strlen(szMac)+1)
{
TRACE("GetMacAddr(): no enough buffer size!\n");
delete[] szMac;
return FALSE;
}
strncpy(outbuf,szMac,strlen(szMac)+1);
delete[] szMac; return TRUE;
}2)NetShareEnum()函数等;具体见MSDN
我这里根本找不到哦