アプリケーションのすべてのネットワーク トラフィックが Java のソックス プロキシを経由するように強制するツールを開発しています。古いソケット API の場合、システム プロパティを「-DsocksProxyHost=my-host -DsocksProxyPort=my-port」に設定するだけで済みますが、NIO では機能しません。
私は解決策を試しました:
SocketChannel を拡張する「ProxySocketChannel」と呼ばれる NIO SocketChannel を作成しました。ソックス接続とその他のソックス プロキシ ロジックが含まれています。しかし、実行すると、「SelectorImpl.register」の次のコード行で「IllegalSelectorException」が発生しました。
if (!(ch instanceof SelChImpl))
throw new IllegalSelectorException();
sun.nio.ch.SelChImpl はパッケージが表示されているため、アクセスできません。私はトリッキーな解決策を試しました。「ProxySocketChannel」をパッケージ「sun.nio.ch」に入れました。コンパイルは成功しましたが、実行時にエラーが発生しました:
java.lang.IllegalAccessError: class sun.nio.ch.ProxySocketChannel cannot access its superinterface sun.nio.ch.SelChImpl
パッケージ sun.nio.ch.ProxySocketChannel のクラス sun.nio.ch.ProxySocketChannel がまだ sun.nio.ch.SelChImpl にアクセスできない理由がわかりません。JDK組み込みクラスにはある程度の保護があると思います。アクセスする方法はありますか?
私のJDKバージョンは1.6.0_65です。
それ以外の場合、既存のコードを変更せずに NIO のソックス プロキシをセットアップする方法はありますか?