社区
网络编程
帖子详情
想得到网卡对应的ip该怎么做[就是MAC和IP对应]?
DeadWolf
2004-06-07 11:17:29
网上看到有很多得到MAC和IP地址的文章
但是就是找不到,怎样根据MAC得到IP,或者根据IP得到MAC的
[通过ARP和RARP可以实现,我想有没有更直接一点的]
...全文
253
14
打赏
收藏
想得到网卡对应的ip该怎么做[就是MAC和IP对应]?
网上看到有很多得到MAC和IP地址的文章 但是就是找不到,怎样根据MAC得到IP,或者根据IP得到MAC的 [通过ARP和RARP可以实现,我想有没有更直接一点的]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
PiggyXP
2004-06-09
打赏
举报
回复
晕,楼上好几位都提到了鄙人实在愧不敢当
看了半天还是不知道楼主具体想要实现什么功能,说说看我明天答复你^_^
DeadWolf
2004-06-09
打赏
举报
回复
完成了 结贴
ZHENG017
2004-06-08
打赏
举报
回复
BOOL GetIpAddress(char *hostname)
{
WCHAR msg[128];
HOSTENT *lpHost=NULL;
struct sockaddr_in dest;
lpHost = gethostbyname(hostname);
if (lpHost == NULL)
{
wsprintf(msg, L"gethostbyname failed: %d", WSAGetLastError());
MessageBox(NULL, msg, NULL, MB_OK);
}
else
{
for(int i=0; lpHost->h_addr_list[i] != NULL ;i++)
{
memcpy(&(dest.sin_addr), lpHost->h_addr_list[i],
lpHost->h_length);
wsprintf(msg, L"IP address is: '%S'",
inet_ntoa(dest.sin_addr));
MessageBox(NULL, msg, L"IP Address", MB_OK);
}
}
return 0;
}
DeadWolf
2004-06-08
打赏
举报
回复
楼上的可能我没说清楚
我只要本机上多张网卡的mac以及对应的ip
sevencat
2004-06-08
打赏
举报
回复
我用的函数其实有老的函数相对应的,不过取得的信息不如这个多,所以呵呵呵,那个版本的找不着了。
DeadWolf
2004-06-08
打赏
举报
回复
GetAdapterInfo 看来确实是比较好的解决方案了
明天来结贴
DeadWolf
2004-06-08
打赏
举报
回复
ZHENG017() 好像只能得到IP列表,没有MAC
sevencat(七猫)
满足要求不过只能在xp下,确实伤脑筋
最好是98,2000,me,xp都能使用的
不过还是谢谢大家
sevencat
2004-06-08
打赏
举报
回复
ipv4,ipv6都能用的。不过好像要求是XP或XP以上。记不清了。我有2K的,不过是另外一种方法实现的。
sevencat
2004-06-08
打赏
举报
回复
#pragma once
#define WINVER 0x0400
#define WNNT 0x0400
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <winsock2.h>
#include <WS2tcpip.h>
#include <Iphlpapi.h>
#include <tchar.h>
#pragma comment(lib,"ws2_32")
#pragma comment(lib,"Iphlpapi")
#define DEFAULT_ADAPTER_NUM 32
#define DEFAULT_IPADDR_NUM 32
class Adapter
{
public:
Adapter(){_adapter=NULL;}
Adapter(IP_ADAPTER_ADDRESSES *ipadapter):_adapter(ipadapter){}
bool isValid(){return _adapter!=NULL;}
void getFrom(IP_ADAPTER_ADDRESSES *paddr){_adapter=paddr;}
const char *getName(){return _adapter->AdapterName;}
const WCHAR *getDnsSuffix(){return _adapter->DnsSuffix;}
const WCHAR *getDescription(){return _adapter->Description;}
const WCHAR *getFriendlyName(){return _adapter->FriendlyName;}
const BYTE *getPhysicalAddress(){return _adapter->PhysicalAddress;}
const int getPhysicalAddressLength(){return _adapter->PhysicalAddressLength;}
int getMtu(){return _adapter->Mtu;}
int getIfType(){return _adapter->IfType;}
IF_OPER_STATUS getOperStatus(){return _adapter->OperStatus;}
int getIpv6IfIndex(){return _adapter->Ipv6IfIndex;}
bool isDDnsEnabled(){return getFlags()|IP_ADAPTER_DDNS_ENABLED;}
bool isDhcpEnabled(){return getFlags()|IP_ADAPTER_DHCP_ENABLED;}
private:
int getFlags(){return _adapter->Flags;}
IP_ADAPTER_ADDRESSES *_adapter;
};
class AdapterList
{
public:
bool enumAdapters4(){ return enumAdapters(AF_INET);}
bool enumAdapters6(){ return enumAdapters(AF_INET6);}
int getAdapterNums(){return _nums;}
IP_ADAPTER_ADDRESSES *getAdapter(int index)
{
if(index<0) return NULL;
if(index>=_nums) return NULL;
return _pipadapters[index];
}
private:
bool enumAdapters(int family)
{
_nums=0;
DWORD byteret=sizeof(IP_ADAPTER_ADDRESSES)*DEFAULT_ADAPTER_NUM;
int iret=GetAdaptersAddresses(family,0,NULL,(PIP_ADAPTER_ADDRESSES)_buf,&byteret);
if(iret!=ERROR_SUCCESS) return false;
PIP_ADAPTER_ADDRESSES paddr=(PIP_ADAPTER_ADDRESSES)_buf;
while(paddr)
{
_pipadapters[_nums]=paddr;
paddr=paddr->Next;
if(paddr) _nums++;
}
return true;
}
char _buf[sizeof(IP_ADAPTER_ADDRESSES)*DEFAULT_ADAPTER_NUM];
PIP_ADAPTER_ADDRESSES _pipadapters[DEFAULT_ADAPTER_NUM];
int _nums;
};
class IpAddrList
{
public:
int getIpAddrNums(){return ((LPSOCKET_ADDRESS_LIST)_buf)->iAddressCount;}
protected:
bool enum4(){ return enumIpAddr(AF_INET);}
bool enum6(){ return enumIpAddr(AF_INET6);}
sockaddr *getSockAddr(int index)
{
LPSOCKET_ADDRESS_LIST paddrlist=(LPSOCKET_ADDRESS_LIST)_buf;
if(index<0) return NULL;
if(index>=paddrlist->iAddressCount) return NULL;
return paddrlist->Address[index].lpSockaddr;
}
private:
bool enumIpAddr(int family)
{
WSADATA m_data;
WSAStartup(MAKEWORD(2,2),&m_data);
SOCKET fd=socket(family,SOCK_DGRAM,0);
LPSOCKET_ADDRESS_LIST paddrlist=(LPSOCKET_ADDRESS_LIST)_buf;
unsigned long nBytesReturned=sizeof(SOCKET_ADDRESS_LIST)*DEFAULT_IPADDR_NUM;
int iret=WSAIoctl(fd,SIO_ADDRESS_LIST_QUERY,0, 0, paddrlist,nBytesReturned, &nBytesReturned, 0, 0);
closesocket(fd);
WSACleanup();
if(SOCKET_ERROR==iret) return false;
}
char _buf[sizeof(SOCKET_ADDRESS_LIST)*DEFAULT_IPADDR_NUM];
};
class Ip4AddrList: public IpAddrList
{
public:
bool enumAddr(){return enum4();}
in_addr getAddr(int index)
{
sockaddr_in *psa=(sockaddr_in*)getSockAddr(index);
if(psa)
return psa->sin_addr;
else
{
//complier will o it.
in_addr temp;
temp.S_un.S_addr=INADDR_NONE;
return temp;
}
}
};
class Ip6AddrList: public IpAddrList
{
public:
bool enumAddr(){return enum6();}
in_addr6 getAddr(int index)
{
sockaddr_in6 *psa6=(sockaddr_in6*)getSockAddr(index);
if(psa6)
return psa6->sin6_addr;
else
{
static in_addr6 temp={0,0,0,0,0,0,0,0};
return temp;
}
}
};
sevencat
2004-06-07
打赏
举报
回复
只能是同一个网内的比较有用,不在同一个网内就不可能了。
DeadWolf
2004-06-07
打赏
举报
回复
谢谢
我试试
有结果就来结贴,欢迎继续提供建议
halk
2004-06-07
打赏
举报
回复
同意楼上,GetAdapterInfo是我常用的方法,我觉得这样比netbios方法简单。
PiggyXP擅长使用netbios来获取mac和ip的对应关系,你可以发信息请教它 :)
Eearbird
2004-06-07
打赏
举报
回复
在msdn中查找函数:
GetAdaptersInfo
这一组函数可以遍历网卡信息
自由的风
2004-06-07
打赏
举报
回复
关于这个 PiggyXP 非常了解,可以向他要,他好象有例子
《计算机体系结构—网络篇1、2》之 网络结构、
IP
分组交换技术、
IP
/
MAC
映射、NAT转换等
课程内容:网络结构、
IP
分组交换技术、
IP
/
MAC
地址映射、私网公网
IP
、NAT转换、
网卡
、交换机、路由器等,以上这些内容对于很多同学来说是熟悉又陌生,熟悉的是经常听到,陌生的是没有多少同学真的完全弄明白了,这部分课程会为大家解决这个问题。
Linux查看
网卡
ip
地址,查看
网卡
IP
地址
~~~ifconfig~~~![](http://www.iumi.me/linux/51A831EE9391BBF653FB10333F1D1FDE.png)第一行: Link encap: 网络连接类型, HWaddr :
对应
网卡
的
mac
地址,这是出场时唯一的地址。(可以通过ifconfig为
网卡
设置伪
mac
地址)第二行:inet addr :
IP
V4版本的
IP
地址; Bcast: 广播地址...
linux绑定虚拟
ip
和
mac
,在Linux路由中设置
ip
和
mac
绑定
Linux路由设置
ip
和
mac
绑定也不是经常地用到,但是用于内部网中的某几个
IP
地址连接互联网,同时要求这些
IP
地址不被非法用户盗用。这会涉及arp协议。首先要弄明白一些基础,这些方法可以
做
一些尝试Linux路由设置
ip
和
mac
绑定。首先使用
ip
chains或者
ip
tables来设定只允许合法的
IP
地址连出。对于合法
IP
建立
IP
/
Mac
捆绑。要讨论这个问题我们首先需要了解ARP协议的工作原理,ar...
C++ 中通过GetAdaptersInfo获取
网卡
配置和
Ip
地址信息
出处:https://www.cnblogs.com/L-hq815/archive/2012/08/04/2622829.html 一台机器上可能不只有一个
网卡
,但每一个
网卡
只有一个
MAC
地址,而每一个
网卡
可能配置有多个
IP
地址;如平常的笔记本电脑中,就会有无线
网卡
和有线
网卡
(网线接口)两种;因此,如果要获得本机所有
网卡
的
IP
和
MAC
地址信息,则必须顺序获得每个
网卡
,再
arp 已知
mac
找
ip
_求救:通过
MAC
码找到
对应
的
IP
地址.
展开全部首先还是e69da5e6ba9062616964757a686964616f31333231633165得说一下什么是ARP。如果你在UNIX Shell下输入 arp -a (9x下也是),你的输出看起来应该是这样的:Interface: xxx.xxx.xxx.xxxInternet Address Physical Address Typexxx.xxx.xxx.xxx 00-00-...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章