2010-12-31 11 views
3

Lange Rede kurzer Sinn - ich bin Erfassung SQLs von Hersteller-Tool Oracle-Datenbank von Wireshark. Es hat bereits Decoder für TNS-Protokoll (was toll ist) und ich kann Text von SQL zugreifen, indemWie nur druckbare Text exportieren (oder einem anderen Paket-Eigenschaft) in wireshark

Right Click->Copy->Bytes(Printable Text Only). 

Das Problem ist, dass es Tonnen von Paketen und dabei auf jeden von ihnen einen Rechtsklick Alten nehmen könnten. Ich habe mich gefragt, ob es eine Möglichkeit gibt, 'Printable Text Only' direkt von Wireshark zu exportieren. Idealerweise möchte ich eine Textdatei mit Anweisungen haben.

Jede Hilfe wird sehr geschätzt.

Antwort

2

Ich weiß nicht, wie man es mit TNS macht. aber Sie können etwas mit tshark tun, um beispielsweise http-Anfragen zu sehen.

tshark -T fields -e http.request.uri

Also, wenn Sie auf die Optionen in der TNS-Decoder aussehen können, sollten Sie in der Lage sein, dieses Feld zu packen und die Ausgabe in eine Datei umleiten.

+0

Danke. Ich habe den Namen des Feldes herausgefunden. In der Ausgabe von tshark wird dies jedoch als Byte-Stream angezeigt, nicht als String. Wie könnte ich es in eine Zeichenfolge konvertieren? Ich habe das Handbuch von Tshark überprüft, aber es ist nicht offensichtlich für mich. –

+0

hmm, mit http bekommst du die Textausgabe. Sie können -T-Text versuchen, aber das wird nur Zusammenfassungen drucken. Ich bin mir nicht sicher, genau ... – Doon

+0

Danke trotzdem. Die Codierung von Bytestream zu String ist ein anderes Problem und 'tshark -T fields' ist genau das, was ich überhaupt wollte/ –

4

Endlich gefunden, um dies zu tun. Verwenden Sie zuerst tshark tns Pakete erfassen:

tshark -R tcp.port==1521 -T fields -e data.data -d tcp.port==1521,tns > input.txt 

Dann könnten Sie zu Hause brauen Ruby-Script verwenden unterhalb von Bytes, um Text zu transformieren:

file = ARGV[0] 
print_all = ARGV[1] 

File.open(file, "r").each {|line| 
    line.gsub(",", ":").split(':').each {|byte| 
    chr = Integer('0x' + byte).chr 
    print chr if ((' '..'~').include?(chr) or chr == "\n") or (print_all.downcase == 'all' if print_all) 
    } if !line.chomp.empty? 
} 

Beispiele sind:

encode.rb input.txt > output.txt 

wird exportieren druckbaren Text nur vom Eingang zum Ausgang

encode.rb input.txt all > output.txt 

wird den gesamten Text von Eingang zu Ausgang

+2

Wenn Sie 'File.open (file," r ")' in STDIN ändern, können Sie den Stream umleiten: 'tshark -R tcp.port == 1521 -T Felder -e data.data -d tcp.port == 1521, tns | encode.rb' –

3

exportieren Eine einfache Art, sie alle zu betrachten, die für mich gearbeitet hat, ist nur Right Click -> Follow TCP Stream.

Eine Anmerkung: nicht druckbare Zeichen werden als . s angezeigt. Wenn zwischen all dem Text, den Sie extrahieren möchten, ein paar davon verteilt sind (wie es für mich der Fall war), schalten Sie ihn auf ASCII, speichern Sie ihn und öffnen Sie ihn in Ihrem bevorzugten Texteditor (vim für mich), führen Sie dann eine Suche aus ersetzen Sie ähnlich wie /\.//g.