首页
社区
课程
招聘
[旧帖] 怎样根据IP地址查看远程的MAC地址 0.00雪花
发表于: 2008-7-25 23:39 8559

[旧帖] 怎样根据IP地址查看远程的MAC地址 0.00雪花

2008-7-25 23:39
8559
求助 :
怎样根据一个已知的IP地址得到其对应的MAC地址呢?
在网上找了很多资料,基本上都是在一个局域网里面的,
现在已知的IP是远程的,我该如何获取他的MAC地址呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
应该不能吧.....ip和mac不同一个层(好像是3 2..网络/数据)...而且tcp协议没有mac的信息...
望高手解答
2008-7-26 00:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
得到远程机器MAC地址源代码   
  #include     
  #include     
  #include     
  #include   "iphlpapi.h"   
   
  #pragma   comment   (   lib,   "ws2_32.lib"   )   
  #pragma   comment   (   lib,   "Iphlpapi.lib"   )   
   
  void   main(   int   argc,   char   **   argv   )   
  {   
  int   numberOfHost   =   1;   
  struct   hostent   *remoteHostent;   
   
  //处理命令行参数   
  if   (   argc   ==   3   )   
  numberOfHost   =   atoi(   argv[2]   );   
  if   (   (   argc   >3   )   ||   (   argc   <   2   )   )   
  {   
  printf(   "RmtHost   v0.2   -   Get   remote   HostName   /MacAddress\n"   );   
  printf(   "by   ShotgunLabs   (   Shotgun@xici.net   )\n\n"   );   
  printf(   "Usage :\n\tRmtHost.exe   [RemoteIP]   \n\n"   );   
  printf(   "Example:\n\tRmtHost.exe   192.168.0.3\n"   );   
  printf(   "\tRmtHost.exe   192.168.0.3   255\n\n"   );   
  exit(   0   );   
  }     
  //初始化SOCKET   
  WSADATA   wsaData;   
  int   iRet   =   WSAStartup(MAKEWORD(2,1),   &wsaData);   
  if   (   iRet   !=   0   )   
  {   
  printf(   "WSAStartup   Error:%d\n",   GetLastError()   );   
  exit(   0   );   
  }   
  int   nRemoteAddr   =   inet_addr(   argv[1]   );   
  remoteHostent=   (struct   hostent*)malloc(   sizeof(struct   hostent   ));   
  struct   in_addr   sa;   
  for   (   int   i   =   0;   i   <   numberOfHost;   i   ++   )   
  {   
  //获取远程机器名   
  sa.s_addr   =   nRemoteAddr;   
  printf(   "\nIpAddress   :   %s\n",   inet_ntoa(   sa   )   );   
  remoteHostent   =   gethostbyaddr(   (char*)&nRemoteAddr,4,   AF_INET   );   
  if   (   remoteHostent   )   
  printf(   "HostName :   %s\n",remoteHostent->h_name   );   
  else   
  printf(   "gethostbyaddr   Error:%d\n",GetLastError()   );   
  //发送ARP查询包获得远程MAC地址   
   
  unsigned   char   macAddress[6];   
  ULONG   macAddLen   =   6;   
  iRet=SendARP(nRemoteAddr,   (unsigned   long)NULL,(PULONG)&macAddress,   &macAddLen);   
  if   (   iRet   ==   NO_ERROR   )   
  {   
  printf(   "MacAddress:   "   );   
  for(   int   i   =0;   i<6;   i++   )   
  {   
  printf(   "%.2x",   macAddress[i]   );   
  if   (   i<5   )   printf(   "-"   );   
  }   
  printf(   "\n"   );   
  }   
  else   
  printf(   "SendARP   Error:%d\n",   GetLastError());   
  nRemoteAddr   =   htonl(   ntohl(   nRemoteAddr   )   +   1   );   
  }   
  }
2008-7-26 11:51
0
游客
登录 | 注册 方可回帖
返回
//