http/3, прокси и все что с этим связано
Доброго времени суток, разберу нарратив о http/3:
- https://t.me/c/1682905740/182857 (ido research)
- https://t.me/c/1682905740/182704 (tern)
переслано из https://t.me/+ppSUpmFiLi9kY2Ri (AGREGATOR)
Http/3
Основное отличие HTTP/3 от HTTP/2 заключается в использовании протокола QUIC(построенного на UDP) вместо TCP. И другие плюшки такие как: отсутствие блокировки головы очереди, уменьшение времени соединения, поддержка смены соединений "на лету" и так далее...
Работа над протоколом пока не завершена, сам протокол не стандартизирован, поэтому "безшовного" или гладкого перехода, по крайней мере пока, у большинства не будет. Только гибридные решения, приведенные ниже
Антики
По умолчанию, когда вы используете прокси (даже если прокси socks5) - антидетект выключает протокол QUIC (проверено в adspower и incogniton)
Проверить работу QUIC в вашем браузере - https://quic.nginx.org/
Проверить работу QUIC на определенном сайте - https://www.http3check.net/
Coinlist
Коинлист действительно начал использовать http3 для своих запросов, если он конечно включен в настройках вашего браузера (chrome://flags/ -> QUIC):
Если разобраться чуть глубже - они используют решение cloudflare и aws cloudfront для работы http3:
Оба работают в роли прокладки и переводят ваше http/3 соединение в соединение, которое воспринимает сервер (будь то http/2 или http/3).
Данные решения поддерживают одновременно два или один протокол. В случае, если включен http/3 - приоритет будет отдан ему
В кейсе коинлиста (как и подавляющего большинства проектов) - включены сразу два варианта. Рассказы про бан по этой причине - по большей части безосновательны, бояться пока нечего
Socks5
Socks5 прокси не работают с QUIC протоколом. Удостовериться в этом довольно легко:
package main
import (
"fmt"
"github.com/quic-go/quic-go/http3"
"net/http"
)
func handleRequest(w http.ResponseWriter, r *http.Request) {
clientIP := r.RemoteAddr
fmt.Fprintf(w, "Your IP address is %s", clientIP)
}
func main() {
http.HandleFunc("/", handleRequest)
err := http3.ListenAndServeQUIC("0.0.0.0:4433", "host.cert", "host.key", nil)
if err != nil {
fmt.Println(err)
}
}Генерируем ссл сертификаты, открываем порт 4433 и запускаем сервер.
На своей машине прокидываем проксифаер и запускаем код:
package main
import (
"crypto/tls"
"github.com/quic-go/quic-go/http3"
"io/ioutil"
"log"
"net/http"
"time"
)
func main() {
client := http.Client{
Transport: &http3.RoundTripper{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
}
for {
resp, err := client.Get("https://<IP>:4433/")
if err != nil {
log.Fatalf("Failed to make request: %s", err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalf("Failed to read response body: %s", err)
}
_ = resp.Body.Close()
log.Printf("Received response: %s", body)
// Sleep for 2 seconds before next request
time.Sleep(2 * time.Second)
}
}Выводы
На данный момент бОльшая часть проектов не может позволить себе переключиться на http3 only из-за потери трафика и инженерных проблем в следствии такого нововведения.
Антики в паре с прокси довольно просто справились с этой задачей, но стоит учитывать, что сайты могут понижать ваш "траст" из-за отсутствия http3 соединения.
Надежных продуктов которые предоставляют quic прокси пока нет. Даже если они появятся - антидетектам нужно время чтобы ввести их поддержку.