近期ipv6审核,个人解决方法

关于ipv6网络请求机制不在赘述,网上教程挺多,简单说下我的解决方法。

苹果的审核要求是在iOS9以上支持就可以,所以可以不用低版本系统。对于服务端是不需要做其他的配置,而大部分公司使用的阿里云也确实不支持IPv6。

服务器不要配置4a记录,如果配置了4a记录,服务器就必须支持IPv6,这个涉及到后端,工作量略大。所以前端转换IPv6地址访问服务器是目前较好方法。只需要把IPv4 IP地址转换为 IPv6地址 使用NAT64转换,在访问服务器就可以了。下面贴出转换IP地址方法,仅用在iOS9以上。

NSString * ipv6Addresses = [Class convertIpv6WithIpAddresses:@"192.0.0.1"];
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <err.h>
+ (NSString *)convertIpv6WithIpAddresses:(NSString *)ipAddresses {
    const char * c_ip = [ipAddresses UTF8String];
    char * ipchar = calloc(ipAddresses.length, sizeof(char));
    strcpy(ipchar, c_ip);

    struct addrinfo hints, *res, *res0;
    int error, s;
    const char * newChar = "No";

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_DEFAULT;

    error = getaddrinfo(ipchar, "http", &hints, &res0);
    free(ipchar);

    if (error) {
        errx(1, "%s", gai_strerror(error));
        /*NOTREACHED*/
    }
    s = -1;

    static struct sockaddr_in6 * addr6;
    static struct sockaddr_in * addr;
    //    NSString * NewStr = NULL;
    char ipbuf[32];

    NSString * TempA = NULL;

    for (res = res0; res; res = res->ai_next) {

        if (res->ai_family == AF_INET6) {
            addr6 =( struct sockaddr_in6*)res->ai_addr;
            newChar = inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, sizeof(ipbuf));
            TempA = [[NSString alloc] initWithCString:(const char*)newChar
                                                        encoding:NSASCIIStringEncoding];

//            address = TempA;

            //            NSString * TempB = [NSString stringWithUTF8String:"&&ipv6"];
            //
            //            NewStr = [TempA stringByAppendingString: TempB];
            printf("%s\n", newChar);

        } else {
            addr =( struct sockaddr_in*)res->ai_addr;
            newChar = inet_ntop(AF_INET, &addr->sin_addr, ipbuf, sizeof(ipbuf));
            TempA = [[NSString alloc] initWithCString:(const char*)newChar
                                                        encoding:NSASCIIStringEncoding];
            //            NSString * TempB = [NSString stringWithUTF8String:"&&ipv4"];
            //
            //            NewStr = [TempA stringByAppendingString: TempB];
            printf("%s\n", newChar);
        }

        break;
    }

    freeaddrinfo(res0);

    return TempA;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值