在CocoaAsyncSocket中添加SOCKS代理支持

时间:2013-12-04 23:19:36

标签: objective-c proxy cocoaasyncsocket

我为CocoaAsyncSocket添加了SOCKS功能。我首先尝试在GCDAsyncSocket上执行此操作,但失败了。

对于CocoaAsyncSocket,我只是在此方法中的读/写流上设置SOCKS属性(在GCDAsyncSocket中,只有iOS使用CFSocket读/写套接字) 这被粘贴在方法中 - (BOOL)createStreamsToHost:(NSString )hostname onPort:(UInt16)端口错误:(NSError * )errPtr

    NSLog(@"Setting SOCKS proxy: %@:%d", theProxyHost, theProxyPort);

    CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
    CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
    CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, (CFStringRef)theProxyHost);
    CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInteger:theProxyPort]);
    CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4);

    CFReadStreamSetProperty((CFReadStreamRef)theReadStream, kCFStreamPropertySOCKSProxy, socksConfig);
    CFWriteStreamSetProperty((CFWriteStreamRef)theWriteStream, kCFStreamPropertySOCKSProxy, socksConfig);
    CFRelease(proxyDict);

它运行良好,因为它通过代理路由所有流量。 但要么我不明白代理如何工作,要么我做错了,因为:

if(![socket connectToHost:@"somedomain.com" onPort:9567 error:&error]) {
    NSLog(@"Could not connect: %@", [error localizedDescription]);
}

无论服务器是否响应,都始终返回true。因为代理响应。 CocoaAsyncSocket的委托方法

- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
使用代理服务器的主机和端口调用

,而不是我调用connectToHost:onPort:error on的服务器。

我在这里缺少什么?

0 个答案:

没有答案