initial commit
[soho-sigint.git] / client-wifi / kismet.pl
1 #!/usr/bin/perl
2
3 use Net::Kismet;
4 use DBI;
5
6 my $dbh = DBI->connect("DBI:mysql:database=wireless;host=127.0.0.1",
7                          "USERNAME", "PASSWORD",
8                          {'RaiseError' => 1});
9
10 $k = new Net::Kismet('localhost', 2501);
11 $k->register('SSID', \&ssidhandler, '*');
12 $k->register('BSSID', \&bssidhandler, '*');
13 $k->register('CLIENT', \&clienthandler, '*');
14 #$k->timer_register(\&timer, 5);
15 KismetRun($k);
16
17
18 sub ssidhandler {
19    my $vars = shift;
20    my $ssid = "<cloked>";
21    if ($vars->{'ssid'} eq "") { 
22      $ssid = "<CLOKED>";
23    } else {
24      $ssid = $vars->{'ssid'};
25    }
26    #print $vars->{'mac'}."\n";
27    #print "lt: ".$vars->{'lasttime'}."\n";
28    #print "INSERT INTO ssid VALUES ('". $ssid. "', '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")";
29    #print "\n";
30    my $sth = $dbh->prepare("SELECT LASTSEEN from ssid where SSID=? and MAC='" . $vars->{'mac'} . "'");
31    $sth->execute($ssid);
32    if ($sth->rows() > 0) {
33      $sth = $dbh->prepare("UPDATE ssid set LASTSEEN=" . $vars->{'lasttime'} . " where SSID=? and MAC = '" . $vars->{'mac'} . "'");
34    } else {
35      $sth = $dbh->prepare("INSERT INTO ssid VALUES (?, '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")");
36    }
37    $sth->execute($ssid);
38 }
39
40 sub bssidhandler {
41    my $vars = shift;
42    #print $vars->{'bssid'}."\n";
43    #print "lt: ".$vars->{'lasttime'}."\n";
44    #print "INSERT INTO bssid VALUES ('". $vars->{'bssid'}. "', " . $vars->{'lasttime'} . ")";
45    my $sth = $dbh->prepare("SELECT LASTSEEN from bssid where BSSID='" . $vars->{'bssid'} . "'");
46    $sth->execute();
47    if ($sth->rows() > 0) {
48      $dbh->do("UPDATE bssid set LASTSEEN=" . $vars->{'lasttime'} . " where BSSID = '" . $vars->{'bssid'} . "'");
49    } else {
50      $dbh->do("INSERT INTO bssid VALUES ('". $vars->{'bssid'}. "', " . $vars->{'lasttime'} . ")");
51    }
52    #$dbh->do("INSERT INTO bssid VALUES ('". $vars->{'bssid'}. "', " . $vars->{'lasttime'} . ")");
53 }
54
55 sub clienthandler {
56    my $vars = shift;
57    #print $vars->{'bssid'}."\n";
58    #print $vars->{'mac'}."\n";
59    #print "lt: ".$vars->{'lasttime'}."\n";
60    my $sth = $dbh->prepare("SELECT LASTSEEN from clients where BSSID='". $vars->{'bssid'}. "' and MAC='" . $vars->{'mac'} . "'");
61    $sth->execute();
62    if ($sth->rows() > 0) {
63      $dbh->do("UPDATE clients set LASTSEEN=" . $vars->{'lasttime'} . " where BSSID = '". $vars->{'bssid'}. "' and MAC = '" . $vars->{'mac'} . "'");
64    } else {
65      $dbh->do("INSERT INTO clients VALUES ('". $vars->{'bssid'}. "', '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")");
66      #$dbh->do("INSERT INTO clients VALUES ('". $ssid. "', '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")");
67    }
68
69    #print "INSERT INTO clients VALUES ('". $vars->{'bssid'}. "', '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")";
70    #print "\n";
71    #$dbh->do("INSERT INTO clients VALUES ('". $vars->{'bssid'}. "', '" . $vars->{'mac'} . "', " . $vars->{'lasttime'} . ")");
72 }
73
74
75
76 sub timer {
77    print "<<TIMER CALLBACK CALLED>>\n";
78         # check for lame threads and kill if hung
79         my $rin = "";
80         vec ( $rin, fileno ("PREAD00"), 1 ) = 1;
81         #while (1) {
82                 if ( $nfound = select($rout=$rin, undef, undef, 0) ) {
83                         $line = <PREAD00>;
84                         #print "TIMER: $line";
85                 }
86         #}
87 }
88
89 sub print_hash {
90     my $href = shift;
91     while( my( $key, $val ) = each %{$href} ) {
92         print "$key\t=>$val\n";
93     }
94 }