判断IPV6地址格式是否正确

判断IPV6地址格式是否正确1 判断 IPV6 格式字串是否正确此功能代码实现判断 IPV6 地址是否正确 正确返回 1 错误误返回 0 defineH x unsignedchar amp x 0 defineL x unsignedchar amp x 1 char abbr ipv6 字符串 unsignedchar ret buf

1.判断IPV6地址格式是否正确



此功能代码实现判断IPV6地址是否正确,正确返回1,错误误返回0。


#define H(x) ((unsigned char *) & (x) )[0] #define L(x) ((unsigned char *) & (x) )[1] //char * abbr, ipv6字符串 //unsigned char * ret_buff,返回和引用的buff //return 传入buff的指针 int CGlobalLogic::ipv6_to_u (char * abbr,unsigned char * ret_buff) { char buff[40]={0}; int ipv6_int[8]={0}; int two_colon = -1; int ipv6_char_len = strlen(abbr); assert(abbr!=NULL && ret_buff!=NULL); //查找是否有缩写的情况 // two_colon=abbr.find_first_of("::"); if((ipv6_char_len<3 ) ||(abbr[0] ==':' && abbr[1]!=':') ||(abbr[ipv6_char_len-1]==':' && abbr[ipv6_char_len-2]!=':' )) { printf("Invalid ipv6 addr[%s]!",abbr); return 0; } for (int i=0;i<ipv6_char_len;i++) { if (!((abbr[i]>='0'&&abbr[i]<='9')||(abbr[i]>='a'&&abbr[i]<='f')||(abbr[i]>='A'&&abbr[i]<='F')||abbr[i] == ':')) { printf("Invalid ipv6 addr[%s]!",abbr); return 0; } } for(int i=0,j=0;i<ipv6_char_len;i++) { if(abbr[i]!=':') { j++; } else { j=0; } if(abbr[i] == ':' && abbr[i+1] == ':') { if(two_colon == -1) { two_colon =i; } else { printf("Invalid ipv6 addr[%s],:: appears once!",abbr); return 0; } } if(j>4) { printf("Invalid ipv6 addr[%s], every 2Bytes not more than 4 chars!",abbr); return 0; } } //处理缩写的情况. if(two_colon>=0) { int pos = 0; int start_colon_num = 0; int end_colon_num = 0; int add_colon_num = 0; //找:: 前面:的个数 for(int i=0;i<two_colon;i++) { if(abbr[i] == ':' ) { start_colon_num ++; } } //找:: 后面:的个数 for(int i=two_colon+2;i<ipv6_char_len;i++) { if(abbr[i] == ':' ) { end_colon_num ++; } } //计算需要添加 "0:" 的个数,总共只有7个冒号. add_colon_num = 7 - start_colon_num - end_colon_num ; for(pos =0;pos <two_colon;pos ++) { buff[pos] = abbr[pos]; } while(add_colon_num>0) { buff[pos++] =':'; add_colon_num --; if(add_colon_num!=0) buff[pos++] ='0'; } for(int i=two_colon+2; i<ipv6_char_len; ) { buff[pos++] = abbr[i++]; } buff[pos] = ' '; }//end else //标准格式 { if(two_colon == -1) { strncpy(buff,abbr,ipv6_char_len); } } // printf("%s",buff); int colon_num = sscanf (buff,"%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x", &ipv6_int[0],&ipv6_int[1],&ipv6_int[2],&ipv6_int[3], &ipv6_int[4],&ipv6_int[5],&ipv6_int[6],&ipv6_int[7]); if(colon_num<=0 || (two_colon==-1 && colon_num !=8 )) { printf("Invalid ipv6 addr [%s] format!",abbr); return 0 ; } #if 0 printf("colon_num:%d,two_colon:%d",colon_num,two_colon); for(int k=0;k<8;k++) { printf("%3d,",ipv6_int[k]); } #endif //获取标准化后的值 for(int i=0;i<8;i++) { ret_buff[i*2] = L(ipv6_int[i]); ret_buff[i*2+1] = H(ipv6_int[i]); } return 1; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233052.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 知识图谱(二)——知识推理

    知识图谱(二)——知识推理知识推理是知识图谱中很重要的一部分,主要用于推理暗含的知识(丰富知识图谱),检查知识库的不一致(知识清洗)知识推理分类演绎推理从一般到特殊的过程.从一般性的前提出发,通过推导,得到具体描述或个别结论(三段论),结论已经蕴含一般性知识中,只是通过演绎推理揭示出来,不能得到新知识.归纳推理从特殊到一般的推理过程.从一类事物的大量特殊事例出发,去推出该类事物的一般性结论(数学归纳法)…

    2022年6月1日
    65
  • KVM查看虚拟机的分区内容(4)

    KVM查看虚拟机的分区内容(4)

    2021年9月12日
    99
  • SQL语句查询语句完整语法

    SQL语句查询语句完整语法数据库是 mysql 使用的数据库表名称是 my student 表的完整数据信息是 完整语法是 Select select 选项 字段列表 字段别名 from 数据源 where 字句 groupby 子句 having 子句 orderby 子句 limit 子句 select 选项 Select 选项包含 ALL 所有 默认 dis

    2025年10月6日
    3
  • java后端开发框架有哪些(java后端需要学哪些框架)

    Javaweb开发框架了解web开发前端–页面的设计、路由、展示—静态资源(HTML、CSS、JS)–web服务器(nginx)–Vue技术栈开发后端–对外提供(类)RESTful风格的API—数据库交互–web应用服务器(tomcat)–Spring技术栈开发交互–HTTP协议通信–JSON格式–RESTful风格javaweb开发框架的变迁…

    2022年4月15日
    90
  • Exposing Deep Fakes Using Inconsistent Head Poses论文详记

    Exposing Deep Fakes Using Inconsistent Head Poses论文详记ExposingDeepFakesUsingInconsistentHeadPoses论文详记一、论文简述二、论文内容A、三维头部姿势估计B、DeepFake中头部姿势的不一致性C、基于头部姿势的分类三、论文实验及结果一、论文简述利用3D头部姿势误差检测DeepFake视频,属于基于帧内图像伪影的检测方法,使用低级语义层次特征+SVM分类器,属于浅层分类器方法。二、论文内容作者观察到,在DeepFake产生的过程中,会把生成的虚假人脸拼接到源视频图像中的人脸区域,在这个过程中,将不可避免

    2022年5月25日
    29
  • 浅谈VB.NET[通俗易懂]

    浅谈VB.NET[通俗易懂]浅谈VB.NET

    2022年4月24日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号