- void get_ipv6addr_prefix_content(char *ipv6addr,char *prefix)
- {
- struct in6_addr ipv6;
- char ipv6_str_r[INET6_ADDRSTRLEN]={0};
- char *p1,*p2;
- int prefix_num;
- char ipaddr_tmp[sizeof(struct in6_addr)];//tmp addr
- int i=0;
-
- //find '/' and process prefix num
- if(NULL == (p1 = strchr(ipv6addr,'/')))
- {
- printf("IPv6 Address without Prefix!\n");
- exit(1);
- }
- else
- {
- printf("IPv6 Address with Prefix!\n");
- p2 = p1+1;
- prefix_num = atoi(p2);
-
- char *tmp = ipv6addr;
- static int k = 0;
- while(tmp != p1)
- {
- ipaddr_tmp[k] = *tmp;
- tmp++;
- k++;
- }
- ipaddr_tmp[k-1] = '\0';
- }
-
- u_int8_t prefix_data[prefix_num/8];
-
- printf("ipv6address:%s\n", ipv6addr);
- //string to binary
- if (inet_pton(AF_INET6,ipaddr_tmp,&ipv6) <= 0)
- {
- printf("inet_pton failed.");
- exit(1);
- }
- //printf ipv6addr data
- for(;i<16;i++)
- {
- printf("ipv6.s6_addr[%d]:%x\n",i,ipv6.s6_addr[i]);
- }
- printf("=======================================");
-
- /* process prefix */
- if((prefix_num%2) == 0)//prefix num is even num
- {
- printf("\nThe prefix data\n");
-
- for(i = 0;i < ((prefix_num)/8);i ++)
- {
- prefix_data[i] = ipv6.s6_addr[i];
- printf("%x\n",prefix_data[i]);
- }
-
- //tail content set to 0x0
- int j = prefix_num/8;
- while(j<16)
- {
- prefix_data[j] = 0x0;
- j++;
- }
- }
- else //prefix num is odd num
- {
- //to be fixed.
- exit(1);
- }
- printf("=======================================\n");
-
- //hex to string
- if ( !inet_ntop(AF_INET6, prefix_data,ipv6_str_r,sizeof(ipv6_str_r)) )
- {
- printf("inet_ntop failed.");
- exit(1);
- }
- printf("Get Prefix##_%s\n", ipv6_str_r);
-
- strcpy(prefix,ipv6_str_r);
-
- }
相关热门文章
给主人留下些什么吧!~~
评论热议