User Tools

Site Tools


projects:wifi_scanner

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
projects:wifi_scanner [2019/11/30 13:15]
neil
projects:wifi_scanner [2020/01/06 23:53]
neil
Line 26: Line 26:
         usleep(200000);​         usleep(200000);​
         }         }
 +}
 +
 +?>
 +</​code>​
 +
 +===== Importing the data =====
 +The raw tcpdump logs are pretty large and full of redundant information - for around a month of wifi scanning it records around 128 million lines of data (18.6Gb).  ​
 +
 +I run the following code to simplify the logs to just pairs of the datetime (in YYYY-MM-DD HH:MM - I strip off the seconds) and the mac address (see below for the php code):
 +
 +<code bash>
 +php trim.php tcpdump.log > trimmed_tcpdump.log
 +</​code>​
 +
 +On my laptop, this processes the log files at around 300k lines/​second - so in around 8 minutes. ​ The resulting import file is reduced to approximately 3.8 million lines.
 +
 +I created a simple mysql table to store the timestamp and mac address:
 +<code sql>
 +create table wifi_data (seen_time datetime, mac varchar(17),​ unique (seen_time,​mac));​
 +</​code>​
 +
 +Then I import this directly to the mysql database using the mysql client:
 +<code sql>
 +load data infile '​trimmed_tcpdump.log'​ into table wifi_data;
 +</​code>​
 +
 +Once I imported all the data I added an index to the mac address column:
 +<code sql>
 +alter table simple_data add index idx_mac(mac);​
 +</​code>​
 +
 +If you have any trouble with this command, you might want to split the file into more managable parts using ''​split -l 1000000 trimmed_tcpdump.log''​
 +
 +==== trim.php ====
 +<code php>
 +#​!/​usr/​bin/​php
 +<?php
 +if(empty($argv[1])) {
 +    exit("​Missing filename\n"​);​
 +}
 +$filename = $argv[1];
 +$handle = fopen($filename,​ "​r"​);​
 +if ($handle) {
 +    while (($line = fgets($handle)) !== false) {
 +        $data = explode("​ ", $line);
 +        $datetime = date("​Y-m-d H:i", strtotime($data[0]."​ "​.substr($data[1],​0,​ 8)));
 +        $mac_addresses = preg_match_all("/​(([a-fA-F0-9]{2}[:​|\-]?​){6}) /", $line, $matches);
 +        if(is_array($matches[0])) {
 +            $macs = array_unique($matches[0]);​
 +            foreach($macs as $mac) {
 +                $mac = trim($mac);
 +                $rawdata[$datetime.$mac]['​datetime'​] = $datetime;
 +                $rawdata[$datetime.$mac]['​mac'​] = $mac;
 +            }
 +         }
 +    }
 +} else {
 +    exit("​Error opening file\n"​);​
 +}
 +
 +foreach($rawdata as $datetime=>​$val) {
 +    echo $val['​datetime'​]."​\t"​.$val['​mac'​]."​\n";​
 } }
  
projects/wifi_scanner.txt ยท Last modified: 2020/08/03 16:11 by admin