iOS检查非默认开放端口

时间:2016-02-12 13:23:34

标签: ios networking jailbreak ssh

尝试对非默认开放端口(即22 / TCP SSH)实施JB检查:

/**
 Checks for non-standard ports
 */
inline int isPortOpen(short port)__attribute__((always_inline));
-(BOOL)isPortOpen:(short) port
{
    struct sockaddr_in addr;
    int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);

    if(inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr)) {
        int result = connect(sock,(struct sockaddr *)&addr, sizeof(addr));

        // error :(
        int w00t = errno;
        NSLog(@"Error: %i",w00t);

        if(result == 0){
            NSLog(@"FAILED JB CHECK -- non-standard port open!");
            return YES;
        }
        close(sock);
    }

    NSLog(@"PASSED JB CHECK -- non-standard ports closed.");
    return NO;
}

connect()失败(result为-1)且errno为1 - EPERM https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man2/intro.2.html

  

不允许进行1次EPERM操作。试图进行操作
                仅限于具有适当权限的流程或                 文件或其他资源的所有者。

查看connect()的手册,EPERM不是可能的返回错误之一 https://developer.apple.com/library/ios/documentation/System/Conceptual/ManPages_iPhoneOS/man2/connect.2.html

因此,我可以看到获取EPERM的唯一原因是沙盒,但是:

  1. 在越狱的iPod(iOS 8.4)上运行
  2. 容器安全带配置文件默认允许出站网络连接
  3. 我想了解发生了什么。请注意,我也尝试连接到无线接口,而不是环回。

0 个答案:

没有答案