如何取得局域网内网卡的物理MAC地址,请高手帮忙,谢谢.

hansyswin 2007-05-01 08:33:48
如何取得局域网内网卡的物理MAC地址,或一个指定IP地址的MAC地址.谢谢了.
...全文
466 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hansyswin 2007-05-03
  • 打赏
  • 举报
回复
请各位查分,我发现今天的分有点不正常.谢谢大家!!!
hansyswin 2007-05-03
  • 打赏
  • 举报
回复
谢谢各位,解决了,结贴.
hansyswin 2007-05-03
  • 打赏
  • 举报
回复
yctin(呆呆鱼) : 请问哪里有 Iphlpapi.lib,谢谢.
huzhangyou 2007-05-02
  • 打赏
  • 举报
回复
Also the project on sourceforge.net
http://sourceforge.net/projects/choparp/
huzhangyou 2007-05-02
  • 打赏
  • 举报
回复
Packages required
To download the WinPcap Driver: http://winpcap.polito.it/
To download WinArpSpoofer: http://www.nextsecurity.net/
huzhangyou 2007-05-02
  • 打赏
  • 举报
回复
You can develop it with Winpcap
And see the examples at http://www.codeproject.com/internet/winarpspoof.asp
hansyswin 2007-05-02
  • 打赏
  • 举报
回复
huzhangyou(信仰(http://www.libing.net.cn))
过去是用批处理执行arp来解决的,现在想之间解决它, 请给个例子,或少许详细点,谢谢了.
yctin 2007-05-02
  • 打赏
  • 举报
回复
GetMACAddress("输入IP");
成功返回 MAC Address
失败返回 0

#include <winsock2.h>
#include <stdio.h>
#include <iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
char* __fastcall GetMACAddress(char* ipaddr)
{
HRESULT hr;
IPAddr ipAddr;
ULONG pulMac[2];
ULONG ulLen;

ipAddr = inet_addr(ipaddr);
memset (pulMac, 0xff, sizeof (pulMac));
ulLen = 6;

SendARP (ipAddr, 0, pulMac, &ulLen);

size_t i, j;
char * szMac = new char[ulLen*3];

if (!~pulMac[0] && !~pulMac[1]) {
return 0;
}

PBYTE pbHexMac = (PBYTE) pulMac;
for (i = 0, j = 0; i < ulLen - 1; ++i) {
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}

sprintf (szMac + j, "%02X", pbHexMac[i]);

return szMac;
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
ShowMessage(GetMACAddress("192.168.1.1"));
}
hansyswin 2007-05-02
  • 打赏
  • 举报
回复
季兄,好象只能读出本机的,网内的还是读不出来.
jishiping 2007-05-02
  • 打赏
  • 举报
回复
#include <iptypes.h>

#define ADAPTER_NUM 16

typedef DWORD WINAPI (*GetAdaptersInfoProc)( \
PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen);

class AdapterList
{
public:
AdapterList();

bool GetInfo();
UINT GetNumber() { return num; }
LPCSTR GetError() { return Error; }
PIP_ADAPTER_INFO GetAdapter(UINT index)
{
return index<num ? Adapters[index]
: NULL;
}
private:
UINT num;
BYTE buf[8192];
char Error[256];
PIP_ADAPTER_INFO Adapters[ADAPTER_NUM];
};

AdapterList::AdapterList()
{
num = 0x00;
memset(buf, 0, sizeof(buf));
memset(Error, 0, sizeof(Error));
}

bool AdapterList::GetInfo()
{
DWORD dwLen;
DWORD dwFlags;
DWORD dwError;
HINSTANCE hModule;
PIP_ADAPTER_INFO pAddr;
GetAdaptersInfoProc GetAdaptersInfo;

hModule = LoadLibrary("iphlpapi.dll");
if (hModule == NULL) {
strcpy(Error, "Cannot load iphlpapi.dll");
return false;
}
GetAdaptersInfo = (GetAdaptersInfoProc)
GetProcAddress(hModule, "GetAdaptersInfo");
if (GetAdaptersInfo == NULL) {
strcpy(Error, "Not find funtion GetAdaptersInfo");
FreeLibrary(hModule); return false;
}

num = 0; dwLen = sizeof(buf);
pAddr = (PIP_ADAPTER_INFO)buf;
dwError = GetAdaptersInfo(pAddr, &dwLen);
if (dwError == ERROR_SUCCESS) {
for(; pAddr!=NULL && num<ADAPTER_NUM;
pAddr=pAddr->Next) {
if (pAddr->AddressLength != 0)
Adapters[num++] = pAddr;
}
}
else {
dwFlags = FORMAT_MESSAGE_FROM_SYSTEM;
FormatMessage(dwFlags, 0, dwError, 0,
Error, sizeof(Error), NULL);
}
FreeLibrary(hModule); return bool(num>0);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i, n;
char Addr[32];
AdapterList AdapList;
PIP_ADAPTER_INFO pAdap;

if (!AdapList.GetInfo()) {
ShowMessage(AdapList.GetError());
return;
}
memset(Addr, 0x0000, sizeof(Addr));
for(n=0; n<AdapList.GetNumber(); n++) {
pAdap = AdapList.GetAdapter(n);
memset(Addr, 0x00, sizeof(Addr));
for(i=0; i<pAdap->AddressLength;
i++) {
if (i!=0) Addr[i*3-1] = ' ';
wsprintf(Addr+i*3, "%02X", (int)
((BYTE*)pAdap->Address)[i]);
}
ShowMessage(Addr);
}
}
yctin 2007-05-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhzhwu/archive/2006/11/17/1393153.aspx
zwh202342 2007-05-01
  • 打赏
  • 举报
回复
可以参考一下这个
http://www.newasp.net/tech/program/20879.html
huzhangyou 2007-05-01
  • 打赏
  • 举报
回复
arp协议就是用来获取对方机器的MAC地址的
huzhangyou 2007-05-01
  • 打赏
  • 举报
回复
可以考虑发送arp包给局域网的所有机器
hansyswin 2007-05-01
  • 打赏
  • 举报
回复
好象都不能解决问题, 再顶, 希望高手多多指教.谢谢

1,317

社区成员

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

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