`
jakielong
  • 浏览: 223277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MAC文本格式地址to网络字节序

阅读更多

#include    <sys/types.h>
#include    <netinet/in.h>
#include    <stdio.h>
 
/* 
 * Check whether "cp" is a valid ascii representation
 * of an MAC address and convert to a binary address.
 * Returns 1 if the address is valid, 0 if not.
 */
int inet_mton(const char *cp, u_char *ap)
{
	int colons = 0;
        quad_t acc = 0, addr = 0;
  
      do {
      register char cc = *cp;
  
      switch (cc) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
          acc = acc * 16 + (cc - '0');
          break;
  
      case 'a':
      case 'b':
      case 'c':
      case 'd':
      case 'e':
      case 'f':
          acc = acc * 16 + (cc - 'a' + 10);
          break;
  
      case 'A':
      case 'B':
      case 'C':
      case 'D':
      case 'E':
      case 'F':
          acc = acc * 16 + (cc - 'A' + 10);
          break;
  
      case ':':
          if (++colons > 5) {
          return 0;
          }
          /* Fall down to case '\0' */
  
      case '\0':
          if (acc > 0xFF) {
          return 0;
          }
          addr = addr << 8 | acc;
          acc = 0;
          break;
  
      default:
          return 0;
      }
      } while (*cp++) ;
  
      /* Normalize the address */
      if (colons < 5) {
      addr <<= 8 * (5 - colons) ;
      }
  
      /* Store it if requested */
      if (ap) {
      /* Convert address to network bytes order(big-endian) */
      #if __BYTE_ORDER == __LITTLE_ENDIAN 
      int i = 0, j = 0;
      for(i=0,j=5; i<6,j>=0; i++,j--){
          ap[i] = ((u_char *) &addr)[j];
      }
      #elif __BYTE_ORDER == __BIG_ENDIAN
      ap = (u_char *) &addr;
      #endif
      }
  
      return 1;
}

int main()
{ /* test inet_mton(const char *cp, u_char *ap) */         
    char *macaddr = "00:06:1B:D1:73:1F";
     u_char m_addr[6];
 
    printf("%s\n", macaddr);
    if(inet_mton(macaddr, m_addr)){
       int i = 0;
        for(i=0; i<6; i++){
            printf("%2x:", m_addr[i]);
        }
    }

     return 0;
}
 
分享到:
评论

相关推荐

    补丁模块(带源码)InlinePatch,Hook,内存DLL注入等等

    子程序 Hex2Bin, 字节集, 公开, 十六进制文本到字节集 .参数 原文, 文本型 .子程序 Hex2Bin1, 文本型, 公开, 文本型-&gt;文本型 .参数 Hex, 文本型 .子程序 Hex2Dec, 整数型, 公开, 十六到十 .参数 十六进制转换数据,...

    精易模块[源码] V5.15

    5、公开子程序(字节集_到文本|字节集_到整数|字节集_取左边|字节集_取右边|字节集_取空白|字节集_取长度|字节集_取中间|字节集_替换|字节集_寻找|字节集_取指针)模块原有命令。 6、修正“文本_取中间_批量”当参数...

    Android开发人员不得不收集的代码

    getMacAddress : 获取设备 MAC 地址 getManufacturer : 获取设备厂商 getModel : 获取设备型号 shutdown : 关机 reboot : 重启 reboot2Recovery : 重启到 recovery reboot2Bootloader: 重启到 bootloader 判空相关 -...

    网管教程 从入门到精通软件篇.txt

     要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。  范例  下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:  下例将在硬盘上添加一个 20 MB 的分区:  ...

    新版Android开发教程.rar

    Note: Note: Note: Note: If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In particular, note that some ...

    cmd操作命令和linux命令大全收集

    arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息 start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 mem 查看cpu...

    C#基类库(苏飞版)

    2.Api_Win32_Mac类工具包 一个Win32的Api包,实现了大部分的Api操作帮助方法 3.在c#程序中放音乐的帮助类 使用C#播放音乐的帮助类,只需要调用方法就可以放音乐了 GDI+相关,图像相关 1.生成缩略图的类文件Small...

    MySQL 5.1中文手冊

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL 5.1参考手册 (中文版)

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    mysql官方中文参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MYSQL中文手册

    8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. ...

    MySQL 5.1参考手册中文版

    目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ...13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET ...

    MySQL 5.1参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL 5.1官方简体中文参考手册

    8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysql...

    MySQL5.1参考手册官方简体中文版

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    mysql5.1中文手册

    怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 ...

Global site tag (gtag.js) - Google Analytics