zoukankan      html  css  js  c++  java
  • 用函数SendARP()获取局域网计算机的MAC地址

    sendARP

    31 说明对方没有开机,我们的函数检测不到它,

    1784 说明的给函数的最后一个参数的值是0,或你的给的值与你给的缓存区大小不符合。

    如果返回31不在线,则最后一个参数指针指向的值赋值为0

    该函数有一个缺点

    该函数本质上就是向目标主机发送一个ARP请求包,然后得到应答包来更新MAC,但是ARP请求包里的发送端IP和MAC是本机的实际IP和MAC,这样对方arp -a查看缓存表时记录里就有我的IP-MAC映射记录,容易知道有人在扫描其机器,或者是ARP病毒也可能。

    解决该函数问题就是自己伪造发包,但是MAC地址必须对,否则应答包不会发送到本机~

     
     
    UpdateData(TRUE);
     if(m_strAddr.IsEmpty())
     {
      AfxMessageBox("请填入要查找MAC地址的主机IP地址");
      return;
     }
     unsigned long ulAddr = inet_addr(m_strAddr);
     unsigned long ulMAC[2];
     unsigned long ulLen = 6;
     DWORD dwRetVal = SendARP(ulAddr, 0, ulMAC, &ulLen);
     if(dwRetVal == NO_ERROR)
     {
      size_t i, j;
            char * szMac = new char[ulLen*3];
            PBYTE pbHexMac = (PBYTE)ulMAC;
      for (i = 0, j = 0; i < ulLen - 1; ++i)
      {
                j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
            }
      sprintf (szMac + j, "%02X", pbHexMac[i]);
      m_strMAC = szMac;
      delete [] szMac;
     }
     UpdateData(FALSE);
  • 相关阅读:
    三道 华为 面试题
    百度面试题01——50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
    一首笔试题 C实现
    图像缩放算法及速度优化——(一)最近邻插值
    一个简单的二叉树排序算法
    OS的四大特征
    OS的目的和功能
    桶排序
    快速排序
    OS的运行机制
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4243479.html
Copyright © 2011-2022 走看看