我们用原始套接字(raw-socket)能截获局域网内的所有数据,但是这些数据都是IP包
如果用winpcap能截获MAC侦,如果局域网的连接设备是switch(路由器,交换机)的话,就只能截获流经本机的MAC侦
哎~~~本人菜鸟一只,忘高手指点指点。
谢谢!

解决方案 »

  1.   

    基于ARP协议获取局域网内主机MAC地址
    http://www.cnblogs.com/phinecos/archive/2009/01/04/1368466.html
      

  2.   

    我说的是:
    如何从局域网中截获的数据包中获取MAC侦,首要条件就是如何截获局域网内的所有MAC侦?
      

  3.   

    是截获数据包,然后从数据包中分析出MAC侦
    不是获取所有的电脑的MAC针
      

  4.   

    #include <windows.h>
    //#include <wincon.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>typedef struct _ASTAT_
    {
       ADAPTER_STATUS adapt;
       NAME_BUFFER    NameBuff [30];
    }ASTAT, * PASTAT;ASTAT Adapter;int main (void)
    {
          NCB Ncb;
          UCHAR uRetCode;
          char NetName[50];
          LANA_ENUM   lenum;
          int      i;      memset( &Ncb, 0, sizeof(Ncb) );
          Ncb.ncb_command = NCBENUM;
          Ncb.ncb_buffer = (UCHAR *)&lenum;
          Ncb.ncb_length = sizeof(lenum);
          uRetCode = Netbios( &Ncb );
          printf( "The NCBENUM return code is: 0x%x \n", uRetCode );      for(i=0; i < lenum.length ;i++)
           {
              memset( &Ncb, 0, sizeof(Ncb) );
              Ncb.ncb_command = NCBRESET;
              Ncb.ncb_lana_num = lenum.lana;          uRetCode = Netbios( &Ncb );
              printf( "The NCBRESET on LANA %d return code is: 0x%x \n",
                      lenum.lana, uRetCode );          memset( &Ncb, 0, sizeof (Ncb) );
              Ncb.ncb_command = NCBASTAT;
              Ncb.ncb_lana_num = lenum.lana;          strcpy( Ncb.ncb_callname,  "*               " );
              Ncb.ncb_buffer = (char *) &Adapter;
              Ncb.ncb_length = sizeof(Adapter);          uRetCode = Netbios( &Ncb );
              printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",
                      lenum.lana, uRetCode );
              if ( uRetCode == 0 )
                {
                 printf( "The Ethernet Number on LANA %d is:%02x%02x%02x%02x%02x%02x\n",
                      lenum.lana,
                      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] );
                 }
             }} 
      

  5.   

    这个需要特别的处理了,如arp欺骗等,把你的ip设为网关等。
    网内的好像没什么办法...............