Okay, ich antworte mir selber mal, da ich die Funktion build in der Doku nicht wirklich gefunden habe :rolleyes:
Das Struct wird bei build tatsächlich in einen Byte-String zusammengesetzt. Dabei werden auch Datentypen von z.B. int konvertiert.
So etwas, auch gleich mit der passenden parse Funktion um wieder eine Datenpaket in ein Struct zu überführen, ist mir in IPS nicht bekannt.
Jedoch ist der Grundsätzliche Aufbau nicht sehr komplex.
Um die Verschlüsselten Pakete (nach dem Seed) zu empfangen wird es wohl nicht reichen. Wobei ich auch nicht sehe, dass das python Script damit irgendwas macht
Verschlüsseln fehlt auch, habe ich mir nicht weiter angesehen.
So kannst du aber ein empfangenes Paket zerlegen:
/*Struct(
'length' / Const(b'\x1c\x00\x00\x00'),
'type' / Const(b'\x70\x63\x63\x6f'),
'version' / Const(b'\x00\x00\x02\x00'),
'dummy' / Padding(16),
)*/
$HelloRequest = "\x1c\x00\x00\x00\x70\x63\x63\x6f\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
// Das versenden
// Paketaufbau
// 4 Byte length
// 4 Byte Typ
// Rest ist Payload
//Payload bei
// Hello Request Typ = \x70\x63\x63\x6f
// Payload 0-3 = 4 Byte Version
// 16 nullbytes
// bei
// Hello Response
// Payload 0-3 = 4 Byte Version
// 4- 11 = 8 Bytes egal
// 12- 27 = 16 Bytes Seed
//Empfangenes Paket parsen, hier habe ich mit unserem Request nur das zerschneiden des Paketes geübt :)
$Packet = $HelloRequest;
$Len = unpack('V',substr($Packet,0,4));
$Type = substr($Packet,4,4);
$Payload = substr($Packet,8);
var_dump($Len);
var_dump($Type);
switch ($Type)
{
case "pcco": // oder "\x70\x63\x63\x6f" => Ist Hello Request
// War nur zum testen, weil wir ja unseren Request nicht verarbeiten wollen, sondern die Antwort
break;
case "?????": // Hello Response, leider nicht dokumentiert. Das pyhton Script prüft auch die Empfangen Daten gar nicht, es schneidet nur den Seed raus.
// Wenn das reicht, dann braucht man das hier alles nicht :)
$Seed = substr($Payload,12,16);
/*
def _recv_hello_request(self):
fmt = Struct(
'length' / Int32ul,
'type' / Int32ul,
'version' / Int32ul,
'dummy' / Bytes(8),
'seed' / Bytes(16),
)*/
break;
}
return;
Michael