⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getkey.h

📁 3DES加密与解密的算法。 该算法通过编译
💻 H
字号:
  #include <cstdio>   
  #include <cstring>   
  #include <cstdlib>   
  #include <cassert>   
    
  #include <unistd.h>   
  #include <sys/ioctl.h>   
  #include <sys/types.h>   
  #include <netinet/in.h>   
  #include <sys/socket.h>   
    
  #include <net/if.h>   
  #include <net/if_arp.h>


  class LGIM   { //   LinuxGetIpMac   
  public: 
  
  LGIM()
  {   
  _sock   =   socket(   AF_INET,   SOCK_DGRAM,   0   );   
  assert(   _sock   !=   -1   );   
  }
  ~LGIM()
  {   
  close(   _sock   );   
  }   
  
    
  void GetIpMac(   void   )
  {   
  bzero(   &_ifc,   sizeof(_ifc)   );   
  //   first,   you   must   get   number   of   net   device   which   you   have   
  //   ioctl(SIOCGIFCONF)   with   zero(ifc)   will   return   the   length   
  int ret   =   ioctl(   _sock,   SIOCGIFCONF,   &_ifc,   sizeof(_ifc)   );   
  assert(   !ret   );   
    
  //   must   alloc   memory   yourself   
  _ifc.ifc_buf   =   (char   *)malloc(   _ifc.ifc_len   );   
  bzero(   _ifc.ifc_buf,   _ifc.ifc_len   );   
  ret   =   ioctl(   _sock,   SIOCGIFCONF,   &_ifc,   sizeof(_ifc)   );   //   get   ifr_name   
  assert(   !ret   );   
    
  int n   =   _ifc.ifc_len   /   sizeof(struct   ifreq);//you   have   n   net   devices   
  struct ifreq *pifr   =   (struct   ifreq   *)_ifc.ifc_buf;   
    
  for   (   int   i   =   0;   i   <   n;   ++i,   ++pifr   )   {   
  CheckDevice(   pifr   );   
  }   
  free(   _ifc.ifc_buf   );   
  }   

 
  char mackey[9];

  private:   
  void Print()
  {   
/*  printf(   "%s\tmac   addr:   %02x:%02x:%02x:%02x:%02x:%02x\n",   _device.name,   _device.mac[0],   _device.mac[1],   _device.mac[2],   _device.mac[3],   _device.mac[4],   _device.mac[5]   );   
    
  printf(   "\tip     addr:   %lu.%lu.%lu.%lu\n",   _device.ip&0xff,   (_device.ip&0xff00)>>8,   (_device.ip&0xff0000)>>16,   _device.ip>>24   );   
    
  printf(   "\tnet   mask:   %lu.%lu.%lu.%lu\n\n",   _device.netmask&0xff,   (_device.netmask&0xff00)>>8,   (_device.netmask&0xff0000)>>16,   _device.netmask>>24   );   
*/

  sprintf(mackey,"%02x%02x%02x%02x",_device.mac[0],_device.mac[1],_device.mac[2],_device.mac[3]);

  }   


 
  void LGIM::CheckDevice(   const   struct   ifreq   *pifr   )   
  {   
  if   (   pifr->ifr_addr.sa_family   !=   PF_INET   )   return; //   not   tcp/ip   
  //   memcpy(   &_device.ip,   pifr->ifr_ifaddr.sa_data,   4   ); //   copy   ip   addr   
  //   but   i   want   to   show   you   get   ip   address   through   ioctl(   SIOCGIFADDR   )   
    
  bzero(   &_device,   sizeof(_device)   );   
  bzero(   &_ifr,   sizeof(_ifr)   );   
  strcpy(   _ifr.ifr_name,   pifr->ifr_name   );   
    
  //   get   hardware   address(   for   ethernet:   mac   address   )   
  int ret   =   ioctl(   _sock,   SIOCGIFHWADDR,   &_ifr,   sizeof(_ifr)   );   
  assert(   !ret   );   
  if   (   _ifr.ifr_hwaddr.sa_family   !=   ARPHRD_ETHER   )   return;   //   not   ethernet   
  memcpy(   _device.mac,   _ifr.ifr_hwaddr.sa_data,   6   );   
    
  //   get   ip   address   
  ret   =   ioctl(   _sock,   SIOCGIFADDR,   &_ifr,   sizeof(_ifr)   );   
  assert(   !ret   );   
  memcpy(   &_device.ip,   _ifr.ifr_addr.sa_data,   4   );   
  _device.ip   =   ((struct   sockaddr_in   *)(&_ifr.ifr_addr))->sin_addr.s_addr;   
    
  //   get   ip   sub-net   mask   
  ret   =   ioctl(   _sock,   SIOCGIFNETMASK,   &_ifr,   sizeof(_ifr)   );   
  assert(   !ret   );   
  _device.netmask   =   ((struct   sockaddr_in   *)(&_ifr.ifr_netmask))->sin_addr.s_addr;   
    
  //   copy   devie   name   
  strncpy(   _device.name,   _ifr.ifr_name,   sizeof(_device.name)-1   );   
    
  Print();   
  }   
    
  private:   
  int _sock;   
  struct ifreq _ifr;   
  struct ifconf _ifc;   
  struct {   
  unsigned   long ip;   
  unsigned   long netmask;   
  unsigned   char mac[6];   
  char name[10];   
  }   _device;   
};


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -