我正在研究客戶端 - 服務器解決方案,其中我的iPhone應用程序使用SSL連接通過TCP/IP連接到服務器。我想確保SSL上的整個流量都通過HTTP代理服務器。使用iPhone上的CONNECT方法通過SSL實現HTTP代理
我們可以在設置 - > WiFi詳細信息 - > HTTP代理(手動/自動)中指定iPhone上的HTTP代理信息。當我們這樣做時,所有的HTTP流量都會通過上面提到的代理服務器。 (例如所有的safari流量,甚至是來自所有應用的HTTP流量。)
但是我的問題是SSL over TCP/IP不通過代理服務器。如下所述,iPhone SDK具有kCFStreamPropertySOCKSProxy屬性配置NSStream for SOCKS用法,但我沒有看到在CFSocket/NSStream上配置HTTP代理服務器。處理這個問題的最好方法是什麼?
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)ipAddress, port, &readStream, &writeStream);
CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, (CFStringRef)@"proxy-ip");
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInteger:proxy-port]);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion5);
CFDictionarySetValue(socksConfig, NSStreamSOCKSProxyUserKey, (CFStringRef)@"proxy-username");
CFDictionarySetValue(socksConfig, NSStreamSOCKSProxyPasswordKey, (CFStringRef)@"proxy-password");
CFReadStreamSetProperty(readStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertySOCKSProxy, socksConfig);
CFRelease(proxyDict);
更新:它看起來像只有一個辦法做到這一點,做一個HTTP代理連接到服務器並使用定期SSL流量的連接。但我仍然在尋找iPhone的實施。
謝謝
你是什麼意思「在套接字上發送數據」你如何建立連接?你可以分享代碼嗎? – madlymad 2016-03-18 15:17:32