2016-04-29 8 views
1

Ich versuche benutzerdefinierte Dissector für Wireshark, die Byte/hex-Ausgabe in ASCII-Zeichenfolge ändern wird schreiben.Umwandlung der Sequenz von Bytes in ASCII-Zeichenfolge in lua

Ich konnte den Körper dieses Dissektors schreiben und es funktioniert. Mein einziges Problem ist die Umwandlung dieser Daten in ASCII-Zeichenfolgen.

Wireshark deklariert diese Daten als Bytefolge. Zu Lua ist der Datentyp userdata (getestet mit type(data)). Wenn ich es einfach in Zeichenfolge mit tostring(data) konvertieren, gibt mein Dissektor 24:50:48 zurück, die die genaue hexadezimale Darstellung von Bytes in einem Array ist.

Gibt es eine Möglichkeit, diese Bytefolge direkt in ASCII zu konvertieren, oder können Sie mir helfen, diese Doppelpunkt getrennte Zeichenfolge in ASCII-Zeichenfolge zu konvertieren? Ich bin völlig neu in Lua. Ich habe so etwas wie split(tostring(data),":") versucht, aber diese gibt Lua Error: attempt to call global 'split' (a nil value)


Mit Jakuje Antwort ich in der Lage war, so etwas zu schaffen:

function isempty(s) 
    return s == nil or s == '' 
end 
data = "24:50:48:49:4A" 
s = "" 
for i in string.gmatch(data, "[^:]*") do 
    if not isempty(i) then 
     print(string.char(tonumber(i,16))) 
     s = s .. string.char(tonumber(i,16)) 
    end 
end 
print(s) 

Ich bin nicht sicher, ob diese wirksam ist, aber zumindest funktioniert;)

Antwort

2

Es gibt keine solche Funktion wie split in Lua (Beratung Referenzhandbuch ist ein guter Start). Sie sollten wahrscheinlich string.gmatch Funktion verwenden, wie auf wiki beschrieben:

data = "24:50:48" 
for i in string.gmatch(data, "[^:]*") do 
    print(i) 
end 

(live example)

Weitere Sie string.char Funktion suchen Bytes char ascii zu konvertieren.

+0

Ich sah jemanden mit Split auf die gleiche Weise, also habe ich es auch versucht. Später habe ich auch herausgefunden, dass es in Lua keine Trennung gibt :(Ich werde versuchen, deinen Weg zu gehen. Zuerst muss ich leere Einträge von string.gmatch überspringen. –

+0

hat funktioniert, danke;) –

+0

Irgendein Grund für den Downvote , tapferer Ranger? – Jakuje

2

Sie müssen in den Pufferbereich von Bytes markieren, die Sie interessiert sind und wandeln es in der Art Sie wollen:

data:range(offset, length):string() 
-- or just call it, which works the same thanks to __call metamethod 
data(offset, length):string() 

Siehe TvbRange Beschreibung in https://wiki.wireshark.org/LuaAPI/Tvb für die vollständige Liste der verfügbaren Methoden der Verarbeitung Puffer Reichweiten von Daten zu verschiedenen Typen.