Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2009 07:17:32

Ryuga
От:
Зарегистрирован: 2009-01-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

Доброго времени суток.
Для самообразования задался вопросом написания простенькой утилитки для мониторинга состояния игрового сервера l4d в локальной сети.
Задача: Есть сервер. Адрес - 217.117.187.72:27027 Надо узнать колл-во игроков на нем.
Решение: разбил на 3 этапа:
1. Подключится к серверу.
2. Получить информацию.
3. Обработать и вывести в читабельном виде.
Собстно сразу же застрял на первом пункте, ибо абсолютно не представляю как его реализовать о_0
Была мысль через сокеты, что-то то по типу

import socket
host='217.117.187.72'
port=27027
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
но затея позорно провалилась, насколько я понял я указываю ип, а не хост…
Вопщем,если у кого-то есть идеи,или кто-то сталкивался с подобным, хотелось бы узнать в каком направлении копать))

з.ы. в моем представлении все выглядит примерно так - сканер подключается в серву,получает инфу(немаловероятно он должен какой-то запрос ему предъявить..когда к этому подойдет погуглю), передает в обработчик, там это дело разбирается и на выход выдается то что интересует.



Офлайн

#2 Янв. 19, 2009 09:06:03

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

Да все вроде правильно. Что не работает то? Ты волен и ip указывать :)



Офлайн

#3 Янв. 19, 2009 10:13:45

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

+ иногда можно узнать послав запрос бродкастом (типа как игра и ищет другие игры по сети), т.е. в этом случае необязательно подключаться к серверу.
в общем надо запустить сниффер и посмотреть что шлется, куда и как.



Офлайн

#4 Янв. 19, 2009 11:07:49

player
От:
Зарегистрирован: 2007-08-09
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

cybergrind
+ иногда можно узнать послав запрос бродкастом (типа как игра и ищет другие игры по сети), т.е. в этом случае необязательно подключаться к серверу.
в общем надо запустить сниффер и посмотреть что шлется, куда и как.
Как по мне план действий надо менять на следующий:
1. Погуглить игру и как к ней конектиться и как забирать инфу
2. Посмотреть снифером
а. Запустили снифер
б. Запустили игру и посмотрели количество игроков
в. Посмотрели в снифер что он там наловил (но я боюсь что там всё будем не понятно)
3. Начинаем писать что-то своё



Офлайн

#5 Янв. 19, 2009 11:08:16

Ryuga
От:
Зарегистрирован: 2009-01-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

igor.kaist
Да все вроде правильно. Что не работает то? Ты волен и ip указывать smile
пишет банальное:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
s.connect((host, port))
File "<string>", line 1, in connect
error: [Errno 10061] Подключение не установлено,
а вот почему не установлено хз. на виндовой машине когда пробую - фаервол сразу говорит,что скрипт коннектится, все ок. а потом вот такая ошибка вылазит.
2cybergrind
эм,ушел гуглить про бродкаст)



Офлайн

#6 Янв. 19, 2009 11:10:50

player
От:
Зарегистрирован: 2007-08-09
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
s.connect((host, port))
File "<string>", line 1, in connect
error: [Errno 10061] Подключение не установлено,
Кажись не слушает сервер на энтом порту

Запусти снифер и посмотри что и куда отсылается. По идее должен быть запрос TCP SYN (запрос на установления связи) и в ответ на него TCP RST (разрыв связи со стороны сервера)



Офлайн

#7 Янв. 19, 2009 11:36:23

Ryuga
От:
Зарегистрирован: 2009-01-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

player
Кажись не слушает сервер на энтом порту
Запусти снифер и посмотри что и куда отсылается. По идее должен быть запрос TCP SYN (запрос на установления связи) и в ответ на него TCP RST (разрыв связи со стороны сервера)
ничего подобного не обнаружил, однако выяснил:
игра конектится через UDP, а питон у меня через TCP
в итоге сделал вот так:
import socket
host='217.117.187.72'
Q='' #что то надо послать
port=27028
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Насколько я понял, теперь надо на место Q вставить заголовок запроса. У меня они есть в хекс виде со снифера, как бы правильно их вставить?
Вот что наслушал снифер, когда я запрашивал состояние сервера из игры.
(UDP)192.168.0.1:1473->217.117.187.72:27028 ,34 Bytes
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,48 Bytes
(UDP)192.168.0.1:1473->217.117.187.72:27028 ,53 Bytes
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,159 Bytes
(UDP)192.168.0.1:1473->217.117.187.72:27028 ,34 Bytes
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,37 Bytes
(UDP)192.168.0.1:1473->217.117.187.72:27028 ,37 Bytes
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,34 Bytes
Также есть сами пакеты,вида:
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,34 Bytes

45 00 00 22 16 5B 00 00 7B 11 D4 08 D9 75 BB 48 ; E.."[..{....u.H
C0 A8 00 01 69 94 05 C1 00 0E F7 14 FF FF FF FF ; ....i..........
и даже пакет с ответом есть):
(UDP)217.117.187.72:27028->192.168.0.1:1473 ,159 Bytes

45 00 00 9F 15 18 00 00 7B 11 D4 CE D9 75 BB 48 ; E.....{....u.H
C0 A8 00 01 69 94 05 C1 00 8B BC F1 FF FF FF FF ; ....i...........
49 25 4B 72 61 73 47 61 6D 65 73 20 4C 65 66 74 ; I%KrasGames Left
34 44 65 61 64 20 56 65 72 73 75 73 23 32 00 6C ; 4Dead Versus#2.l
34 64 5F 76 73 5F 73 6D 61 6C 6C 74 6F 77 6E 30 ; 4d_vs_smalltown0
35 5F 68 6F 75 73 65 62 6F 61 74 00 6C 65 66 74 ; 5_houseboat.left
34 64 65 61 64 00 4C 34 44 20 2D 20 56 65 72 73 ; 4dead.L4D - Vers
75 73 20 2D 20 4E 6F 72 6D 61 6C 00 F4 01 00 08 ; us - Normal.....
00 64 77 00 00 31 2E 30 2E 30 2E 35 00 A0 94 69 ; .dw..1.0.0.5...i



Отредактировано (Янв. 19, 2009 12:08:21)

Офлайн

#8 Янв. 19, 2009 12:55:15

Ryuga
От:
Зарегистрирован: 2009-01-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

вопщем, покапался в пакетах которые отсылает игра. В итоге взял их, и начал пересылать своим скриптом)) Все получилось)
Теперь надо как-то написать парсер для обработки полученной инфы, но это дело техники)



Офлайн

#9 Янв. 19, 2009 14:35:56

Ryuga
От:
Зарегистрирован: 2009-01-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

эксперементальным путем выяснил, что сервер и клиент обмениваются пакетами по какой-то не ясной системе) в итоге я настроил подсчет игроков для сервере 27028, но это не работает для сервера 27029)
да и с обработкой хекс пакетов не очень вышло) никто не подскажет какой-нить модуль для работы с ним?



Офлайн

#10 Янв. 19, 2009 14:53:17

Dimka665
От:
Зарегистрирован: 2008-09-19
Сообщения: 177
Репутация: +  0  -
Профиль   Отправить e-mail  

мониторинг игрового сервера

import struct



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version