Розробники
На який протокол спрямувати клієнт і яку схему, socks5 чи socks5h, указати в ньому після перемикання проксі.
SOCKS5 є проксі-протоколом транспортного рівня: він відкриває з'єднання від вашого імені й передає байти, не читаючи й не переписуючи того, що всередині. Кожен статичний ISP-проксі, який ми продаємо, можна перемкнути між HTTP і SOCKS5 на замовленні, яке у вас уже є.
Перемикання протоколу не робить проксі іншим продуктом: ви перемикаєте проксі, який у вас уже є, у панелі керування або через API, і замовлення оновлюється новим портом та обліковими даними для підключення.
Коротко: SOCKS5 є проксі-протоколом, а не видом адреси: він ретранслює TCP-з’єднання, не читаючи й не переписуючи того, що всередині. Кожен статичний резидентний (ISP) проксі, який продає ProxyJam, працює через HTTP, який переносить HTTPS, або через SOCKS5, і ви перемикаєтеся між ними на замовленні, яке у вас уже є; після перемикання підключайтеся з портом та обліковими даними, які показує замовлення.
SOCKS5 переносить усе, для чого ваш клієнт може відкрити TCP-з’єднання, зокрема трафік, який HTTP-проксі переслати не може, і передає байти незмінними. Тому він стає природним вибором для клієнта бази даних, SSH-сесії чи будь-якого інструмента, який не розмовляє HTTP. Одного він не робить: не змінює того, чим є адреса. Проксі-протоколом розмовляють ваш клієнт і проксі; сайт на дальньому кінці бачить з’єднання з адреси проксі плюс будь-які заголовки, які вирішив додати HTTP-проксі. Тож варто питати не про те, який протокол купити, а про те, якій мережі належить адреса, і тут відповідь така: названому інтернет-провайдеру, а в США їх 19.
SOCKS версії 5 було опубліковано 1996 року як RFC 1928, протокол для проходження крізь файрволи, який розширив SOCKS версії 4 підтримкою UDP, рамками для методів автентифікації та адресами призначення у вигляді доменних імен чи адрес IPv6. Клієнт пропонує методи автентифікації, які підтримує, і сервер обирає один; потім клієнт запитує вихідне з’єднання (CONNECT), порт для прослуховування (BIND) або ретрансляцію UDP (UDP ASSOCIATE). Вхід за логіном і паролем описано у власній короткій специфікації, RFC 1929, яка надсилає пароль відкритим текстом, тож там, де це важливо, тримайте трафік усередині тунелю зашифрованим.
Саме тим, чи передається доменне ім’я, і різняться схеми socks5 і socks5h. Посібник curl описує --socks5 як використання проксі, але «resolve the hostname locally» (з локальним резолвінгом імені хоста), а --socks5-hostname як варіант, за якого «the proxy resolve the hostname» (ім’я хоста резолвить проксі). У проксі-URL socks5:// дає першу поведінку, а socks5h:// другу, як показує таблиця в Everything curl. HTTP-проксі, що переносить HTTPS, зазвичай отримує ім’я: запит CONNECT називає хост і порт призначення, і проксі відкриває тунель до них (RFC 9110, розділ 9.3.6). Ретрансляція UDP входить до специфікації SOCKS5, але реалізації в ній розходяться; що це означає для наших проксі, сказано в FAQ нижче.
Якщо у вас уже є SSH-доступ до сервера, ви маєте SOCKS5-проксі без жодної покупки. ssh -N -D 1080 user@server налаштовує те, що посібник OpenBSD щодо ssh називає локальним «dynamic» (динамічним) переадресуванням портів на рівні застосунків. ssh слухає порт 1080 на вашій машині й «will act as a SOCKS server» (працює як SOCKS-сервер), переносячи кожне з’єднання зашифрованим SSH-каналом і відкриваючи його з віддаленої машини. -N обмежує його переадресуванням, без віддаленої оболонки. Спрямуйте клієнт на socks5h://127.0.0.1:1080, і його трафік виходитиме із сервера.
Відмінність від купленого SOCKS5-проксі в тому, де з’єднання виходить назовні. Через SSH-тунель сайт на дальньому кінці бачить адресу SSH-сервера і мережу, якій цей сервер належить, а в орендованого сервера це зазвичай мережа хостинг-компанії. SSH шифрує ділянку між вами й сервером; від сервера до сайту трафік лишається таким, яким він уже був. Проксі ProxyJam, перемкнений на SOCKS5, виходить з адреси в мережі названого інтернет-провайдера, обраного за країною та оператором під час оформлення замовлення. Ви підключаєтеся до нього напряму з портом та обліковими даними із замовлення, без SSH посередині й без власного сервера, який треба підтримувати.
Тож вони відповідають на різні запитання. Тунель через SSH випускає трафік із машини, яку ви вже контролюєте. SOCKS5-проксі на ISP-адресі потрібен для роботи, де важлива сама вихідна адреса, тобто те, яку мережу показує її перевірка.
Три короткі обміни, і в жодному з них проксі не потрібно розуміти ваш трафік.
Ваш клієнт вітається з проксі й домовляється про автентифікацію. Він пропонує методи, які підтримує; проксі називає той, що йому потрібен. На наших адресах це логін і пароль або взагалі нічого, якщо замість цього ви внесли свій IP до білого списку.
Ваш клієнт запитує адресу призначення. Хост і порт, передані або як адреса, або як ім’я. Передавання імені і є цікавим випадком: проксі сам його резолвить, тож DNS-запит іде з мережі проксі, а не з вашої.
Далі проксі просто передає байти. Він не розбирає корисне навантаження, не додає заголовків і не знає, що несе: вебсторінку, сесію бази даних чи передавання пошти. Саме через цю байдужість і варто обирати SOCKS5 замість HTTP-проксі.
| HTTP-проксі | HTTPS через CONNECT | SOCKS5 | |
|---|---|---|---|
| Що може переносити | Лише HTTP-запити | TCP-тунель до названих хоста й порту | Будь-який TCP-потік |
| Чи читає проксі корисне навантаження | Так, він розбирає запит | Ні, після відкриття тунелю | Ні, на жодному етапі |
| Чи може він змінити ваші заголовки | Так, він їх пересилає і може додати свої, наприклад Via | Ні, після відкриття тунелю | Ні, він не має поняття заголовка |
| Де резолвиться ім'я хоста | На проксі | На проксі, бо CONNECT називає хост | На ваш вибір, на будь-якому з боків |
| Типова підтримка в клієнтах | Повсюдна в HTTP-інструментах | Повсюдна в HTTP-інструментах | Поширена в інструментах командного рядка; деяким бібліотекам потрібен додатковий пакет |
| Найкраще підходить для | Простих вебзапитів | Звичайного перегляду та скрейпінгу через HTTPS | Не-веб протоколів і змішаного трафіку |
На який протокол спрямувати клієнт і яку схему, socks5 чи socks5h, указати в ньому після перемикання проксі.
На який протокол спрямувати клієнт і як перемкнути наявний проксі в панелі керування або через API.
У панелі керування або одним викликом API на замовленні; змінити лише клієнт недостатньо. Під час перемикання проксі може бути ненадовго недоступний.
Не використовуйте повторно значення, з якими ви підключалися через HTTP.
socks5h://USERNAME:PASSWORD@HOST:PORT, щоб імена хостів резолвив проксі, або socks5://, щоб резолвити їх на своєму боці.
curl -x socks5h://USERNAME:PASSWORD@HOST:PORT https://example.com/.
У Python бібліотеці requests потрібне її SOCKS-доповнення, pip install requests[socks], перш ніж запрацює проксі-URL виду socks5h://.
import requests
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"
proxies = {
"http": proxy,
"https": proxy,
}
response = requests.get(
"https://example.com/",
proxies=proxies,
)
print(response.status_code)
# HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
curl -x http://USERNAME:PASSWORD@HOST:PORT \
https://example.com/
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
const proxy = "http://USERNAME:PASSWORD@HOST:PORT";
const agent = new HttpsProxyAgent(proxy);
const response = await axios.get(
"https://example.com/",
{
httpAgent: agent,
httpsAgent: agent,
},
);
console.log(response.status);
package main
import (
"fmt"
"net/http"
"net/url"
)
func main() {
// HOST, PORT, USERNAME, PASSWORD come with your order (dashboard or API)
proxy, _ := url.Parse(
"http://USERNAME:PASSWORD@HOST:PORT")
client := &http.Client{Transport: &http.Transport{
Proxy: http.ProxyURL(proxy),
}}
res, _ := client.Get("https://example.com/")
fmt.Println(res.Status)
}
Приклади нижче підключаються через HTTP, протокол, з якого починається замовлення. Щоб використовувати SOCKS5, спершу перемкніть сам проксі в панелі керування або одним викликом API; після цього замовлення показує порт та облікові дані, якими треба користуватися далі. У клієнті змініть схему на socks5 або на socks5h, якщо хочете, щоб ім'я хоста резолвив проксі, з цим портом і цими обліковими даними; для цього Python потрібен requests[socks], а Node.js SOCKS-агент замість HTTPS-агента.
Відповіді нижче називають умови, на яких ми продаємо, і кожна відповідь, де їх названо, посилається на документ, що нас ними зобов'язує.
SOCKS5 є проксі-протоколом, визначеним у RFC 1928, що працює на транспортному рівні. Ваш клієнт просить проксі відкрити з'єднання з хостом і портом, проксі його відкриває і відтоді пересилає байти в обидва боки, не інтерпретуючи їх. Оскільки він ніколи не розбирає того, що несе, він не обмежений вебтрафіком: через нього може пройти все, що працює поверх TCP.
HTTP-проксі розуміє HTTP. Він читає рядок запиту й заголовки та вільний додавати, видаляти чи переписувати їх, тому деякі проксі непомітно повідомляють про себе в заголовку, якого ви не задавали. SOCKS5 узагалі не має поняття заголовка: він бачить адресу призначення й потік байтів. Якщо ваш трафік не HTTP або ви хочете, щоб ніщо посередині не могло його правити, обирайте SOCKS5.
Ні, як і HTTP-проксі. SOCKS5 автентифікує вас на проксі й потім пересилає байти. Специфікація дозволяє методу автентифікації додати власний захист, але автентифікація за логіном і паролем (RFC 1929) надсилає пароль відкритим текстом і нічого після нього не захищає. Якщо всередині йде HTTPS або SSH, трафік уже зашифрований із кінця в кінець, і проксі не може його прочитати. Якщо трафік усередині відкритий, він лишається відкритим, тож не вважайте SOCKS5 шаром шифрування.
Він переносить DNS-запит. Із socks5 ваш клієнт резолвить ім'я хоста локально й просить проксі підключитися до отриманої адреси. Із socks5h ваш клієнт надсилає ім'я, і його резолвить проксі. Це важливо у двох відношеннях: ваш власний резолвер ніколи не бачить, які хости ви відвідуєте, і ви отримуєте ту відповідь, яку отримує мережа проксі, а для хоста, відповідь якого залежить від географії, вона часто відрізняється від відповіді, яку ви отримали б удома.
UDP ASSOCIATE є в RFC 1928; чи реалізує його конкретний клієнт або сервер, буває по-різному, тож перевіряйте обидва боки, а не припускайте. Ми не публікували підтримку UDP для наших проксі, тож розраховуйте на TCP і запитайте підтримку, перш ніж будувати щось, що залежить від UDP.
Ні. Ви перемикаєте наявний проксі між HTTP, який також переносить HTTPS, і SOCKS5 у панелі керування або одним викликом API на тому самому замовленні. Це не лише налаштування клієнта: перемикання виконується на проксі, замовлення оновлюється новим протоколом, портом та обліковими даними, а поки це відбувається, проксі може бути ненадовго недоступний. Проксі лишається вашим увесь оплачений період, його безкоштовно замінюють, якщо він перестає відповідати або заблокований на названій вами цілі, до 20 % замовлення за календарний місяць, а на перше замовлення діє повернення протягом 24 годин, що покриває до 10 IP і не скасовується перевіркою. Умови надання послуг
--socks5 резолвить ім’я хоста локально, --socks5-hostname дає змогу резолвити його проксіsocks5:// і socks5h:// у проксі-URL і те, який бік резолвить ім’я хоста-D налаштовує локальне динамічне переадресування портів, за якого ssh працює як сервер SOCKS4 і SOCKS5, а -N переадресовує порти без виконання віддаленої команди