А если одно из дополнений включить: " YouTube без ограничений", Поток или ЮБуст, то сервера гуглвидео правильные появятся? Местоположение не измениться?
Конечно изменится. Это же впны по сути. И в блокчеке сразу все стратегии станут рабочими ))
Шучу, конечно. Блокчеку похер на то, что там у вас в браузере стоит.
Я так и не понял с этими расширениями можно свой список гуглвидео сформировать?
Можно. Только это будут гуглвидео уже не вашего провайдера. Скорее всего - зарубежные, до которых вы не доберетесь из-за коробок на пути, возможно даже не одной.
А если лаунчер гудбая запустить, то сервера гуглвидео моего провайдера будут?
С чем запустить? С юбустом включенным? Нет, не будут. С отключенной подобной херней в браузере (всей) - будут вашего провайдера.
Нет, не нужна. Всё что с знаком / - это просто комментарии.
Спасибо, а если адреса, которые я нашёл добавить например в
default - googlevideo and youtube
их всего з штуки.
Думаю нет смысла для них отдельный чеклист делать.
Как вам удобнее, так и делайте. Но вообще, стратегии для гуглвидео и для ютуба отличаются, поэтому особого смысла в комбо-чеклисте “ютуб+гуглвидео” нет. Он там скорее так, для коллекции.
Уж лучше на чеклисте с одними только гуглвидео проверять.
Спасибо,
Короче лишние адреса только вредят?
Не сказать что вредят, но пользы от них тоже не особо.
Кстати, это, действительно был баг. При параллельных запросах с кастомным резолвером, по непонятным причинам, айпишники кэшировались не туда куда надо. В итоге при запросах валились ошибки сертификатов. Устранить корень проблемы я не смог. Помогает отключение кастомного резолвера в настройках. Думаю, добавлю проход по чеклисту и кэширование айпи заранее, до начала проверок.
Сегодня полночи пытался решить задачу по комбинаторике: как сделать автоформирование листа стратегий на основе заданных ключей, не упарываясь в миллион вложенных циклов. Решил. Теперь работает очень прикольно, но всё остальное не готово и хз когда будет, т.к. я взялся с 0 переписывать. В будущих версиях на go лист будет иметь вот такой вид:
#KEY#-q
#KEY#-e 2
#KEY#--native-frag;--reverse-frag
#KEY#--wrong-seq;--wrong-chksum;empty
#KEY#--fake-with-sni FAKESNI;empty
#KEY#--fake-from-hex FAKEHEXSTREAMTLS;--fake-from-hex 160303;empty
#KEY#--fake-gen 5;--fake-gen 15;empty
#KEY#--set-ttl 4;--set-ttl 8;empty
Из этого листа, например, формируется 324 уникальные стратегии для тестов. Куда удобнее, чем руками городить текстовые файлы.
так как я в программировании не шарю, и к тому же только поверхностно в сетевых технологиях, то все ключи, используемые goodbyedpi и zapret я подставлял тупо по аналогии с представленными тут стратегиями. Но была мысль если бы как-то намутить конвертер стратегий. Например, на этом форуме бывало выкладывали рабочую стратегию под byedpi, но у меня zapret на openwrt, а под него не получалось подобрать. Я начал задрачивать чатжпт. Если попросить его тупо конвертировать между zapret, goodbye и byedpi , то он делает полную дичь, без учета всех ключей. Далее когда довел его до создания таблицы сопоставления ключей, уже стал чуть логичнее его результат, но всё равно все ключи сопоставить не смог и в итоге забил. а потом попросил его сделать генератор стратегий для zapret, и тоже очень долго ему объяснял, т.к. он выдавал всякую дичь. В итоге остановился на такой версии генератора для запрета, вероятно там и ключи не все еще используются и может неправильно совмещаются, но что есть
str_gen_v0_5.py (4,0 КБ)
Круто, даже с возможностью выбора ключей пользователем.
У меня без стороннего модуля для перебора, так что без бутылки не поймешь
Спойлер
type Strategy struct {
Keys []string
Successes int
HasSuccesses bool
}
type keySet struct {
keys []string
}
func NewStrategy() Strategy {
s := Strategy{
Keys: nil,
Successes: -1,
HasSuccesses: false,
}
return s
}
func newKeySet(_keys []string) keySet {
k := keySet{
keys: _keys,
}
return k
}
var keySets []keySet
///тут кусок кода для вытаскивания наборов ключей из текстового файла///
func formStrategies() ([]Strategy, error) {
var strats []Strategy
total := 1
for _, keySet := range keySets {
total = total * len(keySet.keys)
}
for i := 0; i < total; i++ {
strats = append(strats, NewStrategy())
}
previousSteps := 1
for _, keySet := range keySets {
var err error
strats, previousSteps, err = keysStep(strats, keySet.keys, previousSteps, total)
if err != nil {
return nil, fmt.Errorf("can't form strategy line: %v", err)
}
}
for i := 0; i < total; i++ {
for j := 0; j < len(strats[i].Keys); j++ {
for j < len(strats[i].Keys) && strats[i].Keys[j] == "empty" {
strats[i].Keys = utils.RemoveFromArrayString(strats[i].Keys, j)
}
if j < len(strats[i].Keys) {
replacer := strings.NewReplacer(
options.MyOptions.FakeSNI.Mask, options.MyOptions.FakeSNI.Value,
options.MyOptions.FakeHexStreamTLS.Mask, options.MyOptions.FakeHexStreamTLS.Value,
options.MyOptions.FakeHexStreamUDP.Mask, options.MyOptions.FakeHexStreamUDP.Value,
options.MyOptions.FakeHexBytesTLS.Mask, options.MyOptions.FakeHexBytesTLS.Value,
options.MyOptions.FakeHexBytesUDP.Mask, options.MyOptions.FakeHexBytesUDP.Value,
options.MyOptions.PayloadTLS.Mask, options.MyOptions.PayloadTLS.Value,
options.MyOptions.PayloadUDP.Mask, options.MyOptions.PayloadUDP.Value,
)
strats[i].Keys[j] = replacer.Replace(strats[i].Keys[j])
}
}
log.Printf("Strategy %d/%d: %s\n", i+1, total, strats[i].Keys)
}
return strats, nil
}
func keysStep(strategies []Strategy, keys []string, previousSteps int, totalStrategies int) ([]Strategy, int, error) {
if len(keys) == 0 {
return nil, previousSteps, fmt.Errorf("keys array length is zero")
}
if len(strategies) == 0 {
return nil, previousSteps, fmt.Errorf("strategies array length is zero")
}
if previousSteps == 0 {
return nil, previousSteps, fmt.Errorf("steps in cycle is zero")
}
if totalStrategies == 0 {
return nil, previousSteps, fmt.Errorf("total strategies number is zero")
}
if len(strategies) != totalStrategies {
return nil, previousSteps, fmt.Errorf("total strategies number isn'n equal to an actual array length")
}
currentSteps := previousSteps * len(keys)
stepLength := totalStrategies / currentSteps
for i := 0; i < currentSteps; i++ {
n := i % len(keys)
for j := 0; j < stepLength; j++ {
strategies[j+i*stepLength].Keys = append(strategies[j+i*stepLength].Keys, keys[n])
}
}
return strategies, currentSteps, nil
}
А когда ждать? Руки уже чешутся)))
Хз, там пока кроме парсинга листов ничего не готово. Я думаю сделать с 2 режимами на выбор: нативно и через курл. Потому что проблему с фейлами нативных запросов через прокси мне так и не удалось решить. Даже не понимаю с чем она связана - идут таймауты, хоть ты тресни. А отказываться от поддержки byedpi не хочу. В итоге придется переделать весь код. Дня 2, как минимум. Наверное, даже больше.
Ясно. Ждем-с…
А вот это
Пулемет выключит, как я понял, а минусы какие от этого есть?
Ну, у вас будет системный резолвер использоваться. Если его блочат или перехватывают, то ничего хорошего из теста не выйдет. Если не перехватывают - то пофиг. Ну а батник из шапки использует dns-over-https, с ним такой проблемы в принципе нет. Как прикрутить doh к go я пока не разбирался. Ну, через курл, в любом случае, можно будет реализовать…
Ну, у меня, похоже, второй вариант - “пофиг”)). Результаты со включенным резолвером и выключенным одинаковые. Зато от периодического пулемета избавлюсь, уже большой плюс.
И кстати, тайм-аут выставил единичку - третий день полет нормальный при более приятной скорости.
Странная штука получается. Есть список серверов гугла, которые работают всегда даже без ГудбайДПИ, по ним само собой тесты проходят нормально. Однако если листать видосы, иногда сервер для подгрузки меняется (видно что другой пулл имён даже). И вот эти вот сервера (попробуй еще выуди все их, они бывает с каждым новым видео добавляются новые и новые) уже не проходят никакие проверки, везде по нулям. НЕХ менял на свой сгенерированный, ГудбайДПИ с Fake SNI скачал, даже через Zapret пробовал прогонять тесты с этими неработающими адресами, когда время от времени у меня долбится Ютуб при попытке загрузить видео или его новый кусок. Итог один - по всем фронтам 0.
Вот собственно список того, что у меня вообще никак не хочет работать, однако Ютуб эти адреса использует:
Тык
https://rr1---sn-axq7sn7l.googlevideo.com
…
https://rr17---sn-axq7sn7l.googlevideo.com
https://rr13---sn-axq7sn76.googlevideo.com
https://rr9---sn-axq7sn7z.googlevideo.com
А вот этот пулл работает даже без активированного обхода:
Я в замешательстве. СПб, провайдер Skynet.