This commit is contained in:
David Schütz 2017-01-21 16:31:25 +01:00 committed by GitHub
parent c23b7853f8
commit 8a440ea3f3

View File

@ -11,12 +11,15 @@ See License at nikolaskama.me (https://nikolaskama.me/kickthemoutproject)
import time, os, sys, logging, math import time, os, sys, logging, math
from time import sleep from time import sleep
import urllib2 as urllib import urllib2 as urllib
BLUE, RED, WHITE, YELLOW, MAGENTA, GREEN, END = '\33[94m', '\033[91m', '\33[97m', '\33[93m', '\033[1;35m', '\033[1;32m', '\033[0m' BLUE, RED, WHITE, YELLOW, MAGENTA, GREEN, END = '\33[94m', '\033[91m', '\33[97m', '\33[93m', '\033[1;35m', '\033[1;32m', '\033[0m'
notRoot = False notRoot = False
try: try:
if os.geteuid() != 0: if os.geteuid() != 0:
print("\n{0}ERROR: KickThemOut must run as root. Try again with sudo/root:\n\t{1}$ sudo python kickthemout.py{2}\n").format(RED, GREEN, END) print(
"\n{0}ERROR: KickThemOut must run as root. Try again with sudo/root:\n\t{1}$ sudo python kickthemout.py{2}\n").format(
RED, GREEN, END)
notRoot = True notRoot = True
except: except:
# User is probably on windows # User is probably on windows
@ -29,10 +32,15 @@ try:
from scapy.all import * from scapy.all import *
import scan, spoof import scan, spoof
except: except:
print("\n{0}ERROR: Requirements have not been properly satisfied. Please try running:\n\t{1}$ sudo pip install -r requirements.txt{2}").format(RED, GREEN, END) print(
print("\n{0}If you still get the same error, please submit an issue here:\n\t{1}https://github.com/k4m4/kickthemout/issues\n{2}").format(RED, BLUE, END) "\n{0}ERROR: Requirements have not been properly satisfied. Please try running:\n\t{1}$ sudo pip install -r requirements.txt{2}").format(
RED, GREEN, END)
print(
"\n{0}If you still get the same error, please submit an issue here:\n\t{1}https://github.com/k4m4/kickthemout/issues\n{2}").format(
RED, BLUE, END)
raise SystemExit raise SystemExit
def heading(): def heading():
sys.stdout.write(GREEN + """ sys.stdout.write(GREEN + """
@ -42,11 +50,13 @@ def heading():
""" + END + BLUE + """ + END + BLUE +
'\n' + '{0}Kick Devices Off Your LAN ({1}KickThemOut{2}){3}'.format(YELLOW, RED, YELLOW, BLUE).center(98) + '\n' + '{0}Kick Devices Off Your LAN ({1}KickThemOut{2}){3}'.format(YELLOW, RED, YELLOW,
BLUE).center(98) +
'\n' + 'Made With <3 by: {0}Nikolaos Kamarinakis ({1}k4m4{2}) & {0}David Schütz ({1}xdavidhu{2}){3}'.format( '\n' + 'Made With <3 by: {0}Nikolaos Kamarinakis ({1}k4m4{2}) & {0}David Schütz ({1}xdavidhu{2}){3}'.format(
YELLOW, RED, YELLOW, BLUE).center(111) + YELLOW, RED, YELLOW, BLUE).center(111) +
'\n' + 'Version: {0}0.1{1}\n'.format(YELLOW, END).center(86)) '\n' + 'Version: {0}0.1{1}\n'.format(YELLOW, END).center(86))
def optionBanner(): def optionBanner():
print('\nChoose option from menu:\n') print('\nChoose option from menu:\n')
sleep(0.2) sleep(0.2)
@ -58,6 +68,7 @@ def optionBanner():
sleep(0.2) sleep(0.2)
print('\n\t{0}[{1}E{2}]{3} Exit KickThemOut\n').format(YELLOW, RED, YELLOW, WHITE) print('\n\t{0}[{1}E{2}]{3} Exit KickThemOut\n').format(YELLOW, RED, YELLOW, WHITE)
def regenOnlineIPs(): def regenOnlineIPs():
global onlineIPs global onlineIPs
global defaultGatewayMac global defaultGatewayMac
@ -67,11 +78,13 @@ def regenOnlineIPs():
if host[0] == defaultGatewayIP: if host[0] == defaultGatewayIP:
defaultGatewayMac = host[1] defaultGatewayMac = host[1]
def scanNetwork(): def scanNetwork():
global hostsList global hostsList
hostsList = scan.scanNetwork() hostsList = scan.scanNetwork()
regenOnlineIPs() regenOnlineIPs()
def kickoneoff(): def kickoneoff():
os.system("clear||cls") os.system("clear||cls")
@ -85,7 +98,8 @@ def kickoneoff():
if host[0] == onlineIPs[i]: if host[0] == onlineIPs[i]:
mac = host[1] mac = host[1]
vendor = resolveMac(mac) vendor = resolveMac(mac)
print(" [{0}" + str(i) + "{1}] {2}" + str(onlineIPs[i]) + "{3}\t"+ vendor + "{4}").format(YELLOW, WHITE, RED, GREEN, END) print(" [{0}" + str(i) + "{1}] {2}" + str(onlineIPs[i]) + "{3}\t" + vendor + "{4}").format(YELLOW, WHITE, RED,
GREEN, END)
canBreak = False canBreak = False
while not canBreak: while not canBreak:
@ -136,7 +150,8 @@ def kicksomeoff():
if host[0] == onlineIPs[i]: if host[0] == onlineIPs[i]:
mac = host[1] mac = host[1]
vendor = resolveMac(mac) vendor = resolveMac(mac)
print(" [{0}" + str(i) + "{1}] {2}" + str(onlineIPs[i]) + "{3}\t" + vendor + "{4}").format(YELLOW, WHITE, RED, GREEN, END) print(" [{0}" + str(i) + "{1}] {2}" + str(onlineIPs[i]) + "{3}\t" + vendor + "{4}").format(YELLOW, WHITE, RED,
GREEN, END)
canBreak = False canBreak = False
while not canBreak: while not canBreak:
@ -185,6 +200,7 @@ def kicksomeoff():
time.sleep(0.5) time.sleep(0.5)
print("{0}Re-arped{1} targets successfully.{2}").format(RED, GREEN, END) print("{0}Re-arped{1} targets successfully.{2}").format(RED, GREEN, END)
def kickalloff(): def kickalloff():
os.system("clear||cls") os.system("clear||cls")
@ -223,11 +239,13 @@ def kickalloff():
time.sleep(0.5) time.sleep(0.5)
print("{0}Re-arped{1} targets successfully.{2}").format(RED, GREEN, END) print("{0}Re-arped{1} targets successfully.{2}").format(RED, GREEN, END)
def getDefaultInterface(): def getDefaultInterface():
def long2net(arg): def long2net(arg):
if (arg <= 0 or arg >= 0xFFFFFFFF): if (arg <= 0 or arg >= 0xFFFFFFFF):
raise ValueError("illegal netmask value", hex(arg)) raise ValueError("illegal netmask value", hex(arg))
return 32 - int(round(math.log(0xFFFFFFFF - arg, 2))) return 32 - int(round(math.log(0xFFFFFFFF - arg, 2)))
def to_CIDR_notation(bytes_network, bytes_netmask): def to_CIDR_notation(bytes_network, bytes_netmask):
network = scapy.utils.ltoa(bytes_network) network = scapy.utils.ltoa(bytes_network)
netmask = long2net(bytes_netmask) netmask = long2net(bytes_netmask)
@ -235,6 +253,7 @@ def getDefaultInterface():
if netmask < 16: if netmask < 16:
return None return None
return net return net
for network, netmask, _, interface, address in scapy.config.conf.route.routes: for network, netmask, _, interface, address in scapy.config.conf.route.routes:
if network == 0 or interface == 'lo' or address == '127.0.0.1' or address == '0.0.0.0': if network == 0 or interface == 'lo' or address == '127.0.0.1' or address == '0.0.0.0':
continue continue
@ -246,6 +265,7 @@ def getDefaultInterface():
if net: if net:
return interface return interface
def getGatewayIP(): def getGatewayIP():
try: try:
getGateway_p = sr1(IP(dst="google.com", ttl=0) / ICMP() / "XXXXXXXXXXX", verbose=False) getGateway_p = sr1(IP(dst="google.com", ttl=0) / ICMP() / "XXXXXXXXXXX", verbose=False)
@ -256,16 +276,20 @@ def getGatewayIP():
gatewayIP = raw_input(header) gatewayIP = raw_input(header)
return gatewayIP return gatewayIP
def getDefaultInterfaceMAC(): def getDefaultInterfaceMAC():
try: try:
defaultInterfaceMac = get_if_hwaddr(defaultInterface) defaultInterfaceMac = get_if_hwaddr(defaultInterface)
return defaultInterfaceMac return defaultInterfaceMac
except: except:
print("\n{0}ERROR: Default Interface MAC Address could not be obtained. Please enter MAC manually.{1}\n").format(RED, END) print(
"\n{0}ERROR: Default Interface MAC Address could not be obtained. Please enter MAC manually.{1}\n").format(
RED, END)
header = ('{0}kickthemout{1}> {2}Enter MAC Address {3}(MM:MM:MM:SS:SS:SS): '.format(BLUE, WHITE, RED, END)) header = ('{0}kickthemout{1}> {2}Enter MAC Address {3}(MM:MM:MM:SS:SS:SS): '.format(BLUE, WHITE, RED, END))
defaultInterfaceMac = raw_input(header) defaultInterfaceMac = raw_input(header)
return defaultInterfaceMac return defaultInterfaceMac
def resolveMac(mac): def resolveMac(mac):
try: try:
url = "http://macvendors.co/api/vendorname/" url = "http://macvendors.co/api/vendorname/"
@ -278,19 +302,22 @@ def resolveMac(mac):
except: except:
return "N/A" return "N/A"
def main():
def main():
heading() heading()
print( print(
"\n{0}Using interface '{1}" + defaultInterface + "{2}' with mac address '{3}" + defaultInterfaceMac + "{4}'.\nGateway IP: '{5}" "\n{0}Using interface '{1}" + defaultInterface + "{2}' with mac address '{3}" + defaultInterfaceMac + "{4}'.\nGateway IP: '{5}"
+ defaultGatewayIP + "{6}' --> {7}" + str(len(hostsList)) + "{8} hosts are up.{9}").format(GREEN, RED, GREEN, RED, GREEN, + defaultGatewayIP + "{6}' --> {7}" + str(len(hostsList)) + "{8} hosts are up.{9}").format(GREEN, RED, GREEN,
RED, GREEN, RED, GREEN, END) RED, GREEN,
RED, GREEN, RED,
GREEN, END)
if len(hostsList) == 0 or len(hostsList) == 1: if len(hostsList) == 0 or len(hostsList) == 1:
if len(hostsList) == 1: if len(hostsList) == 1:
if hostsList[0][0] == defaultGatewayIP: if hostsList[0][0] == defaultGatewayIP:
print("\n{0}{1}WARNING: There are {2}0{3} hosts up on you network except your gateway.\n\tYou can't kick anyone off {4}:/{5}\n").format( print(
"\n{0}{1}WARNING: There are {2}0{3} hosts up on you network except your gateway.\n\tYou can't kick anyone off {4}:/{5}\n").format(
GREEN, RED, GREEN, RED, GREEN, END) GREEN, RED, GREEN, RED, GREEN, END)
raise SystemExit raise SystemExit
else: else:
@ -330,8 +357,8 @@ def main():
print('\n\n{0}Thanks for dropping by.' print('\n\n{0}Thanks for dropping by.'
'\nCatch ya later!{1}').format(GREEN, END) '\nCatch ya later!{1}').format(GREEN, END)
if __name__ == '__main__':
if __name__ == '__main__':
defaultInterface = getDefaultInterface() defaultInterface = getDefaultInterface()
defaultGatewayIP = getGatewayIP() defaultGatewayIP = getGatewayIP()
defaultInterfaceMac = getDefaultInterfaceMAC() defaultInterfaceMac = getDefaultInterfaceMAC()