首页 文章 精选 留言 我的

精选列表

搜索[模型开源],共10000篇文章
优秀的个人博客,低调大师

Wireshark 4.6.2 发布,最强开源网络数据包分析器

Wireshark 4.6.2 现已发布,修复了 Wireshark 4.6.1 引入的 API/ABI 变更,该变更导致与为 Wireshark 4.6.0 构建的插件存在兼容性问题。 以下漏洞已修复: wnpa-sec-2025-07\[5\] HTTP3 解析器问题崩溃。 wnpa-sec-2025-08\[7\] MEGACO 解析器无限循环问题。 以下错误已修复: ws\_base32\_decode 应该命名为 *_encode ? Omnipeek 文件在 4.6.1 中无法正常工作。 wiretap/ber.c (ber_open) 中的栈缓冲区溢出 4.6.0 和 4.6.1 之间的插件不兼容 Fuzz job crash:fuzz-2025-11-30-12266121180.pcap。 新增和更新的功能 Windows 安装程序现在随附 Visual C++ Redistributable version 14.44.35112。此前版本随附的是 14.40.33807。 更新的协议支持 ATM PW、COSEM、COTP、DECT NR+、DMP、Fc00、GTP、HTTP3、IEEE 802.15.4、 ISIS HELLO、ISOBUS、MAC-LTE、MAUSB、MEGACO、MPEG DSM-CC、OsmoTRXD、 PTP、RLC、SAPDIAG 和 SMTP 更多详情可查看:https://lists.wireshark.org/archives/wireshark-announce/202512/msg00000.html

优秀的个人博客,低调大师

GinFast 开源后台管理框架的 Token 管理业务逻辑及源码解析

项目地址 后端项目: https://github.com/qxkjsoft/ginfast 前端项目: https://github.com/qxkjsoft/ginfast-ui 概述 本文档详细分析GinFast项目中的Token管理系统,涵盖前后端JWT令牌的生成、验证、刷新、撤销等核心业务逻辑,以及相关的源码实现。包括后端Go服务和前端Vue应用的完整Token管理流程。 系统架构 后端核心组件 TokenService - 令牌服务核心实现 JWTAuthMiddleware - JWT认证中间件 AuthController - 认证控制器 TokenHelper - 令牌工具类 前端核心组件 Http拦截器 - 自动Token管理和刷新 Auth工具类 - Token存储和格式化 用户状态管理 - Token状态维护 技术栈 后端技术 JWT (JSON Web Token) - 用于身份认证 Redis/Memory - 可配置的缓存后端,用于令牌缓存和撤销管理 Gin - Web框架 jwt-go - JWT库 前端技术 Axios - HTTP客户端 Vue 3 + TypeScript - 前端框架 js-cookie - Cookie管理 Pinia - 状态管理 核心业务逻辑 1. 令牌类型 Access Token 用途: API访问认证 过期时间: 可配置 (默认12小时/43200秒) 存储方式: 可选缓存模式 (通过配置控制) 格式: JWT 前端存储: Cookie (gin-fast-access-token) Refresh Token 用途: 刷新Access Token 过期时间: 可配置 (默认30天/2592000秒) 存储方式: 一定会缓存 (Redis或内存缓存) 格式: JWT 前端存储: Cookie (gin-fast-refresh-token) 2. 认证流程 登录流程 // 后端流程 // 1. 用户提交用户名、密码、验证码 // 2. 验证用户身份和租户权限 // 3. 生成Access Token和Refresh Token // 4. 返回令牌对给客户端 // 前端流程 // 1. 用户填写登录表单 // 2. 调用/login接口获取令牌对 // 3. 将令牌存储到Cookie // 4. 更新用户状态 令牌刷新流程 // 后端流程 // 1. 客户端提交Refresh Token // 2. 验证Refresh Token有效性 // 3. 生成新的Access Token // 4. 轮换Refresh Token(保持剩余有效期) // 5. 返回新的令牌对 // 前端流程 // 1. 检测Access Token即将过期(剩余3秒) // 2. 自动调用/refreshToken接口 // 3. 更新Cookie中的令牌信息 // 4. 重试待处理的请求 登出流程 // 后端流程 // 1. 撤销当前Access Token // 2. 撤销Refresh Token // 3. 清除相关缓存 // 前端流程 // 1. 调用登出接口 // 2. 清除Cookie中的令牌 // 3. 清除用户状态 // 4. 跳转到登录页 源码解析 1. 后端TokenService实现 核心结构体 type TokenService struct { // Ctx 上下文,用于缓存操作 Ctx context.Context // RedisHelper 缓存接口,支持Redis和内存两种实现 // 通过配置 server.cachetype 控制使用哪种缓存后端 RedisHelper app.CacheInterf // JWTSecret JWT签名密钥,用于Token的加密和解密 // 通过配置 token.jwttokensignkey 设置 JWTSecret string // TokenExpire Access Token过期时间,单位秒 // 通过配置 token.jwttokenexpire 设置,默认12小时(43200秒) TokenExpire time.Duration // RefreshExpire Refresh Token过期时间,单位秒 // 通过配置 token.jwttokenrefreshexpire 设置,默认30天(2592000秒) RefreshExpire time.Duration // CacheKeyPrefix 缓存键前缀,用于区分不同应用的缓存 // 通过配置 token.cachekeyprefix 设置,默认"gin-fast:" CacheKeyPrefix string // IsCache 是否开启Access Token缓存 // 通过配置 token.isCache 控制: // - true: 开启缓存,支持Token立即撤销,安全性更高 // - false: 关闭缓存,性能更高,但无法立即撤销Token IsCache bool } 主要方法 GenerateTokenWithCache - 生成带缓存的Access Token func (s *TokenService) GenerateTokenWithCache(user *app.ClaimsUser) (string, error) { // 1. 生成JWT令牌 tokenString, err := s.GenerateToken(user) // 2. 如果开启缓存,存储到Redis if s.IsCache { tokenInfo := &app.TokenInfo{ UserID: user.UserID, Token: tokenString, ExpiresAt: time.Now().Add(s.TokenExpire * time.Second), CreatedAt: time.Now(), } err = s.storeTokenWithCache(tokenInfo) } return tokenString, nil } ValidateTokenWithCache - 验证带缓存的Token func (s *TokenService) ValidateTokenWithCache(tokenString string) (*app.Claims, error) { // 1. 验证JWT签名 claims, err := s.ParseToken(tokenString) // 2. 检查缓存中是否存在该token(白名单模式) if s.IsCache { key := s.getTokenKeyWithCache(claims.UserID, tokenString) exists, err := s.RedisHelper.Exists(s.Ctx, key) if err != nil || exists == 0 { return nil, errors.New("token not found") } } return claims, nil } RotateRefreshToken - 轮换Refresh Token func (s *TokenService) RotateRefreshToken(oldRefreshToken string) (string, error) { // 1. 验证旧的refresh token claims, err := s.ValidateRefreshToken(oldRefreshToken) // 2. 计算剩余有效时间 remainingDuration := claims.ExpiresAt.Time.Sub(now) // 3. 撤销旧的refresh token s.RevokeRefreshToken(claims.UserID) // 4. 生成新的refresh token,使用剩余的有效时间 expirationTime := now.Add(remainingDuration) // 5. 存储新的refresh token s.storeRefreshToken(newRefreshTokenInfo) return newTokenString, nil } 2. 前端Http拦截器实现 请求拦截器 - 自动Token刷新 private httpInterceptorsRequest(): void { Http.axiosInstance.interceptors.request.use( async (config: HttpRequestConfig): Promise<any> => { // 请求白名单,不需要token的接口 const whiteList = ["/refreshToken", "/login", "/captcha/id", "/captcha/image"]; return whiteList.some(url => config.url?.includes(url)) ? config : new Promise(resolve => { const data = getAccessToken(); const refreshTokenData = getRefreshToken(); // 过期时间小于3秒时即认为过期 const expired = !data || data.accessTokenExpires * 1000 - Date.now() <= 3000; if (expired && refreshTokenData) { // 过期处理 - 自动刷新Token if (!Http.isRefreshing) { Http.isRefreshing = true; // token过期刷新 useUserStoreHook() .handRefreshToken(refreshTokenData.refreshToken) .then((res: any) => { const token = res.data.accessToken; if (config.headers) { config.headers["Authorization"] = formatToken(token); } Http.requests.forEach(cb => cb(token)); Http.requests = []; }) .finally(() => { Http.isRefreshing = false; }); } resolve(Http.retryOriginalRequest(config)); } else { // 未过期 - 正常添加Token if (config.headers && data?.accessToken) { config.headers["Authorization"] = formatToken(data.accessToken); } resolve(config); } }); } ); } 响应拦截器 - 错误处理 private httpInterceptorsResponse(): void { instance.interceptors.response.use( (response: HttpResponse) => { return response.data; }, (error: HttpError) => { const status = error.response?.status; const config = error.config; // 刷新token的API报错时提示跳转登录页 if (config?.url?.includes("/refreshToken")) { throttledModalConfirm({ title: '提示', content: '登录状态已过期,请重新登录', onOk: () => { Http.redirectLoginPage(); } }); } else if (status === 401) { // 401错误时,提示用户刷新页面重试 throttledModalConfirm({ title: '提示', content: '登录状态已过期,请刷新页面重试', onOk: () => { window.location.reload(); } }); } return Promise.reject(error); } ); } 3. 前端Auth工具类 Token存储管理 export interface AccessTokenData { accessToken: string; accessTokenExpires: number; // 时间戳 } export interface RefreshTokenData { refreshToken: string; refreshTokenExpires: number; // 时间戳 } // Token存储到Cookie export function setAccessToken(accessToken: string, accessTokenExpires: number) { const cookieString = JSON.stringify({ accessToken: accessToken, accessTokenExpires }); Cookies.set(AccessTokenKey, cookieString, { expires: (accessTokenExpires * 1000 - Date.now()) / 86400000 }); } export function setRefreshToken(refreshToken: string, refreshTokenExpires: number) { const cookieString = JSON.stringify({ refreshToken: refreshToken, refreshTokenExpires }); Cookies.set(RefreshTokenKey, cookieString, { expires: (refreshTokenExpires * 1000 - Date.now()) / 86400000 }); } // Token格式化 export const formatToken = (token: string): string => { return "Bearer " + token; }; 4. 后端JWT认证中间件 JWTAuthMiddleware func JWTAuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // 1. 从Header获取Access Token tokenString, err := common.GetAccessToken(c) // 2. 验证Token有效性 claims, err := app.TokenService.ValidateTokenWithCache(tokenString) // 3. 将用户信息存储到上下文 c.Set(consts.BindContextKeyName, claims) // 4. 继续处理请求 c.Next() } } 5. 后端认证控制器 Login方法 func (ac *AuthController) Login(c *gin.Context) { // 1. 验证请求参数 var req models.LoginRequest req.Validate(c) // 2. 查询用户信息 user := models.NewUser() user.Find(c, func(d *gorm.DB) *gorm.DB { return d.Where("username = ?", req.Username).Preload("Tenant") }) // 3. 验证租户权限 tenantID, tenantCode := ac.validateTenant(user, req.TenantCode) // 4. 密码验证和登录锁定机制 ac.validatePassword(user, req.Password, req.Username) // 5. 生成令牌对 token, _ := app.TokenService.GenerateTokenWithCache(&app.ClaimsUser{ UserID: user.ID, Username: user.Username, TenantID: tenantID, TenantCode: tenantCode, }) refreshToken, _ := app.TokenService.GenerateRefreshToken(user.ID) // 6. 返回响应 ac.Success(c, gin.H{ "accessToken": token, "accessTokenExpires": claims.ExpiresAt.Unix(), "refreshToken": refreshToken, "refreshTokenExpires": claims1.ExpiresAt.Unix(), }) } RefreshToken方法 func (ac *AuthController) RefreshToken(c *gin.Context) { // 1. 获取Refresh Token refreshToken := c.GetHeader("RefreshToken") // 2. 解析Refresh Token获取用户ID claims, err := app.TokenService.ParseRefreshToken(refreshToken) // 3. 查询用户信息 var user models.User app.DB().WithContext(c).First(&user, claims.UserID) // 4. 刷新Access Token newAccessToken, err := app.TokenService.RefreshAccessTokenWithCache(refreshToken, &app.ClaimsUser{ UserID: user.ID, Username: user.Username, }) // 5. 轮换Refresh Token newRefreshToken, err := app.TokenService.RotateRefreshToken(refreshToken) // 6. 返回新的令牌对 ac.Success(c, gin.H{ "accessToken": newAccessToken, "accessTokenExpires": claims1.ExpiresAt.Unix(), "refreshToken": newRefreshToken, "refreshTokenExpires": newRefreshClaims.ExpiresAt.Unix(), }) } 配置管理 Token相关配置 token: jwttokensignkey: "gin-fast" # JWT签名密钥 jwttokenexpire: 43200 # Access Token过期时间(12小时),可配置 jwttokenrefreshexpire: 2592000 # Refresh Token过期时间(30天),可配置 cachekeyprefix: "gin-fast:" # 缓存前缀 isCache: false # 是否开启Access Token缓存 缓存配置 server: cachetype: "redis" # 缓存模式 memory OR redis 缓存策略 1. 缓存后端配置 系统支持两种缓存后端: Redis缓存 特点: 分布式、持久化、适合生产环境 配置: 通过Redis配置连接 适用场景: 多实例部署、高可用环境 内存缓存 特点: 高性能、单机、重启丢失 配置: 无需额外配置 适用场景: 开发环境、单机部署 2. Token缓存策略 Access Token缓存 可配置: 通过 isCache 配置控制是否缓存 缓存模式: 白名单模式,缓存中存在的Token才有效 优势: 支持立即Token撤销 性能: 缓存模式下性能略低,但安全性更高 Refresh Token缓存 强制缓存: Refresh Token一定会被缓存 存储方式: 每个用户只有一个有效的Refresh Token 优势: 支持Token轮换和立即撤销 3. 缓存键设计 Access Token Key func (s *TokenService) getTokenKeyWithCache(userID uint, tokenString string) string { hash := md5.Sum([]byte(tokenString)) tokenHash := fmt.Sprintf("%x", hash)[:8] return fmt.Sprintf("%stoken:%d:%s", s.CacheKeyPrefix, userID, tokenHash) } Refresh Token Key func (s *TokenService) getRefreshTokenKey(userID uint) string { return fmt.Sprintf("%srefresh_token:%d", s.CacheKeyPrefix, userID) } 安全特性 1. 登录锁定机制 safe: loginlockthreshold: 3 # 密码错误锁定阈值 loginlockexpire: 60 # 失败次数记录缓存时间 loginlockduration: 600 # 账号锁定时长 2. Token安全 JWT签名: 使用HS256算法 密钥配置: 通过配置文件管理 过期时间: 合理的过期时间设置 Token轮换: Refresh Token轮换机制 3. 租户隔离 Token中包含租户信息,实现多租户系统的权限隔离: type ClaimsUser struct { UserID uint `json:"userId"` Username string `json:"username"` TenantID uint `json:"tenantId,omitempty"` TenantCode string `json:"tenantCode,omitempty"` } TokenService使用灵活性 1. 独立调用模式 TokenService设计为独立的服务组件,开发者可以根据需要选择使用方式: 仅使用基础Token功能 // 仅生成和验证Access Token,不使用Refresh Token机制 token, err := app.TokenService.GenerateToken(user) claims, err := app.TokenService.ValidateToken(tokenString) 使用完整Token管理 // 使用完整的Token管理,包括Refresh Token token, err := app.TokenService.GenerateTokenWithCache(user) refreshToken, err := app.TokenService.GenerateRefreshToken(user.ID) newToken, err := app.TokenService.RefreshAccessTokenWithCache(refreshToken, user) 2. 缓存配置灵活性 Access Token缓存可选 开启缓存: 支持立即Token撤销,安全性更高 关闭缓存: 性能更高,但无法立即撤销Token 配置控制: 通过 isCache 配置项控制 Refresh Token强制缓存 必须缓存: 确保Refresh Token的安全管理 单用户单Token: 每个用户只有一个有效的Refresh Token 自动轮换: 支持Token轮换保持安全性 路由配置 公开路由(无需认证) public := api.Group("") public.POST("/login", middleware.CaptchaMiddleware(), authControllers.Login) public.POST("/refreshToken", authControllers.RefreshToken) 受保护路由(需要JWT认证) protected := api.Group("") protected.Use(middleware.JWTAuthMiddleware()) protected.Use(middleware.DemoAccountMiddleware()) protected.Use(middleware.CasbinMiddleware()) 前后端交互流程 1. 完整的Token生命周期 登录过程 Redis后端前端用户Redis后端前端用户输入用户名密码POST /login验证用户身份生成Access Token生成Refresh Token存储Refresh Token返回令牌对存储到Cookie登录成功 Token自动刷新过程 Redis后端前端Redis后端前端检测Token即将过期(3秒)POST /refreshToken验证Refresh Token生成新Access Token轮换Refresh Token更新Refresh Token返回新令牌对更新Cookie重试待处理请求 2. 错误处理机制 前端错误处理策略 Token刷新失败: 跳转登录页 401错误: 提示刷新页面 网络错误: 友好提示 重复刷新保护: 防止并发刷新 后端错误处理策略 Token无效: 返回401状态码 Refresh Token过期: 要求重新登录 租户权限不足: 返回403状态码 登录锁定: 返回429状态码 最佳实践 1. Token管理 前后端协同: 前端自动刷新,后端安全验证 双Token机制: Access Token(12h) + Refresh Token(30d) 智能过期检测: 前端提前3秒检测Token过期 Token轮换: 保持Refresh Token剩余有效期 2. 安全性 登录锁定: 防止暴力破解 多租户隔离: Token包含租户信息 Token撤销: 支持立即失效 白名单机制: 防止Token过期死循环 3. 性能优化 缓存模式可选: 平衡安全性和性能 请求队列: 防止重复刷新 节流控制: 防止频繁跳转登录页 高效验证: JWT签名验证 + 缓存检查 4. 用户体验 无感刷新: 用户无需手动操作 友好提示: 清晰的错误信息 状态保持: 刷新页面后保持登录状态 重试机制: 自动重试待处理请求 总结 GinFast项目的Token管理系统设计完善,具备以下特点: 后端优势 安全性高: 支持Token撤销、登录锁定、多租户隔离 灵活性好: 支持可配置的缓存模式(Redis/内存) 扩展性强: 清晰的接口设计和模块化架构 配置灵活: Token过期时间可配置,缓存策略可选 前端优势 用户体验佳: 提供Token自动刷新机制 错误处理完善: 多种错误场景的友好处理 性能优化: 请求队列和节流控制 前后端协同 完整生命周期: 从登录到登出的完整流程 智能刷新: 前端自动检测和刷新Token 状态同步: Cookie存储与后端验证同步 核心特性 缓存策略灵活: Access Token缓存可选,Refresh Token强制缓存 TokenService独立: 可单独调用基础功能或完整管理功能 多缓存后端: 支持Redis和内存两种缓存后端 配置驱动: 所有关键参数均可通过配置文件调整 该系统能够满足企业级应用的安全认证需求,为多租户SaaS应用提供了可靠的Token管理解决方案,实现了前后端无缝协作的安全认证体系。 关键源码文件 后端核心文件 app/utils/tokenhelper/tokenhelper.go - Token服务实现 app/middleware/jwt.go - JWT认证中间件 app/controllers/auth.go - 认证控制器 app/routes/routes.go - 路由配置 app/utils/cachehelper/ - 缓存实现(Redis和内存) 前端核心文件 src\\utils\\http\\index.ts - HTTP拦截器 src\\utils\\auth.ts - Token工具类

优秀的个人博客,低调大师

Sqlsyncify 开源,一款高效同步 MySQL 数据至 ElasticSearch 的工具

Sqlsyncify 是一个高效的 MySQL 到 ElasticSearch 数据同步工具。 主要特点 低成本运行:无需依赖昂贵的大数据处理框架 分批处理:多段 SQL 分批导出 MySQL 数据 本地数据组装:使用 SQLite 在本地组装自定义大文档 高性能推送:多协程并发推送数据到 ElasticSearch 灵活配置:支持自定义数据源和映射规则 版本兼容:支持 ElasticSearch 5.6 和 8.x 版本 适用场景 全量数据同步:定期运行,补全可能缺失的数据 混合同步模式:可与实时同步系统配合使用 大文档数据同步:适合需要多表关联的复杂数据结构

优秀的个人博客,低调大师

Wireshark 4.6 发布,最强开源网络数据包分析器

Wireshark 4.6.0 现已正式发布,一些具体更新内容如下: 以下功能为自4.6.0rc1以来的新功能或重大更新: Wireshark 现在可以解析 macOS 上tcpdump提供的进程信息、数据包元数据、流 ID、丢包信息等内容。 以下功能为自4.4.0以来的新功能或重大更新: Windows 安装包现附带Npcap 1.83(之前为 1.79)。 Windows 和 macOS 安装包现附带Qt 6.9.3(之前为 6.5.3)。 macOS 版本现提供通用安装包(Universal Installer),不再区分 Arm64 与 Intel 架构。Issue 17294 WinPcap 不再受支持。在 Windows 上请改用 Npcap,并卸载 WinPcap。WinPcap 最后一个版本为 4.1.3(2013 年发布),仅支持至 Windows 8,该系统现已被 Microsoft 与 Wireshark 停止支持。 新增“Plots(散点图)”对话框,与 “I/O Graphs(直方图)” 相比,可展示多种散点数据,支持多图、标记及自动滚动。 实时捕获可压缩写入。此前仅在多文件捕获轮换时可压缩。现在TShark的--compress参数可在实时捕获中使用。Issue 9311 绝对时间字段(Absolute time fields)在使用-T json输出时,无论在“数据包详情”中如何显示,均使用 UTC 的 ISO 8601 格式。这在-T ek中自 4.2.0 版起已启用。 时间显示格式更新:-T fields、-T pdml、自定义列或 CSV 输出中,不再使用asctime样式(如Dec 18, 2017 05:28:39 EST),改用 ISO 8601。为向后兼容,可通过protocols.display_abs_time_ascii选项切换显示方式。未来版本可能彻底移除asctime格式。 UTC 时间列现在按 ISO 8601 标准添加 “Z” 后缀。 TShark-G参数增强:不再要求必须为第一个参数,并支持与-o、-d、--disable-protocol等其他选项配合使用。 EUI-64 字段类型改为字节(bytes)类型,以便进行切片与匹配(如wpan.src64[:3] == eth.src[:3])。 NTP 解密支持 NTS(Network Time Security)协议 (sysin),前提是捕获中包含 NTS-KE 包和 TLS 密钥。 MACsec 解密增强:支持使用 MKA 解封的 SAK 或在 MACsec 解析器中配置的 PSK。 TCP 流图(Stream Graph)坐标轴现采用 SI 单位。Issue 20197 自定义列增强:可选择使用与“数据包详情”相同的格式显示值,并支持复杂表达式按数值排序。 新增显示过滤函数float与double,支持类型显式转换与算术操作。 I/O 图窗口最小宽度减小,更适合低分辨率桌面。Issue 20147 X.509 证书导出:可通过菜单File › Export Objects › X509AF导出证书,也可在 TShark 中使用--export-objects x509af。 HTTP / HTTP2解析器新增对Zstandard 压缩编码的支持。 跟踪流(Follow Stream)现支持MPEG-2 TS PID与内部Packetized Elementary Streams。 DNP3(分布式网络协议 3)现支持在会话与端点表中显示。 Lua 改进:内置的bit与rex_pcre2库现会自动加入package.loaded,可通过require调用。Issue 20213 数据包列表与事件列表不再支持多行显示。Issue 14424 ethers 文件现支持EUI-64 映射。Issue 15487 Hex Dump 导入功能支持 2–4 字节分组(含小端模式),并识别带0x前缀的偏移。Issue 16193 Hex Dump 导出现可包含时间戳前缀(Wireshark 的“打印”与“导出”对话框,以及 TShark 的--hexdump time选项)。Issue 17132 Lua 新增Conversation对象,可在脚本中访问会话数据 (sysin)。Issue 15396 新增“编辑 › 复制 › 作为 HTML”菜单项,可自定义复制格式与键盘快捷键。 GUI 导出对话框新增 “无重复键 JSON 输出” 选项。 导出对话框可输出原始十六进制字节数据。 会话与端点表新增显示精确字节与比特率的选项,由偏好项conv.machine_readable控制。 -z <tap>,tree的 TShark 统计输出格式可通过-o statistics.output_format控制。 配色方案可独立设置浅色/深色模式,与系统设置无关(需 Qt 6.8+)。Issue 19328 libxml2现为构建必需依赖(不支持 2.15.0 版本)。 View 菜单新增“重新解析数据包(Redissect Packets)”选项,适用于地址解析或解密密钥更新后。 HTTP2 可选跟踪 3GPP 会话(5G SBI)。 Windows 构建文档不再需要 Java。 Linux上捕获过滤器支持 BPF 扩展(如inbound、outbound、ifindex)。 移除的功能与支持 不再支持AirPcap与WinPcap。 不再支持libnl v1 / v2。 CMake 选项ENABLE_STATIC已弃用,请改用BUILD_SHARED_LIBS。 新增文件格式解析支持 RIFF(资源交换文件格式) TTL 文件格式 新增协议支持 支持以下协议: Asymmetric Key Packages (AKP)、Binary HTTP、BIST TotalView-ITCH、BIST TotalView-OUCH、Bluetooth Android HCI、Bluetooth Intel HCI、BPSec COSE Context、BPSec Default SC、Commsignia Capture Protocol (C2P)、DECT NR+、DLMS/COSEM、Ephemeral Diffie-Hellman Over COSE、ILNP、LDA Neo Device Trailer、Lenbrook Service Discovery Protocol、LLC V1、Navitrol、NTS-KE、Ouster VLP-16、Private Line Emulation、RC V3、RCG、Roughtime、SBAS L5、SGP.22、SGP.32、SICK CoLA Ascii/Binary、Silabs Debug Channel、XCP、USB-PTP、VLP-16、vSomeIP Internal Protocol 等。 更新的协议支持 协议更新数量众多,此处不一一列出。 新增与更新的捕获文件支持 改进了BLF 文件格式(包括写入功能)。 新增与更新的捕获接口支持 Windows:改进了etwdump的用户体验,显示未知事件的原始字节内容。 主要 API 变更 Lua API现支持Libgcrypt 对称加密函数。 更多详情可查看官方公告。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册