Python网络攻击检测:ARP攻击检测与防御
以下是使用Python实现ARP攻击检测的代码:
import socket
import struct
import fcntl
import time
import sys
ETH_P_ALL = 0x0003
# 扫描网络获取活动主机信息
def scan_network(ifname):
active_hosts = {}
for i in range(1, 255):
dst_ip = '192.168.197.' + str(i)
send_arp_request(ifname, '192.168.197.1', get_mac_address(ifname), dst_ip)
time.sleep(0.1)
response = send_arp_reply(ifname, dst_ip, get_mac_address(ifname), '192.168.197.1', get_mac_address(ifname))
if response is not None:
active_hosts[response['src_ip']] = response['src_mac']
return active_hosts
# 保存记录到本地文件
def save_records():
active_hosts = scan_network(ifname)
with open('records.txt', 'w') as f:
f.write('活动主机IP地址 MAC地址\n')
for ip, mac in active_hosts.items():
f.write(ip + '\t' + mac + '\n')
f.write('\n攻击源IP地址 MAC地址\n')
for ip, mac in attack_source_dict.items():
f.write(ip + '\t' + mac + '\n')
f.write('\nICMP Flood攻击:' + detect_icmp_flood() + '\n')
f.write('TCP攻击:' + detect_tcp_attack() + '\n')
f.write('ARP欺骗攻击:' + detect_arp_spoofing() + '\n')
f.write('')
def get_mac_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', bytes(ifname[:15], 'utf-8')))
return ':'.join(['%02x' % b for b in info[18:24]])
# 发送ARP请求
def send_arp_request(ifname, src_ip, src_mac, dst_ip):
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.bind((ifname, ETH_P_ALL))
dst_mac = 'ff:ff:ff:ff:ff:ff' # 广播地址
arp_packet = struct.pack('!6s6s2s2s1s1s2s6s4s6s4s', bytes(dst_mac.replace(':', ''), 'utf-8'), bytes(src_mac.replace(':', ''), 'utf-8'), bytes.fromhex('08 06'), bytes.fromhex('00 01'), bytes.fromhex('08'), bytes.fromhex('00'), bytes.fromhex('06 04'), bytes.fromhex('00 01'), socket.inet_aton(src_ip), bytes.fromhex('00 00 00 00 00 00'), socket.inet_aton(dst_ip))
s.send(arp_packet)
根据这四个代码查看为什么活动主机的IP地址和MAC地址还是没有保存到文件中
if __name__ == '__main__':
if len(sys.argv) < 2:
print('Usage: python arp_attack_detection.py <interface>')
sys.exit(1)
ifname = sys.argv[1]
create_gui()
如何添加调用语句
添加之后还是没有活动主机的信息内容:可能是因为活动主机没有响应ARP请求,或者响应的ARP包被其他程序拦截了。可以尝试增加一些调试信息,例如打印发送的ARP请求和接收到的ARP响应,以便排查问题。另外,可以尝试使用其他工具或方法来扫描网络并获取活动主机的信息。
优化建议:
- 增加日志记录: 在代码中添加日志记录功能,记录发送的ARP请求、接收到的ARP响应以及检测到的攻击信息,以便于排查问题和分析攻击行为。
- 使用更专业的网络库: 可以考虑使用Scapy或Pyshark等专业的网络库来处理ARP协议,这些库提供了更便捷的接口和功能,可以简化代码开发。
- 提高扫描效率: 优化扫描网络的代码,例如使用线程或进程池来并行扫描,提高扫描速度。
- 增加攻击检测方法: 除了ARP欺骗攻击,还可以添加其他攻击检测方法,例如ICMP Flood攻击、TCP SYN Flood攻击等。
- 实现主动防御: 可以考虑在检测到ARP欺骗攻击后,采取一些主动防御措施,例如发送ARP响应包来修复被篡改的ARP缓存。
总结:
ARP攻击是一种常见的网络攻击手段,了解ARP攻击原理和防御方法对于网络安全非常重要。本文提供的代码和优化建议可以帮助读者更好地理解ARP攻击检测和防御技术。
原文地址: https://www.cveoy.top/t/topic/jm9d 著作权归作者所有。请勿转载和采集!