@lavrenkov-sketch

Как раскодировать строку байтов на python?

Изначально сокет отправляет питону
14:46:37:820 отправлено: 33 байт
 7e 41 01 00 00 00 00 00 10 1d 43 a1 5f 01 1d 43
 a1 5f 30 c4 55 01 f0 a8 fb 01 00 00 00 00 00 00 e4

~A  Size = 1
numPage = 0  Code = 4096  Time = 1604403997  StateGauge = 1  LastTime = 1604403997  Lat = 22398000  Lon = 33270000  Speed = 0  Course = 0

В сам питон приходит
b'~A\x01\x00\x00\x00\x00\x00\x10\x1dC\xa1_\x01\x1dC\xa1_0\xc4U\x01\xf0\xa8\xfb\x01\x00\x00\x00\x00\x00\x00\xe4'


Код питона:
spoiler
import socket
import re

# Задаем адрес сервера
SERVER_ADDRESS = ('localhost', 8686)

# Настраиваем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(SERVER_ADDRESS)
server_socket.listen(10)
print('server is running, please, press ctrl+c to stop')

# Слушаем запросы
# Особенности протокола
while True:
    connection, address = server_socket.accept()
    print("new connection from {address}".format(address=address))
# Соединение всегда инициализирует навигатор, через handshake  мы должны ему сразу ответить!
#	0x40, 0x4e, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x45, 0x5e,0x2a, 0x3c, 0x53,
#    connection.send(bytes('@NTC\x40\x4e\x54\x43\x00\x00\x00\x01\x00\x00\x00\x03\x00\x45\x5e*<S', encoding='UTF-8'))

#Согласование протокола  FLEX v1
#protocol answer
#0x40, 0x4e, 0x54, 0x43,0x00,0x00,0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0xb1, 0xa0, 0x2a, 0x3c, 0x46, 0x4c, 0x45, 0x58, 0xb0, 0x0a, 0x0a,
#    connection.send(bytes('x40\x4e\x54\x43\x00\x00\x00\x00\x00\x01\x00\x00\x00\x09\x00\xb1\xa0\x2a\x3c\x46\x4c\x45\x58\xb0\x0a\x0a', encoding='UTF-8'))
    
    while 1:
        data = connection.recv(8192)
        print(data)
        results = [
            dict(re.findall(r"(\d{4})([\d.]+)", string))
            for string in filter(
            bool,  # non-empty
            data.decode('ascii', 'ignore').split("&&"),
        )
        ]
        print(data.decode('ascii', 'ignore'))
        print(data.decode('cp866'))


В чём моя ошибка, или это какие-то не те байты?)
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
NeiroNx
@NeiroNx
Программист
Используйте struct.unpack() это лучший друг всех реверсинженеров.
a = b'\x7e\x41\x01\x00\x00\x00\x00\x00\x10\x1d\x43\xa1\x5f\x01\x1d\x43\xa1\x5f\x30\xc4\x55\x01\xf0\xa8\xfb\x01\x00\x00\x00\x00\x00\x00\xe4'
Size,numPage,Code,Time,StateGauge,LastTime,Lat,Lon,Speed,Course, = struct.unpack("<2xBIHIBIIIHH",a[:30])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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