--- wvsniff/wvsniff 2002/04/26 22:03:29 1.4 +++ wvsniff/wvsniff 2002/04/26 22:42:58 1.5 @@ -51,7 +51,7 @@ erase; - my $data = $GPS->data; + my $data = $GPS ? $GPS->data : {}; move 0, 0; addstr $frame++ . ": " . localtime($data->{time}) . " $data->{lat} $data->{long} $data->{alt}m"; @@ -160,11 +160,43 @@ $s; } +sub show_map { + my ($map, $w, $h) = @_; + + my @data = (("-" x $w) x $h); + + my ($x1, $y1, $x2, $y2) = (1e6, 1e6, 1e-6, 1e-6); + + while (my ($k, $v) = each %$map) { + my ($y, $x) = split /;/, $k; + $x1 = $x if $x1 > $x; + $x2 = $x if $x2 < $x; + $y1 = $y if $y1 > $y; + $y2 = $y if $y2 < $y; + } + + $x2 = ($w - 1) / (($x2 - $x1) || 1e-6); + $y2 = ($h - 1) / (($y2 - $y1) || 1e-6); + + while (my ($k, $v) = each %$map) { + my ($y, $x) = split /;/, $k; + + $y = ($y - $y1) * $y2; + $x = ($x - $x1) * $x2; + + substr $data[$y], $x, 1, "*"; + } + + for (@data) { + addstr $_ . "\n"; + } +} + sub display_bss { my $bss = shift; addstr "TS: $bss->{ts}\n"; - addstr "ARP/IP packets received: $bss->{arp}/$bss->{ip}\n"; + addstr "WEP/ARP/IP packets received: $bss->{wep}/$bss->{arp}/$bss->{ip}\n"; addstr "\naccess points\n"; @@ -182,6 +214,11 @@ } addstr "\n"; } + + if ($bss->{gps}) { + addstr "\nmap\n"; + show_map $bss->{gps}, 40, 20; + } } sub menu_bss_list { @@ -200,8 +237,11 @@ } sub activity { + if ($GPS) { + my $data = $GPS->data; + $db->{$_[0]}{gps}{"$data->{lat};$data->{long}"} = 1; + } $db->{$_[0]}->{ts} = time; - #print "activity ", e2h $_[0]; print "\n"; $refresh->start; } @@ -239,39 +279,43 @@ } elsif ($fc1 == 0x08) { my $bssid = ($a3, $a2, $a1)[$fc2 & 3]; - my ($llc, $et, $pkt) = unpack "a6 n a*", $pkt; - if ($llc eq "\xaa\xaa\x03\x00\x00\x00") { # SNAP/UI/ENCAP_ETHER - if ($et == 0x0800) { - my ($vhl, $tos, $len, $id, $off, $ttl, $prot, $sum, $src, $dst, $pkt) - = unpack "C C n n n C C n a4 a4 a*", $pkt; - if ($vhl & 0x40 == 0x40) { - $db->{$bssid}{ip}++; - reg_ip $bssid, $src, $a2; - reg_ip $bssid, $dst, $a1; - 0 && - printf "IP: %02x %02x %04x %04x: %s %s> %s %s %02x \n", - $fc1, $fc2, $sid, $sc, - (unpack "H*", $a2), (inet_ntoa $src), - (unpack "H*", $a1), (inet_ntoa $dst), - $prot; - } - } elsif ($et == 0x0806) { - my ($hrd, $pro, $hln, $pln, $op, $src_hw, $src, $dst_hw, $dst) - = unpack "n n C C n a6 a4 a6 a4", $pkt; - if ($hrd == 1 and $hln == 6 and $pln == 4) { - reg_ip $bssid, $src, $src_hw; - reg_ip $bssid, $dst, $dst_hw if $op != 1; - $db->{$bssid}{arp}++; - 0 && - printf "ARP: %04x> %s %s : %s %s\n", - $op, - (unpack "H*", $src_hw), (inet_ntoa $src), - (unpack "H*", $dst_hw), (inet_ntoa $dst); + if ($fc2 & 0x40) { + $db->{$bssid}{wep}++; + } else { + my ($llc, $et, $pkt) = unpack "a6 n a*", $pkt; + if ($llc eq "\xaa\xaa\x03\x00\x00\x00") { # SNAP/UI/ENCAP_ETHER + if ($et == 0x0800) { + my ($vhl, $tos, $len, $id, $off, $ttl, $prot, $sum, $src, $dst, $pkt) + = unpack "C C n n n C C n a4 a4 a*", $pkt; + if ($vhl & 0x40 == 0x40) { + $db->{$bssid}{ip}++; + reg_ip $bssid, $src, $a2; + reg_ip $bssid, $dst, $a1; + 0 && + printf "IP: %02x %02x %04x %04x: %s %s> %s %s %02x \n", + $fc1, $fc2, $sid, $sc, + (unpack "H*", $a2), (inet_ntoa $src), + (unpack "H*", $a1), (inet_ntoa $dst), + $prot; + } + } elsif ($et == 0x0806) { + my ($hrd, $pro, $hln, $pln, $op, $src_hw, $src, $dst_hw, $dst) + = unpack "n n C C n a6 a4 a6 a4", $pkt; + if ($hrd == 1 and $hln == 6 and $pln == 4) { + reg_ip $bssid, $src, $src_hw; + reg_ip $bssid, $dst, $dst_hw if $op != 1; + $db->{$bssid}{arp}++; + 0 && + printf "ARP: %04x> %s %s : %s %s\n", + $op, + (unpack "H*", $src_hw), (inet_ntoa $src), + (unpack "H*", $dst_hw), (inet_ntoa $dst); + } } + } else { + 0 && + printf "?? %02x %02x %04x %04x: %s.%s \n", $fc1, $fc2, $sid, $sc, (unpack "H*", $llc), unpack "H*", $pkt; } - } else { - 0 && - printf "?? %02x %02x %04x %04x: %s.%s \n", $fc1, $fc2, $sid, $sc, (unpack "H*", $llc), unpack "H*", $pkt; } } elsif ($fc1 != 0x40 and $fc1 != 0x10 and $fc1 != 0x00 and $fc1 != 0xb0) { 0 &&