Initial commit
This commit is contained in:
		
							
								
								
									
										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 | ||||||
		Reference in New Issue
	
	Block a user
	 Sebastian
					Sebastian