- 19
- 92
Фикс прокси для RakSAMP Lite
Всем привет. Короче долго мучался с тем что раксамп через socks5 не заходит на сервер. Пишет Auth OK, Connection succeeded, а потом сразу Connection attempt failed и так по кругу. Прокси при этом живой, query через него отвечает. Полез в ехе смотреть что там с прокси, нашел несколько косяков, написал луа скрипт который их правит.
Что было не так:
1. При UDP ASSOCIATE раксамп отправляет прокси адрес игрового сервера, хотя по RFC 1928 там должен быть адрес клиента (откуда он будет слать пакеты). В итоге прокси просто выкидывает все наши пакеты. Теперь шлется 0.0.0.0:0, т.е. принимай с любого адреса.
2. Некоторые прокси в ответе отдают адрес релея 0.0.0.0, это значит "шли на мой ip". Раксамп реально слал на 0.0.0.0) Теперь если пришли нули, подставляется ip самой прокси.
3. Самое главное, из за чего не заходило. Раксамп при коннекте шлет запрос раз в 150мс и после 6 попыток сам себе генерит ID_CONNECTION_ATTEMPT_FAILED. То есть на все рукопожатие меньше секунды. В обычном ракнете там 1000мс. Через прокси с пингом 300-400 два обмена с куки просто не успевают, поэтому и заходило через раз. Поставил 1000мс как в оригинале.
4. Еще нашел что перед коннектом раксамп отдельным сокетом шлет серверу query пакет напрямую, мимо прокси. То есть сервер видит твой реальный ip. Тоже вырезал.
Как работает
Скрипт через ffi патчит код прямо в памяти процесса, сам ехе не трогается.Перед патчем сверяются оригинальные байты, если у тебя другая версия раксампа то он просто ничего не тронет.
Установка
Кидаете !!proxy_udp_patch.lua в scripts, два восклицательных знака чтобы грузился первым. В консоли должно быть 5 строк с ok:
Важно
Проверял на RakSAMP Lite от 18.04.2022.
Кому интересно глянуть в иде:
upd: По совету @AdCKuY_DpO4uLa убрал хардкод 1000мс. Теперь скрипт сам проверяет пинг до прокси по времени socks5-хендшейка и ставит интервал повтора как пинг+150+небольшой разброс. До первого замера остается 1000 по дефолту.
Всем привет. Короче долго мучался с тем что раксамп через socks5 не заходит на сервер. Пишет Auth OK, Connection succeeded, а потом сразу Connection attempt failed и так по кругу. Прокси при этом живой, query через него отвечает. Полез в ехе смотреть что там с прокси, нашел несколько косяков, написал луа скрипт который их правит.
Что было не так:
1. При UDP ASSOCIATE раксамп отправляет прокси адрес игрового сервера, хотя по RFC 1928 там должен быть адрес клиента (откуда он будет слать пакеты). В итоге прокси просто выкидывает все наши пакеты. Теперь шлется 0.0.0.0:0, т.е. принимай с любого адреса.
2. Некоторые прокси в ответе отдают адрес релея 0.0.0.0, это значит "шли на мой ip". Раксамп реально слал на 0.0.0.0) Теперь если пришли нули, подставляется ip самой прокси.
3. Самое главное, из за чего не заходило. Раксамп при коннекте шлет запрос раз в 150мс и после 6 попыток сам себе генерит ID_CONNECTION_ATTEMPT_FAILED. То есть на все рукопожатие меньше секунды. В обычном ракнете там 1000мс. Через прокси с пингом 300-400 два обмена с куки просто не успевают, поэтому и заходило через раз. Поставил 1000мс как в оригинале.
4. Еще нашел что перед коннектом раксамп отдельным сокетом шлет серверу query пакет напрямую, мимо прокси. То есть сервер видит твой реальный ip. Тоже вырезал.
Как работает
Скрипт через ffi патчит код прямо в памяти процесса, сам ехе не трогается.Перед патчем сверяются оригинальные байты, если у тебя другая версия раксампа то он просто ничего не тронет.
Установка
Кидаете !!proxy_udp_patch.lua в scripts, два восклицательных знака чтобы грузился первым. В консоли должно быть 5 строк с ok:
Код:
[proxy-patch] udp associate dst: ok
[proxy-patch] relay address: ok
[proxy-patch] connect retry interval: ok
[proxy-patch] direct query: ok
Важно
Проверял на RakSAMP Lite от 18.04.2022.
Кому интересно глянуть в иде:
Код:
0x45BED2 - UDP ASSOCIATE
0x45BF4F - разбор ответа прокси
0x40BA0C - recvfrom
0x40BCFD - интервал повтора коннекта
0x40387E - query мимо прокси
0x419060 - отправка пакетов
upd: По совету @AdCKuY_DpO4uLa убрал хардкод 1000мс. Теперь скрипт сам проверяет пинг до прокси по времени socks5-хендшейка и ставит интервал повтора как пинг+150+небольшой разброс. До первого замера остается 1000 по дефолту.
Вложения
Последнее редактирование: