usbmon2usbsnoop
Jump to navigation
Jump to search
This perl script converts output from usbmon to a format (usbsnoop's log format) that is compatible with usbreplay.
#!/usr/bin/perl sub print_bytes{ my($str) = @_; @str_1 = split(/ /, $str); foreach(@str_1){ if (length($_) == 8) { print substr($_, 0, 2) . " " . substr($_, 2, 2) . " " . substr($_, 4, 2) . " " . substr($_, 6, 2); }elsif(length($_) == 4) { print substr($_, 2, 2) . " " . substr($_, 0, 2); }elsif(length($_) == 2) { print $_; }elsif(length($_) == 1) { next; } print " "; } } $i = 0; while($line = <STDIN>) { $i++; if($line =~ m/\S+ \S+ \S+ \S+ \S+ (.+) \S+ </) { printf "%06d: OUT: %06d ms %06d ms ", $i, 1, $i; print_bytes($1); print "<<< "; $line = <STDIN>; $i++; if($line =~ m/\S+ \S+ \S+ \S+ [a-fA-F0-9 ]+ = ([a-fA-F0-9 ]+)/) { print_bytes($1); #print "\n"; #print " $1\n"; } print "\n"; }elsif($line =~ m/\S+ \S+ \S+ \S+ ([a-fA-F0-9 ]+) [a-fA-F0-9]+ = ([a-fA-F0-9 ]+)/) { printf "%06d: OUT: %06d ms %06d ms ", $i, 1, $i; print_bytes($1); print ">>> "; print_bytes($2); print "\n"; }elsif($line =~ m/\S+ \S+ \S+ \S+ s (.+)/) { printf "%06d: OUT: %06d ms %06d ms ", $i, 1, $i; print_bytes($1); print ">>>\n"; } }