I dont remember what I changed... sorry
This commit is contained in:
parent
3d1aa21bab
commit
3bdd78b61c
|
@ -11,9 +11,6 @@ def handle(client, data):
|
||||||
return b"\x19\x00"
|
return b"\x19\x00"
|
||||||
if client.state == 2:
|
if client.state == 2:
|
||||||
client.state = 3
|
client.state = 3
|
||||||
return b"\xe3\x00\x00"
|
|
||||||
if client.state == 3:
|
|
||||||
client.state = 4
|
|
||||||
return b"\xe3\x00\x00", b"\x00\x00\x42\x98\x0c\x11\x33\x45\x30\x42\x33\x33\x35\x32\x37\x34\x46\x39\x31\x43\x39\x39\x00"
|
return b"\xe3\x00\x00", b"\x00\x00\x42\x98\x0c\x11\x33\x45\x30\x42\x33\x33\x35\x32\x37\x34\x46\x39\x31\x43\x39\x39\x00"
|
||||||
|
|
||||||
return b"WUT?"
|
return b"WUT?"
|
|
@ -99,12 +99,12 @@ def get_online_players(): #TODO: Get data from server's client objects
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_rules(): #TODO
|
def get_rules(): #TODO
|
||||||
return {b"Rule name sample": b"Rule value"}
|
return {b"Rule name sample": b"Rule value", b"weburl": b"https://git.osufx.com/Sunpy/sampy"}
|
||||||
|
|
||||||
def get_players_scores(): #TODO
|
def get_players_scores(): #TODO
|
||||||
return {b"Sunpy": 64, b"username": 123}
|
return {b"Sunpy": 64, b"username": 123}
|
||||||
|
|
||||||
RESPONSE = { #TODO: c, d & p (https://wiki.sa-mp.com/wiki/Query_Mechanism)
|
RESPONSE = { #TODO?: p (https://wiki.sa-mp.com/wiki/Query_Mechanism) (We dont really need to do the last handler as it happens somewhat automatically)
|
||||||
b"i": query_i,
|
b"i": query_i,
|
||||||
b"r": query_r,
|
b"r": query_r,
|
||||||
b"c": query_c,
|
b"c": query_c,
|
||||||
|
|
31
notes.md
Normal file
31
notes.md
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
## Packet stuff
|
||||||
|
---
|
||||||
|
|
||||||
|
### Client to server
|
||||||
|
Name|Pattern|Ids|Description
|
||||||
|
---|---|---|---
|
||||||
|
Struct ID|a2 08 {id} 27|id = data id|Following packet is part of id
|
||||||
|
|
||||||
|
First packet|Amount of seperate packets sent|Total length before end|Bit length
|
||||||
|
---|---|---|---
|
||||||
|
a2 08 8a 27|2|52 (48)|104 (96)
|
||||||
|
a2 08 c4 27|3|45 (41)|90 (82)
|
||||||
|
|
||||||
|
### Server to client
|
||||||
|
Name|Pattern|Ids|Description
|
||||||
|
---|---|---|---
|
||||||
|
Struct ID|e3 {id} 00|id = data id|Following packet is part of id
|
||||||
|
|
||||||
|
First packet|Amount of seperate packets sent|Total length before end|Bit length
|
||||||
|
---|---|---|---
|
||||||
|
e3 00 00|2|26 (23)|52 (46)
|
||||||
|
e3 01 00|2|20 (17)|40 (34)
|
||||||
|
e3 07 00|1|3|6
|
||||||
|
e3 0a 00|2|130 (127)|260 (254)
|
||||||
|
e3 0b 00|2|11 (8)|22 (16)
|
||||||
|
e3 0c 00|2|15 (12)|30 (24)
|
||||||
|
|
||||||
|
### Random notices
|
||||||
|
- 27 seem to be used a lot
|
||||||
|
- Server to client `Struct ID` seem to be incremental
|
||||||
|
-
|
|
@ -1,13 +1,12 @@
|
||||||
from importlib import reload
|
from importlib import reload
|
||||||
|
|
||||||
import re
|
|
||||||
import socket
|
import socket
|
||||||
from handlers import serverPingHandler, mainHandler
|
from handlers import serverPingHandler, mainHandler
|
||||||
|
|
||||||
class Client:
|
class Client:
|
||||||
BUFF_SIZE = 65535
|
BUFF_SIZE = 65535
|
||||||
HANDLERS = {
|
HANDLERS = {
|
||||||
re.compile(b"SAMP"): serverPingHandler
|
b"SAMP": serverPingHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, server, addr):
|
def __init__(self, server, addr):
|
||||||
|
@ -19,7 +18,7 @@ class Client:
|
||||||
def handle_data(self, data):
|
def handle_data(self, data):
|
||||||
found = False
|
found = False
|
||||||
for pattern, handler in self.HANDLERS.items():
|
for pattern, handler in self.HANDLERS.items():
|
||||||
if pattern.match(data):
|
if data.startswith(pattern):
|
||||||
queue = handler.handle(self, data)
|
queue = handler.handle(self, data)
|
||||||
if queue:
|
if queue:
|
||||||
self.write_to_buffer(queue)
|
self.write_to_buffer(queue)
|
||||||
|
|
27
proxy.py
27
proxy.py
|
@ -4,6 +4,9 @@ import socket
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import select
|
import select
|
||||||
|
|
||||||
|
def format_hex(hex_str):
|
||||||
|
return " ".join([hex_str[i:i+2] for i in range(0, len(hex_str), 2)])
|
||||||
|
|
||||||
class Proxy(Thread):
|
class Proxy(Thread):
|
||||||
BUFF_SIZE = 65535
|
BUFF_SIZE = 65535
|
||||||
|
|
||||||
|
@ -48,14 +51,14 @@ class Proxy(Thread):
|
||||||
c_data = b"\x08\x1e\x77\xda"
|
c_data = b"\x08\x1e\x77\xda"
|
||||||
"""
|
"""
|
||||||
print("[C] -> {}".format(c_data))
|
print("[C] -> {}".format(c_data))
|
||||||
with open("logs/{}-client-raw.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-client-raw.log".format(LISTEN[1]), "ab") as f:
|
||||||
f.write("({}) {} \r\n".format(self.prnt_id_client, c_data))
|
f.write("({}) ".format(self.prnt_id_client).encode() + c_data + b"\r\n")
|
||||||
with open("logs/{}-client-hex.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-client-hex.log".format(LISTEN[1]), "a") as f:
|
||||||
f.write("({}) {} \r\n".format(self.prnt_id_client, c_data.hex()))
|
f.write("({}) {} \r\n".format(self.prnt_id_client, format_hex(c_data.hex())))
|
||||||
with open("logs/{}-all-raw.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-all-raw.log".format(LISTEN[1]), "ab") as f:
|
||||||
f.write("[C] -> ({}) {} \r\n".format(self.prnt_id_client, c_data))
|
f.write("[C] -> ({}) ".format(self.prnt_id_client).encode() + c_data + b"\r\n")
|
||||||
with open("logs/{}-all-hex.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-all-hex.log".format(LISTEN[1]), "a") as f:
|
||||||
f.write("[C] -> ({}) {} \r\n".format(self.prnt_id_client, c_data.hex()))
|
f.write("[C] -> ({}) {} \r\n".format(self.prnt_id_client, format_hex(c_data.hex())))
|
||||||
target.sendto(c_data, self.target)
|
target.sendto(c_data, self.target)
|
||||||
self.prnt_id_client += 1
|
self.prnt_id_client += 1
|
||||||
|
|
||||||
|
@ -66,14 +69,14 @@ class Proxy(Thread):
|
||||||
#print("[S] data:{}".format(s_data))
|
#print("[S] data:{}".format(s_data))
|
||||||
if s_data:
|
if s_data:
|
||||||
print("[C] <- {}".format(s_data))
|
print("[C] <- {}".format(s_data))
|
||||||
with open("logs/{}-server-raw.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-server-raw.log".format(LISTEN[1]), "ab") as f:
|
||||||
f.write("({}) {} \r\n".format(self.prnt_id_server, s_data))
|
f.write("({}) ".format(self.prnt_id_server).encode() + s_data + b"\r\n")
|
||||||
with open("logs/{}-server-hex.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-server-hex.log".format(LISTEN[1]), "a") as f:
|
||||||
f.write("({}) {} \r\n".format(self.prnt_id_server, s_data.hex()))
|
f.write("({}) {} \r\n".format(self.prnt_id_server, format_hex(s_data.hex())))
|
||||||
with open("logs/{}-all-raw.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-all-raw.log".format(LISTEN[1]), "ab") as f:
|
||||||
f.write("[C] <- ({}) {} \r\n".format(self.prnt_id_server, s_data))
|
f.write("[C] <- ({}) ".format(self.prnt_id_server).encode() + s_data + b"\r\n")
|
||||||
with open("logs/{}-all-hex.log".format(LISTEN[1]), "a") as f:
|
with open("logs/{}-all-hex.log".format(LISTEN[1]), "a") as f:
|
||||||
f.write("[C] <- ({}) {} \r\n".format(self.prnt_id_server, s_data.hex()))
|
f.write("[C] <- ({}) {} \r\n".format(self.prnt_id_server, format_hex(s_data.hex())))
|
||||||
client.sendto(s_data, c_addr)
|
client.sendto(s_data, c_addr)
|
||||||
self.prnt_id_server += 1
|
self.prnt_id_server += 1
|
||||||
client.close()
|
client.close()
|
||||||
|
|
Reference in New Issue
Block a user