So konfigurieren Sie den Socks-Proxy in Java NIO

Ich entwickle ein Tool, das den gesamten Netzwerkverkehr von Anwendungen zwingt, über einen Socks-Proxy in Java zu gehen. Für die alte Socket-API kann ich nur die Systemeigenschaften "-DsocksProxyHost = mein-Host -DsocksProxyPort = mein-Port" festlegen, aber dies funktioniert nicht mit NIO.

Ich habe eine Lösung ausprobiert:

Ich habe einen NIO-SocketChannel namens "ProxySocketChannel" geschrieben, der SocketChannel erweitert. Es enthält Socks-Verbindung und andere Socks-Proxy-Logik. Aber wenn ich es ausführe, erhalte ich eine "IllegalSelectorException" in dieser Codezeile in "SelectorImpl.register":

if (!(ch instanceof SelChImpl))
        throw new IllegalSelectorException();

sun.nio.ch.SelChImpl ist ein Paket, auf das ich nicht zugreifen kann. Ich habe eine knifflige Lösung ausprobiert: Ich habe meinen "ProxySocketChannel" im Paket "sun.nio.ch" abgelegt. Die Kompilierung ist bestanden, aber beim Ausführen ist ein Fehler aufgetreten:

java.lang.IllegalAccessError: class sun.nio.ch.ProxySocketChannel cannot access its superinterface sun.nio.ch.SelChImpl

Ich weiß nicht, warum die Klasse sun.nio.ch.ProxySocketChannel mit dem Paket sun.nio.ch immer noch nicht auf sun.nio.ch.SelChImpl zugreifen kann. Ich denke, es gibt einen gewissen Schutz für JDK-Klassen. Gibt es eine Möglichkeit, darauf zuzugreifen?

Meine JDK-Version ist 1.6.0_65.

Gibt es sonst eine Möglichkeit, Socks Proxy für NIO einzurichten, ohne den vorhandenen Code zu ändern?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage