ManInTheMiddleAmongUs/proto.py
2020-10-11 05:00:10 +02:00

36 lines
736 B
Python

import enum
import binascii
import protoparser
class HazelPacketType(enum.IntEnum):
UNRELIABLE = (0,)
RELIABLE = (1,)
HELLO = (8,)
PING = (12,)
ACK = (10,)
FIN = (9,)
FRAGMENT = (11,) # not observed yet, maybe unused in among us?
def int_big_endian(data: bytes) -> int:
return int.from_bytes(data, "big")
Parser = protoparser.Parser()
Parser.register("Ping", HazelPacketType.PING, ("nonce", 2, int_big_endian))
Parser.register("Ack", HazelPacketType.ACK, ("nonce", 2, int_big_endian), 0xFF)
Parser.register("Fin", HazelPacketType.FIN)
Parser.register(
"Hello",
HazelPacketType.HELLO,
(None, 7, None),
("name_len", 1, int_big_endian),
("name", "name_len", bytes.decode),
)