校园网SLAAC环境下IPv6的桥接与中继

本文讨论了在校园网SLAAC环境下,如何实现IPv6的桥接与中继。起初,笔者误以为校园网的路由器会自动通过DHCPv6桥接,为内网设备分配全球IPv6地址,但实际发现该环境使用了无Prefix Delegation(PD)的SLAAC配置。文章首先介绍了IPv6的基本概念,包括SLAAC、NDP(邻居发现协议)和PD(前缀委派)。接着,分析了在这种环境中遇到的问题,并提供了两种解决方案:一种是基于OpenWrt的中继方法,另一种是通过iptables实现的桥接方式。此外,还介绍了基于桥接的中继方法和Cisco交换机上使用ACL(访问控制列表)实现的端口桥接方案,包括L2和L3 ACL配置,以允许ICMPv6报文通过并屏蔽IPv4报文。通过这些方案,笔者成功解决了在SLAAC环境下的IPv6桥接与中继问题。
阅读更多

Wireguard 解决 DDNS 环境下 Peer 域名动态变化问题

本文记录了在使用Wireguard组网时,遇到的Peer域名动态变化问题,尤其是在使用动态域名解析(DDNS)时。Wireguard默认不会自动连接到更新后的IP地址,除非重启隧道。为解决这一问题,提出了两种解决方案:一是定时检测域名解析变化,并在变化时重启隧道;二是探测各个Peer的联通性,若某个Peer无法连接,则重建连接。作者选择了第一种方法,并编写了一个简单的脚本来实现定时检测和自动重启隧道。该方案已在OpenWrt系统上成功测试,其他Linux发行版也可类似配置。
阅读更多

记一次Python线程安全问题的排查

本文记录了笔者在使用Python Celery框架实现ERP自动化流程时,遇到的线程安全问题及其排查过程。Celery框架作为一个分布式任务队列,支持异步操作和定时任务,但在多线程环境下存在全局变量共享问题。某次客户反馈订单ID标注错乱,经过排查,发现是多个线程共享全局变量导致的冲突。在Python中,全局变量存储在特殊的全局命名空间中,多个线程可以访问和修改这些变量,从而引发线程安全问题。本文回顾了问题的定位过程,并总结了在多线程编程中避免全局变量共享的最佳实践。
阅读更多

Web 安全开发及架构设计

本文为我的《软件安全》课程课上分享内容,主要是软件设计的需求分析、概要设计部分,其中加入了一些安全考量和设计。背景是企业工厂设备管理和固定资产管理。项目包含设备管理、维修管理、保养管理、文档管理和用户管理等核心功能,角色包括管理员、技术员和工人。
阅读更多

Spring Security 简介、原理及使用

本文为《软件安全》课程上课分享内容,主要介绍Security框架的基本概念、结合代码分析原理、以及常见的使用场景。首先,概述了权限控制的基本概念,包括认证、授权、加密、防止CSRF攻击、记住我功能等。文章深入探讨了两种常见认证方法:Session和Bearer Token,并对其优缺点进行了比较。接着,介绍了Spring Security的核心概念,如身份验证、访问控制、过滤器链、密码加密和用户详情服务(UserDetailsService)。最后,通过实际代码示例展示了如何使用Spring Security实现身份鉴别、访问控制以及Session管理,还包括手工实现这些功能的对比,帮助读者更好地理解Spring Security的应用和实现细节。
阅读更多

[EN]Grid-based clustering method - Wave cluster wavelet clustering

A clustering algorithm is an unsupervised classification algorithm. There are many algorithms, including division-based clustering algorithms (e.g., kmeans), hierarchical clustering algorithms (e.g., BIRCH), density-based clustering algorithms (e.g., DBScan), lattice-based clustering algorithms, and so on.
阅读更多

基于网格的聚类方法——Wave cluster小波聚类

聚类算法是一种无监督分类算法。算法很多,包括基于划分的聚类算法(如:kmeans),基于层次的聚类算法(如:BIRCH),基于密度的聚类算法(如:DBScan),基于网格的聚类算法等等。本文对小波聚类WaveCluster进行较为详细的解析,并且给出易于运行的实验代码。
阅读更多