Initial commit
This commit is contained in:
parent
860c1f2f8b
commit
2ac5aed8c6
22
README.md
22
README.md
@ -1,3 +1,21 @@
|
||||
# wifi-printer
|
||||
# Wi-Fi Printer
|
||||
|
||||
Thermal printer automatically prints addresses and vendors of Wi-Fi devices nearby.
|
||||
This project prints all SSIDs, MAC addresses, and their vendors on a thermal printer using a Wi-Fi adaptor in monitor mode.
|
||||
|
||||
|
||||
## Overview
|
||||
|
||||
|
||||
## Usage
|
||||
1. Setup a Raspberry Pi with Raspbian/Raspberry OS
|
||||
2. Connect to Internet
|
||||
3. Run ``install.sh``-Script
|
||||
4. Wait
|
||||
5. Set up for further usage, i.e.:
|
||||
* Remove Internet connectivity (not needed anymore)
|
||||
* Connect printer and Wi-Fi adaptor
|
||||
* Include everything into nice device :)
|
||||
|
||||
## Important
|
||||
* You might need to adapt the printer configuration in ``cms.py`` depending on the printer you use
|
||||
* You might need to change the name of the network adaptor in ``install.sh``
|
||||
|
128
cms.py
Normal file
128
cms.py
Normal file
@ -0,0 +1,128 @@
|
||||
# Chaos macht Schule
|
||||
# Wi-Fi Printer
|
||||
# Prints SSIDs, MAC addresses, and their vendors on a thermal printer.
|
||||
|
||||
import os, sys
|
||||
import pickle
|
||||
import collections
|
||||
import trackerjacker
|
||||
|
||||
from escpos import printer
|
||||
|
||||
|
||||
__config__ = {'trigger_cooldown': 10} # No need to call more than once for a single device
|
||||
REPORT_FILE = 'top_manufacturers.txt'
|
||||
|
||||
|
||||
class Trigger:
|
||||
def __init__(self):
|
||||
self.manufacturer_to_count = collections.Counter()
|
||||
self.devices_seen = set()
|
||||
self.packets_seen = 0
|
||||
self.ssids_seen = []
|
||||
|
||||
path = os.path.dirname(trackerjacker.__file__)
|
||||
|
||||
self.p = printer.Usb(0x0493, 0x8760, in_ep=0x81, out_ep=0x03)
|
||||
self.p.text("\n\n")
|
||||
self.p.image(path+"/plugins/cms.png")
|
||||
|
||||
self.p.text("Chaospott Essen\n")
|
||||
self.p.text("Wir sind da wat am hacken dran!\n")
|
||||
self.p.text("https://www.chaospott.de/\n")
|
||||
self.p.text("\n\n")
|
||||
|
||||
print("")
|
||||
print("")
|
||||
print("Chaos macht Schule")
|
||||
print("Chaospott Essen - Wir sind da wat am hacken dran")
|
||||
print("https://www.chaospott.de")
|
||||
print("")
|
||||
|
||||
|
||||
|
||||
# Called when new device is found
|
||||
def __call__(self, dev_id=None, vendor=None, ssid=None, bssid=None, iface=None, power=None, **kwargs):
|
||||
|
||||
# Store SSID in list if its not already in there
|
||||
if ssid not in self.ssids_seen:
|
||||
self.ssids_seen.append(ssid)
|
||||
|
||||
# Output on screen
|
||||
print('Neues Netzwerk: {}, Netzwerke insgesamt: {}\n\n'
|
||||
.format(ssid, len(self.ssids_seen)))
|
||||
|
||||
# Output on printer
|
||||
self.p.text('SSID: {},\nNetzwerke insgesamt: {}\n\n'
|
||||
.format(ssid, len(self.ssids_seen)))
|
||||
|
||||
|
||||
# Check if the device's new
|
||||
if vendor and dev_id not in self.devices_seen:
|
||||
self.devices_seen |= {dev_id}
|
||||
self.manufacturer_to_count[vendor] += 1
|
||||
|
||||
# Output on screen
|
||||
print('Neues Gerät: {}) von Hersteller: {};\n Anzahl Geräte von Hersteller {}: {}\n'
|
||||
.format(dev_id, vendor, vendor, self.manufacturer_to_count[vendor]))
|
||||
|
||||
# Output on printer
|
||||
self.p.text('Ger\20\204\04t: {}\nHersteller: {}\n\n'.format(dev_id, vendor))
|
||||
|
||||
|
||||
# Print each n packets a summary
|
||||
self.packets_seen += 1
|
||||
if self.packets_seen % 100 == 0:
|
||||
self.output_report()
|
||||
|
||||
|
||||
# Print report
|
||||
def output_report(self):
|
||||
|
||||
# Calculate results
|
||||
descending_order = sorted([(count, vendor) for vendor, count in self.manufacturer_to_count.items()], reverse=True)
|
||||
|
||||
total_ssid_count = len(self.ssids_seen)
|
||||
|
||||
total_device_count = 0
|
||||
for (count, vendor) in descending_order:
|
||||
total_device_count += count
|
||||
|
||||
|
||||
# Output to file for plot and further evaluation
|
||||
with open(REPORT_FILE, 'w') as f:
|
||||
for (count, vendor) in descending_order:
|
||||
f.write('{}: {}\n'.format(count, vendor))
|
||||
|
||||
|
||||
# Output on printer
|
||||
self.p.text("\n\n")
|
||||
self.p.text("############\n")
|
||||
self.p.text("# Ergebnis #\n")
|
||||
self.p.text("############\n\n")
|
||||
|
||||
self.p.text('Netzwerke gefunden: {}\n\n'
|
||||
.format(total_ssid_count))
|
||||
|
||||
self.p.text('Ger\20\204\04te gefunden: {}\n\n'
|
||||
.format(total_device_count))
|
||||
|
||||
for (count, vendor) in descending_order:
|
||||
self.p.text('{0:1}: {1}\n'.format(count, vendor))
|
||||
|
||||
self.p.text("\n\n\n")
|
||||
|
||||
|
||||
# Output to screen
|
||||
print('\n{}\n Ergebnis\n {}\n\n'.format('='*100, '='*100))
|
||||
|
||||
print('Netzwerke gefunden: {}\n\n'
|
||||
.format(total_ssid_count))
|
||||
|
||||
print('Geräte gefunden: {}\n\n'
|
||||
.format(total_device_count))
|
||||
|
||||
|
||||
for (count, vendor) in descending_order:
|
||||
print('{0:8}: {1}\n'.format(count, vendor))
|
||||
|
BIN
cms275.png
Normal file
BIN
cms275.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
BIN
cms300.png
Normal file
BIN
cms300.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
BIN
cms350.png
Normal file
BIN
cms350.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
45
install.sh
Normal file
45
install.sh
Normal file
@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
########################################################
|
||||
# Installation Script for CMS Plugin for Trackerjacker #
|
||||
########################################################
|
||||
|
||||
# Check if root
|
||||
if [ "$EUID" -ne 0 ]
|
||||
then echo "Please run as root"
|
||||
exit
|
||||
fi
|
||||
|
||||
|
||||
# Update OS
|
||||
apt-get update
|
||||
apt-get dist-upgrade --yes
|
||||
|
||||
# Install Python3 and additional stuff
|
||||
apt-get install python3-pip libopenjp2-7-dev python3-serial python3-pil --yes
|
||||
|
||||
# Remove old trackerjacker
|
||||
pip3 uninstall -y trackerjacker
|
||||
|
||||
# Fix bug in current ubuntu
|
||||
ln -s -f /usr/lib/arm-linux-gnueabihf/libc.a /usr/lib/arm-linux-gnueabihf/liblibc.a
|
||||
|
||||
# Get trackerjacker, add plugin and install it
|
||||
cd /tmp
|
||||
git clone https://github.com/calebmadrigal/trackerjacker.git
|
||||
|
||||
git clone https://git.chaospott.de/sirgoofy/wifi-printer.git
|
||||
cp wifi-printer/cms.py trackerjacker/trackerjacker/plugins
|
||||
cp wifi-printer/*.png trackerjacker/trackerjacker/plugins
|
||||
|
||||
pip3 install escpos
|
||||
|
||||
cd trackerjacker
|
||||
python3 setup.py install
|
||||
|
||||
|
||||
# Automatically start trackerjacker on startup
|
||||
cp wifi-printer/trackerjacker.sh /etc/rc.local/
|
||||
chmod +x /etc/rc.local/trackerjacker.sh
|
||||
|
||||
reboot
|
4
trackerjacker.sh
Normal file
4
trackerjacker.sh
Normal file
@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Run trackerjacker with cms plugin
|
||||
trackerjacker -i wlan1 --trigger-plugin cms --track
|
Loading…
Reference in New Issue
Block a user