基于Linux的Python实现ARP检测防护软件 - 防范ARP攻击,保护网络安全

本文介绍使用Python在Linux系统上实现一个ARP检测防护软件。该软件能够扫描局域网内活动主机,检测ARP攻击行为,并记录攻击源,提供可视化功能,有效保护网络安全。

软件功能

  • 扫描局域网活动主机: 获取局域网内所有活动主机的MAC地址和IP地址。
  • 检测ARP攻击: 实时监测网络数据包,识别并记录ARP攻击行为,包括攻击源的MAC地址和IP地址。
  • ARP攻击防护: 通过发送伪造的ARP响应报文,阻止攻击者发送虚假ARP信息,有效防御ARP攻击。
  • 可视化功能: 提供界面或日志记录,显示扫描结果、攻击记录等信息,方便用户查看和分析。

代码实现

该软件主要包含三个Python文件:

  1. main.py 主程序文件,负责调用扫描和防护功能。
  2. arp_scan.py 负责扫描局域网活动主机,获取MAC地址和IP地址。
  3. arp_defense.py 负责检测ARP攻击行为,并进行防护。

1. main.py

import arp_scan
import arp_defense

if __name__ == "__main__":
    # 扫描局域网内活动主机的MAC地址、IP地址
    arp_scan.scan()

    # 启动ARP攻击检测和防护
    arp_defense.defense()

2. arp_scan.py

import scapy.all as scapy
import threading
import time

# 定义局域网IP地址前缀
ip_prefix = "192.168.1."

# 定义全局变量,用于存储扫描结果
ip_mac_dict = {}

# 定义函数,用于扫描局域网内活动主机的MAC地址、IP地址
def scan():
    global ip_mac_dict
    ip_mac_dict = {}
    threads = []
    for i in range(1, 255):
        ip = ip_prefix + str(i)
        t = threading.Thread(target=scan_ip, args=(ip,))
        threads.append(t)
        t.start()
    for t in threads:
        t.join()

# 定义函数,用于扫描指定IP地址的MAC地址
def scan_ip(ip):
    global ip_mac_dict
    try:
        arp_req = scapy.ARP(pdst=ip)
        broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
        arp_broadcast = broadcast/arp_req
        res = scapy.srp(arp_broadcast, timeout=1, verbose=False)[0]
        mac = res[0][1].hwsrc
        ip_mac_dict[ip] = mac
    except:
        pass
    time.sleep(0.1)

3. arp_defense.py

import scapy.all as scapy
import time

# 定义全局变量,用于存储ARP攻击源的MAC地址、IP地址
attack_dict = {}

# 定义函数,用于检测ARP攻击行为
def detect(packet):
    # 判断是否为ARP请求或ARP响应报文
    if packet.haslayer(scapy.ARP) and (packet[scapy.ARP].op == 1 or packet[scapy.ARP].op == 2):
        # 获取源MAC地址、源IP地址、目的MAC地址、目的IP地址
        src_mac = packet[scapy.Ether].src
        src_ip = packet[scapy.ARP].psrc
        dst_mac = packet[scapy.Ether].dst
        dst_ip = packet[scapy.ARP].pdst
        # 判断是否为ARP攻击行为
        if src_mac != attack_dict.get(src_ip, ""):
            # 记录ARP攻击源的MAC地址、IP地址
            attack_dict[src_ip] = src_mac
            # 打印提示信息
            print("ARP attack detected:")
            print("Source MAC: " + src_mac + ", Source IP: " + src_ip)
            print("Destination MAC: " + dst_mac + ", Destination IP: " + dst_ip)

# 定义函数,用于防护ARP攻击行为
def protect(packet):
    # 获取源MAC地址、源IP地址、目的MAC地址、目的IP地址
    src_mac = packet[scapy.Ether].src
    src_ip = packet[scapy.ARP].psrc
    dst_mac = packet[scapy.Ether].dst
    dst_ip = packet[scapy.ARP].pdst
    # 判断是否为ARP攻击源
    if src_ip in attack_dict:
        # 获取正常主机的MAC地址
        dst_mac = arp_scan.ip_mac_dict.get(dst_ip, "")
        # 构建ARP响应报文
        arp_resp = scapy.ARP(op=2, hwsrc=attack_dict[src_ip], psrc=src_ip, hwdst=dst_mac, pdst=dst_ip)
        # 构建以太网帧
        ether_resp = scapy.Ether(src=attack_dict[src_ip], dst=dst_mac)/arp_resp
        # 发送ARP响应报文
        scapy.sendp(ether_resp, verbose=False)
        # 打印提示信息
        print("ARP attack prevented:")
        print("Source MAC: " + src_mac + ", Source IP: " + src_ip)
        print("Destination MAC: " + dst_mac + ", Destination IP: " + dst_ip)

# 定义函数,用于启动ARP攻击检测和防护
def defense():
    # 设置过滤器,只监听ARP请求和ARP响应报文
    filter_str = "arp"
    # 启动嗅探器,实时监听网络数据包
    scapy.sniff(filter=filter_str, prn=detect, store=0)
    # 启动防护机制,实时监听网络数据包
    scapy.sniff(filter=filter_str, prn=protect, store=0)

使用方法

  1. 安装依赖库:pip install scapy
  2. 将代码保存到本地,并确保代码文件位于同一目录下。
  3. 运行主程序文件main.pypython main.py

注意

  • 该软件需要在Linux系统上运行,并且需要root权限。
  • 软件仅提供基本功能,用户可以根据实际需求进行扩展和完善。
  • ARP攻击防护机制只能阻止攻击者发送虚假ARP信息,无法完全阻止所有攻击。

总结

本文介绍了使用Python实现ARP检测防护软件的方法,帮助用户了解ARP攻击的原理和防护措施,提高网络安全意识,有效保护网络安全。

请注意: 本代码示例仅供学习和参考,实际应用中需要根据具体情况进行调整和完善。

基于Linux的Python实现ARP检测防护软件 - 防范ARP攻击,保护网络安全

原文地址: https://www.cveoy.top/t/topic/jk2f 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录