首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iPhone中检查虚拟专用网连接

如何在iPhone中检查虚拟专用网连接
EN

Stack Overflow用户
提问于 2011-11-15 13:13:47
回答 5查看 7.4K关注 0票数 6

我对这个开发还是个新手。我在互联网上找了很多,但找不到任何合适的解决方案。当我从通过虚拟专用网连接的客户机获取数据时,我想检查iPhone应用程序中可用的虚拟专用网连接。我确实检查了Internet连接是否可用,但无法检查VPN是否已连接。请在这方面给我提个建议。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-01 20:18:56

如果你想要ping函数,你可以这样做;

  1. 将套接字设置为内部ip
  2. 使用select检查套接字状态

使套接字不阻塞

它对我很有效

票数 2
EN

Stack Overflow用户

发布于 2014-07-18 18:00:09

我刚刚找到了另一种检查VPN连接的方法,在任何地方都没有提到。您可以使用getifaddrs()获取当前的网络接口。然后遍历它们并检查它们的名称。如果其中任何一个包含taptunppp,则用户已连接VPN。

代码语言:javascript
运行
复制
  - (BOOL)isVPNConnected
{
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;

    // retrieve the current interfaces - returns 0 on success
    success = getifaddrs(&interfaces);
    if (success == 0) {
        // Loop through linked list of interfaces
        temp_addr = interfaces;
        while (temp_addr != NULL) {
            NSString *string = [NSString stringWithFormat:@"%s" , temp_addr->ifa_name];
            if ([string rangeOfString:@"tap"].location != NSNotFound ||
                [string rangeOfString:@"tun"].location != NSNotFound ||
                [string rangeOfString:@"ppp"].location != NSNotFound){
                return YES;
            }

            temp_addr = temp_addr->ifa_next;
        }
    }

    // Free memory
    freeifaddrs(interfaces);
    return NO;
}

更新:在iOS 9上,上面的代码不工作。无论是否连接VPN,接口都是相同的。在这种情况下,请尝试以下代码:

代码语言:javascript
运行
复制
 - (BOOL)isVPNConnected
{
    NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings());
        NSArray *keys = [dict[@"__SCOPED__"]allKeys];
        for (NSString *key in keys) {
            if ([key rangeOfString:@"tap"].location != NSNotFound ||
                [key rangeOfString:@"tun"].location != NSNotFound ||
                [key rangeOfString:@"ppp"].location != NSNotFound){
                return YES;
            }
        }
        return NO;
}
票数 11
EN

Stack Overflow用户

发布于 2017-11-13 00:50:38

要修复在iOS 11上测试的Timur Suleimanov答案,您需要查找IPSec接口;

代码语言:javascript
运行
复制
- (BOOL)isVPNConnected {
    NSDictionary *dict = CFBridgingRelease(CFNetworkCopySystemProxySettings());
    NSArray *keys = [dict[@"__SCOPED__"]allKeys];
    for (NSString *key in keys) {
        if ([key rangeOfString:@"tap"].location != NSNotFound ||
            [key rangeOfString:@"tun"].location != NSNotFound ||
            [key rangeOfString:@"ipsec"].location != NSNotFound ||
            [key rangeOfString:@"ppp"].location != NSNotFound){
            return YES;;
        }
    }
    return NO;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8131807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档