77from threading import Thread
88from time import sleep
99
10- from scapy .layers .dot11 import Dot11 , Dot11Beacon , Dot11ProbeResp , Dot11Elt , sniff
10+ from scapy .layers .dot11 import Dot11 , Dot11Beacon , Dot11ProbeResp , Dot11ProbeReq , Dot11Elt , sniff
1111
1212
1313def keyboard_interrupt_handler (interrupt_signal , frame ):
@@ -19,7 +19,7 @@ def keyboard_interrupt_handler(interrupt_signal, frame):
1919 exit (1 )
2020
2121
22- def evaluate_sniffing_packet (packet ):
22+ def evaluate_sniffing_packet_ap (packet ):
2323 """
2424 Evaluate wifi packet's and print to terminal
2525
@@ -53,6 +53,19 @@ def evaluate_sniffing_packet(packet):
5353 print ("{:<24} {:<35} {:<5} {:<7} {}" .format (bssid , ssid , dbm , channel , enc ))
5454
5555
56+ def evaluate_sniffing_packet_sta (packet ):
57+
58+ if packet .haslayer (Dot11ProbeReq ) and packet .haslayer (Dot11Elt ):
59+ if packet .type == 0 and packet .subtype == 4 :
60+ mac = packet .addr2
61+ ssid = packet [Dot11Elt ].info .decode ().strip ()
62+
63+ if not ssid :
64+ ssid = "N/A"
65+
66+ print ("STA {} looking for {}" .format (mac , ssid ))
67+
68+
5669def set_specific_channel (channel_number ):
5770 """
5871 Set specific wifi channel
@@ -86,13 +99,15 @@ def run_app():
8699 Main function to parse arguments and run
87100 """
88101 global interface
102+ global filter_results
89103
90104 description = 'Simple Wifi scanner for 2.4 GHz range'
91105 epilog = 'The author of this code take no responsibility for your use or misuse'
92106 parser = argparse .ArgumentParser (prog = 'ScanWifi.py' , description = description , epilog = epilog )
93- parser .add_argument ("interface" , help = " Your interface in monitor mode" )
107+ parser .add_argument ("interface" , help = ' Your interface in monitor mode' )
94108 parser .add_argument ('-c' , '--channel' , help = 'Channel number for 2.4 GHz range (min 1/max 14)' , default = 1 , type = int )
95109 parser .add_argument ('--all' , help = 'Scan on all channels for 2.4 GHz range' , default = False , action = 'store_true' )
110+ parser .add_argument ('--filter' , help = 'Filter results only for STA (Probe Req)' , default = False , action = 'store_true' )
96111 args = parser .parse_args ()
97112
98113 if len (args .interface ) < 1 :
@@ -113,13 +128,17 @@ def run_app():
113128 channel_changer .daemon = True
114129 channel_changer .start ()
115130
116- print ("-" * 85 )
117- print ("{:<24} {:<35} {:<5} {:<7} {}" .format ("BSSID" , "SSID" , "dbm" , "CH" , "ENC" ))
118- print ("-" * 85 )
119- sniff (prn = evaluate_sniffing_packet , iface = interface )
131+ if args .filter :
132+ print ("-" * 85 )
133+ sniff (prn = evaluate_sniffing_packet_sta , iface = interface )
134+ else :
135+ print ("-" * 85 )
136+ print ("{:<24} {:<35} {:<5} {:<7} {}" .format ("BSSID" , "SSID" , "dbm" , "CH" , "ENC" ))
137+ print ("-" * 85 )
138+ sniff (prn = evaluate_sniffing_packet_ap , iface = interface )
120139
121140
122141if __name__ == "__main__" :
123- interface = None
142+ interface = filter_results = None
124143 signal .signal (signal .SIGINT , keyboard_interrupt_handler )
125144 run_app ()
0 commit comments