Форум сайта python.su
Доброго времени суток.
Для самообразования задался вопросом написания простенькой утилитки для мониторинга состояния игрового сервера 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))
Офлайн
Да все вроде правильно. Что не работает то? Ты волен и ip указывать :)
Офлайн
+ иногда можно узнать послав запрос бродкастом (типа как игра и ищет другие игры по сети), т.е. в этом случае необязательно подключаться к серверу.
в общем надо запустить сниффер и посмотреть что шлется, куда и как.
Офлайн
cybergrindКак по мне план действий надо менять на следующий:
+ иногда можно узнать послав запрос бродкастом (типа как игра и ищет другие игры по сети), т.е. в этом случае необязательно подключаться к серверу.
в общем надо запустить сниффер и посмотреть что шлется, куда и как.
Офлайн
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] Подключение не установлено,
Офлайн
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] Подключение не установлено,
Офлайн
playerничего подобного не обнаружил, однако выяснил:
Кажись не слушает сервер на энтом порту
Запусти снифер и посмотри что и куда отсылается. По идее должен быть запрос TCP SYN (запрос на установления связи) и в ответ на него TCP RST (разрыв связи со стороны сервера)
import socket
host='217.117.187.72'
Q='' #что то надо послать
port=27028
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
(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)
Офлайн
вопщем, покапался в пакетах которые отсылает игра. В итоге взял их, и начал пересылать своим скриптом)) Все получилось)
Теперь надо как-то написать парсер для обработки полученной инфы, но это дело техники)
Офлайн
эксперементальным путем выяснил, что сервер и клиент обмениваются пакетами по какой-то не ясной системе) в итоге я настроил подсчет игроков для сервере 27028, но это не работает для сервера 27029)
да и с обработкой хекс пакетов не очень вышло) никто не подскажет какой-нить модуль для работы с ним?
Офлайн
import struct
Офлайн