HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.11.2025, 05:37
roverman
Новичок
Регистрация: 08.07.2013
Сообщений: 14
С нами: 6760998

Репутация: 51
По умолчанию

Хочу спарсить список игроков с SA-MP сервера legacy.samp-rp.ru:7777 на Python

Сервер отвечает, но не отдает список игроков.

Что пробовал на Python:

Работает:

- Подключение к серверу - ок

- DNS legacy.samp-rp.ru -> 5.252.33.202

- Info запрос (opcode 'i') - показывает 130 игроков онлайн

- Rules запрос (opcode 'r') - отдает правила сервера

Не работает:

- Opcode 'd' (детальные игроки) - таймаут

- Opcode 'c' (базовые игроки) - таймаут

- Opcode 'p' - отвечает, но только 15 байт пустых данных

Вывод:

Сервер специально блокирует получение списка игроков.

Возвращает только базовую инфу, но самих игроков не отдает.

Вопрос:

Кто сталкивался с такой защитой на SA-MP серверах?

Как можно обойти на Python? Может есть другие методы получить список игроков?

Код:





[CODE]
# Запрос правил сервера - РАБОТАЕТ
def get_rules(self):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(10)

packet = b'SAMP'
packet += socket.inet_aton(self.server_ip)
packet += struct.pack('



Код:





[CODE]
# Запрос списка игроков - НЕ РАБОТАЕТ (таймаут)
def get_players_detailed(self):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(10)

packet = b'SAMP'
packet += socket.inet_aton(self.server_ip)
packet += struct.pack('



Код:





[CODE]
# Кастомный opcode 'p' - отвечает но без данных
def try_opcode_p(self):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.settimeout(5)

packet = b'SAMP'
packet += socket.inet_aton(self.server_ip)
packet += struct.pack('



Код:





Код:
# DNS разрешение - работает
def resolve_server(self):
    try:
        ip = socket.gethostbyname("legacy.samp-rp.ru")
        print(f"Server IP: {ip}")  # 5.252.33.202
        return ip
    except:
        return None


Код:





[CODE]
# Парсинг полученных данных
def parse_server_info(self, data):
if len(data) > 11:
offset = 11
passworded = data[offset] == 1
players = struct.unpack('

 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.