QtでSOCKS5経由のTCPストリームを開く
接続先へ接続する前にQTcpSocketの明示的なプロキシを設定します。GUIを必要とせずQt Networkを使います。
Qt NetworkはTCPソケットに対してSOCKS5を直接ネゴシエートできます。既存のQtアプリケーションでは、接続前にソケットを設定します。
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socketは既存のQTcpSocketです。例の接続先とポートはアプリケーションのTCPサービスを表します。Qtはまずプロキシに到達し、次にその接続先への接続を要求します。公共の中間者が許可される一般公開のTCPサービスでは、SOCKS5プロキシ一覧がプロキシアカウント不要のこの例の候補を提供します。候補がサービスの実際のホストとポートを許可していることを確認してください。
通常の非同期ソケットシグナルは引き続き有効です。アプリケーションデータを交換する前にconnected()を待ち、errorOccurred()を処理します。接続を使用している間はソケットオブジェクトを生かしておきます。ブロッキングコードでは、代わりにQtの文書化された待機メソッドを意図的なタイムアウト付きで使用してください。
これにはQt Networkが必要で、ウィジェットベースのGUIは不要です。明示的な設定はこのソケットに属します。他のソケットはアプリケーションの既定値を保持できます。または別のプロキシを選べます。このソケットを直接接続にするには、接続前にプロキシ種別をQNetworkProxy::NoProxyに設定します。