die "No file name" unless @ARGV; my @packets = (); my $short = 9999; while (<>) { push(@packets,$_); if (length($_)-1 < $short) { $short = length($_) -1; # Find shortest packet } } chop(@packets); my $maxlen =0; my $index = 0; my $curpack; my %all; foreach $curpack (@packets) { #Iterate over packets $maxlen = length($curpack); for (my $fsize = 2; $fsize <= $maxlen; $fsize ++) { #Check size 2..$maxlen substrings for (my $pnum = 0; $pnum < @packets; $pnum ++) { #Iterate over packets to check against for (0..($maxlen-$fsize+1)) { #Don't compare against self or shorter strings if (($index != $pnum) && ($fsize <= length($packets[$pnum]))) { my $str = substr($curpack,$_,$fsize); my @temparr = ($packets[$pnum] =~ /$str/g); my $nmatch = @temparr; if (defined($all{$str})) { $all{$str} += $nmatch; } else { #Remember to count self $all{$str} = $nmatch + 1; } undef @temparr; } } } } $index ++; print "Comparing packet ",$index," to all others:\n"; my $value; my @sort = sort {length($b) <=> length($a)} keys %all; foreach $value (@sort) { #Show only results in >1 packet if ($all{$value} > 1) { print "(",length($value),") $value: $all{$value} times\n"; } delete($all{$value}); } undef @sort; } exit;