Задать вопрос

Как раздуплить Source-Query на Python 3+?

Всем привет, помогите мне раздуплить Source-Query. Хочу опросить сервер CS 1.6

Написал пару строк, но оно не отвечает даже. Файрволл отрублен на сервере.

import socket
 
IP = '195.62.53.149'
PORT = 27015
 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect((IP, PORT))
sock.send('TSource Engine Query'.encode('utf-8'))
sock.settimeout(120)
text = sock.recv(1024)
print('res ->' + text)
  • Вопрос задан
  • 1187 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Kademn
@Kademn
Злой
Ваш код рабочий, если не считать последней строчки, где вы к строке плюсуете байты. Ответ вы не получаете потому, что запрос составлен неправильно, но это уже вопрос не языка программирования или сокетов, а формата запросов и ответов. Запрос должен начинаться с четырёх 'FF' байт.
import socket
 
IP = '195.62.53.149'
PORT = 27015
 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect((IP, PORT))
sock.send(b'\xff\xff\xff\xffTSource Engine Query')
sock.settimeout(120)
text = sock.recv(1024)
print(b'res ->' + text)


> python cs_udp.py 
b'recv -> \xff\xff\xff\xffI0Euro-Cs.Ru | Public | 1000FPS\x00de_dust2_2x2\x00cstrike\x00Counter-Strike\x00\n\x00\x03\x14\x00dl\x00\x011.1.2.7/Stdio\x00\x80\x87i'


UPD:
Я никогда не работал с этим форматом. Есть библиотека pytho-valve. Первый же пример из её документации отлично отрабатывает с твоим сервером без лишних телодвижений.
import valve.source.a2s

SERVER_ADDRESS = ('195.62.53.149', 27015)

with valve.source.a2s.ServerQuerier(SERVER_ADDRESS) as server:
    info = server.info()
    players = server.players()

print("{player_count}/{max_players} {server_name}".format(**info))
for player in sorted(players["players"],
                     key=lambda p: p["score"], reverse=True):
    print("{score} {name}".format(**player))


> python udp_client.py 
4/20 Euro-Cs.Ru | Public | 1000FPS
39 1UP|mam?a
31 zakeman4
16 Cosmodesant
0 (А.У.Е.ШПАНА) хуй


Ссылка на документацию
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы