2010-05-14 3 views

ответ

6

От http://java.sun.com/javase/6/docs/technotes/guides/net/proxies.html

Протокол SOCKS, как определено в RFC 1928, обеспечивает основу для клиент-серверных приложений для безопасного обхода брандмауэра как на TCP и UDP уровне. В этом смысле он намного более общий, чем прокси более высокого уровня (например, HTTP или FTP-прокси). J2SE 5.0 обеспечивает поддержку SOCKS для клиентских сокетов TCP.

Есть 2 системные свойства, связанные с SOCKS:

socksProxyHost для имени хоста прокси-сервера
socksProxyPort SOCKS для номера порта, значение по умолчанию равно 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 

Здесь, HTTP-адрес будет проходить через webcache.mydomain.com:8080 потому что настройки HTTP имеют преимущество. Но как насчет URL-адреса ftp? Поскольку для FTP не были назначены какие-либо настройки прокси-сервера, а поскольку FTP находится поверх TCP, то попытки FTP-подключения будут выполняться через прокси-сервер SOCKS на socks.mydomsain.com:1080. Если был указан FTP-прокси, тогда вместо этого использовался бы прокси-сервер.

+0

Это также приведет к тому, что соединения UDP (Dgram) пройдут через указанный прокси? – hexafraction

2

С JKD 1.5, вы можете также настроить прокси на сокет программно:

Например:

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

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

Socket s = new Socket(proxy); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^