尝试对非默认开放端口(即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
的唯一原因是沙盒,但是:
我想了解发生了什么。请注意,我也尝试连接到无线接口,而不是环回。