носки в яве (открытие через носки) - PullRequest
4 голосов
/ 14 мая 2010

как добавить поддержку SOCKS в мое приложение? и где я могу получить библиотеки?

Ответы [ 2 ]

6 голосов
/ 14 мая 2010

С 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-прокси, то вместо него использовался бы этот прокси.

2 голосов
/ 30 ноября 2011

Начиная с jkd 1.5, вы также можете программно настраивать прокси с помощью Socket:

Например:

SocketAddress sa = InetSocketAddress.createUnresolved("mysocksproxy.com", 1080);

Proxy proxy = new Proxy(Proxy.Type.SOCKS, sa);

Socket s = new Socket(proxy);

Вы также можете поместить этот код в SocketFactory.

...