2 хитрости, которые я знаю, как это сделать, это заменить стандартную библиотеку времени выполнения или подобную уловку для перехвата сетевых вызовов ОС или для настройки набора точно настроенных правил межсетевого экрана в ядре.
Обе эти методики очень специфичны для ОС и не имеют возможности сделать это с помощью Java.
Лучше всего было бы запустить существующую оболочку socks5 и позволить этой программе запустить внешнее приложение, например socksify .
У меня был смешанный опыт с этим подходом, некоторые приложения работают, другие нет, и никогда не находил в этом никакой логики.
YMMV
Другой подход заключается в воспроизведении tcpproxy в приложении Java (например, с использованием Apache MINA) и подключении приложения к порту прокси на локальном хосте. Опять же, это будет работать только для определенных услуг.