如何比较字符串形式的IP地址(ipv4与ipv6)

来源:互联网 发布:淘宝客招募令 编辑:程序博客网 时间:2024/05/05 23:41

        在比较IP地址时我们需要考虑到同一个IP地址有不同的表示形式,特别是ipv6增加了缩略符” :: ”,不想自己进行分段并判断的话,可以考虑使用微软提供的inet_pton函数。该函数是对inet_addr的扩展,增加了对IPv6的支持。我们只要将对应的IP地址转换为整型(或字节数组)就可以完成IP地址的比较了。

#include <ws2tcpip.h>//比较两个IP地址,相同返回true,否则返回falsebool compareIPAddress( const char* address1, const char* address2 ){if( address1==NULL || NULL==address2 ){return false;}if( strstr(address1 ,"." )!=NULL && strstr(address2,".")!=NULL ){//IPv4IN_ADDR addr1;IN_ADDR addr2;inet_pton( AF_INET , address1 , &addr1 );inet_pton( AF_INET , address2 , &addr2 );if( addr1.s_addr==addr2.s_addr )return true;elsereturn false;}if( strstr(address1 ,":" )!=NULL && strstr(address2,":")!=NULL ){//IPv6IN6_ADDR addr1;IN6_ADDR addr2;inet_pton( AF_INET6 , address1 , &addr1 );inet_pton( AF_INET6 , address2 , &addr2 );bool unEqual = false;for(int i=0 ; i<8 ; i++ ){if( addr1.u.Word[i]!=addr2.u.Word[i] ){unEqual = true;break;}}if( unEqual )return false;elsereturn true;}return false;}