С http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html
Протокол SOCKS, как определено в RFC 1928, обеспечивает основу для клиент-серверных приложений для безопасного обхода брандмауэра как на уровне TCP, так и на уровне UDP. В этом смысле он намного более универсален, чем прокси-серверы более высокого уровня (например, прокси-серверы HTTP или FTP). J2SE 5.0 обеспечивает поддержку SOCKS для клиентских сокетов TCP.
С SOCKS связано 2 системных свойства:
socksProxyHost
для имени хоста прокси-сервера SOCKS
socksProxyPort
для номера порта, значением по умолчанию является 1080
Обратите внимание, что на этот раз после префикса нет точки ('.'). Это по историческим причинам и для обеспечения обратной совместимости. Как только прокси-сервер SOCKS указан таким образом, все TCP-соединения будут выполняться через прокси.
Пример:
$ java -DsocksProxyHost=socks.mydomain.com GetURL
Здесь во время выполнения кода каждый исходящий сокет TCP будет проходить через прокси-сервер SOCKS по адресу socks.mydomain.com:1080.
.
Теперь, что происходит, когда определены и SOCKS-прокси, и HTTP-прокси? Ну, правило таково, что настройки для протоколов более высокого уровня, таких как HTTP или FTP, имеют приоритет над настройками SOCKS. Таким образом, в этом конкретном случае при установлении HTTP-соединения параметры прокси-сервера SOCKS будут игнорироваться, и с HTTP-прокси будет осуществляться связь. Давайте посмотрим на пример:
$ java -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080 -DsocksProxyHost=socks.mydomain.com GetURL
Здесь URL-адрес http будет проходить через webcache.mydomain.com:8080, потому что настройки http имеют приоритет. Но как насчет FTP-URL? Поскольку для FTP не было назначено никаких конкретных настроек прокси-сервера, а FTP находится поверх TCP, будут выполняться попытки FTP-подключения через прокси-сервер SOCKS на socks.mydomsain.com:1080. Если бы был указан FTP-прокси, то вместо него использовался бы этот прокси.