usbmon2usbsnoop

From LinuxTVWiki
Revision as of 23:10, 21 December 2008 by CityK (talk | contribs) (set category and lowercase)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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";
	}
}