wireshark演进之路——从GTK到Qt

Wireshark 自 1998 年诞生至今,已有超过26年的历史了。它最早由 Gerald Combs 创建,最初名为 Ethereal。2006 年,Ethereal 更名为 Wireshark,并继续发展成了全球领先且人尽皆知的网络协议分析工具,其GUI演变就是其中非常重要的一环。

一、始于GTK+

1998 年首次发布时,它的前身 Ethereal 就是基于 GTK+ 框架构建的。

GTK+ 是一个跨平台的开源 GUI 库,特别适合在 Linux 环境中开发图形界面,因此在 Wireshark 项目早期成为了首选,GTK+ 帮助 Wireshark 实现了较为出色的跨平台支持和用户界面。然而,随着 Wireshark 功能需求的增加以及跨平台兼容性的提升要求,GTK+ 在一定程度上遇到了瓶颈。

2013年10月wireshark官方博客公布“We’re switching to Qt.”并解释这将是一个复杂的工作需重写数千行代码……

https://blog.wireshark.org/2013/10/switching-to-qt/

简单说:性能和跨平台都遇到瓶颈

二、到qt的华丽转身

wireshark从13年宣布使用qt,2年后到2015年版本2.0版本Qt 正式成为 Wireshark 的默认图形框架。切换ui框架对成熟的wireshark来说时间非常复杂的工作,整个切换过程耗时约数年,分阶段进行,包括初期的评估、重构、移植以及后续的测试和优化。

为减少对用户影响,gtk+和qt在2.0版本并行发布,也就是两条腿走路,一直到2019年发布3.0版本结束了gtk+支持,整个过程前后6年。

三、Wireshark 选择 Qt 的原因

  1. 跨平台支持增强:虽然 GTK+ 也支持跨平台,但在 Windows 和 macOS 上体验较为欠缺。Qt 的跨平台兼容性更强,能够在不同平台上提供一致且美观的界面效果。这对于希望无缝体验 Wireshark 的用户来说尤为重要。

  2. 现代化的用户界面:Qt 提供了更加丰富和灵活的控件支持,可以帮助 Wireshark 提升用户界面的现代化水平。通过 Qt,Wireshark 不仅能实现更精美的视觉效果,还能带来更流畅的用户体验。

  3. 性能与资源效率:Qt 的控件在性能上进行了高度优化,可以帮助减少资源占用,提升软件的整体流畅度。相比之下,GTK+ 在处理复杂界面和多线程操作时有时会显得力不从心。

  4. 开发者支持与社区:Qt 具有庞大的开发者社区和丰富的文档资源,为 Wireshark 开发团队提供了更强大的支持。在遇到问题时,开发者可以更轻松地从社区中获得帮助,缩短开发周期。

  5. 长期可维护性:随着 Wireshark 的用户量和功能需求不断增长,GTK+ 的一些旧有特性开始显得滞后,维护成本逐步上升。Qt 的模块化设计使得未来的代码维护和功能扩展更为便捷。

四、Wireshark 转向 Qt 带来的影响

  1. 用户体验提升:从 GTK 转向 Qt 后,Wireshark 的界面更加直观、流畅,功能布局也更加合理,用户的学习曲线得以缩短。Windows 和 macOS 用户尤其能感受到界面响应速度的提升。

  2. 功能增强:Qt 允许开发团队更轻松地引入新功能,Wireshark 中的一些界面元素(如过滤器、选项卡和日志窗口)变得更灵活,能够提供更符合用户需求的使用体验。

  3. 开发效率提升:Qt 提供了强大的集成开发环境(如 Qt Creator),帮助 Wireshark 团队大幅提升开发效率。Wireshark 的开发者可以更便捷地使用现代化的 C++ 功能和 Qt 的高性能库来优化代码,确保新版本的稳定性。

  4. 长期稳定性:Qt 的更新频率和长期支持使得 Wireshark 的维护变得更为可控,开发团队可以更加专注于优化软件性能、增强功能,而不必担心技术栈带来的负担。

五、总结

Wireshark 从 GTK+ 转向 Qt 是一个顺应技术发展趋势、优化用户体验的重要决策。通过这一转变,Wireshark 能够更好地满足不同平台用户的需求,并提供更现代化、流畅的网络分析体验。对于广大 Wireshark 用户和开发者而言,这次转型是一个值得期待的更新,将帮助 Wireshark 在未来继续引领网络分析工具的前沿。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL 进阶系列07 - 阴影贴图(shadowmap )

一:概述: 在 OpenGL 中,Shadow Mapping(阴影贴图)是一种常用的实时阴影技术,用于渲染物体的阴影效果。这种方法通过生成光源视角下的深度贴图,再在场景渲染时使用它来判断物体是否被遮挡,从而实现阴影效果。下面是实现 Shadow Mapping 的基本步骤和相关知识。 二:绘制…

el-form el-table 前端排序+校验+行编辑

一、页面 <template><div class="bg" v-if="formData.mouldData?.length == 0">当前暂无模板,点击<view class="add" @click="addMould">立即创建</view></div><div v-else><el-col :xs=&…

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …

html实体字符

HTML 实体字符 HTML 实体字符&#xff08;HTML Entities&#xff09;是在 HTML 中用来表示那些在 HTML 文档中直接使用可能会引起问题的特殊字符的一种方法。这些特殊字符包括但不限于尖括号、与号、引号等&#xff0c;它们在 HTML 中有特定的用途&#xff08;如标签界定符、属…

CSS Modules中的 :global

最近写需求遇到如下代码&#xff0c;我们来分析一番&#xff1a; .medicine-bot {:global(.cosd-site-vcard-card) {margin-top: -3px;}:global(.cosd-site-vcard-title-text) {font-size: var(--cos-text-headline-sm);}:global(.cosd-site-vcard-button) {background-color: …

JavaWeb后端开发案例——苍穹外卖day01

day1遇到问题&#xff1a; 1.前端界面打不开&#xff0c;把nginx.conf文件中localhost:80改成81即可 2.前后端联调时&#xff0c;前端登录没反应&#xff0c;application.yml中默认用的8080端口被占用&#xff0c;就改用了8081端口&#xff0c;修改的时候需要改两个地方&…

Centos7镜像下载与docker安装

注意&#xff1a; CentOS 7 已于2024年6月30日停止维护&#xff01; 1、下载 由于 centos 7 已经停止维护&#xff0c;部分镜像网站移除了对centos 7的支持&#xff0c;这里找到了部分现在还可以使用的镜像网站 阿里云开源镜像站&#xff1a;https://mirrors.aliyun.com/cent…

科技云报到:数字化转型,从不确定性到确定性的关键路径

科技云报到原创。 数字化转型是VUCA时代最大的确定性。 如果说&#xff0c;过去是数字化转型的试验阶段&#xff0c;实施的是开荒动土、选种育苗&#xff0c;那么当前要进行的是精耕细作、植树造林&#xff0c;数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业…

AgentReview:基于 LLM Agents 模拟同行评审过程的框架

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

如何查看电脑关机时间

要查看电脑的关机时间&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 打开事件查看器&#xff1a;按下键盘上的Windows键R键&#xff0c;然后在弹出的运行对话框中输入"eventvwr.msc"&#xff0c;并按下Enter键。 2. 在事件查看器窗口中&#xff0c;单击左侧窗…

详解Gemini API的使用:在国内实现大模型对话与目标检测教程

摘要&#xff1a;本博客介绍了如何利用Gemini API实现多轮对话和图像目标检测识别功能&#xff0c;在Python中快速搭建自己的大模型完成实际任务。通过详细的步骤解析&#xff0c;介绍了如何申请Gemini API密钥&#xff0c;调用API、对话实现的代码&#xff0c;给出了上传图片识…

java操作ES(一)RestHighLevelClient(2)集成与demo

一、集成方法 1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.x.x</version> <!-- 请使用与你的Elasticsearch版本相匹配的版…

HashMap的put流程知道吗

HashMap 的 put 方法算是 HashMap 中比较核心的功能了&#xff0c;复杂程度高但是算法巧妙&#xff0c;同时在上一版本的基础之上优化了存储结构&#xff0c;从链表逐步进化成了红黑树&#xff0c;以满足存取性能上的需要。本文逐行分析了 put 方法的执行流程&#xff0c;重点放…

5. ARM_指令集

概述 分类 汇编中的符号&#xff1a; 指令&#xff1a;能够编译生成一条32位机器码&#xff0c;并且能被处理器识别和执行伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若干条指令伪操作&#xff1a;不会生成指令&#xff0c;只是在编译阶段告诉编译器怎…

uniapp的基本使用(easycom规范和条件编译)和uview组件的安装和使用

文章目录 1、uniapp1.uview组件安装2.uview-plus组件安装 2、条件编译3、easycom规范1.组件路径符合规范2.自定义easycom配置的示例 总结 1、uniapp UniApp的UI组件库&#xff0c;如TMUI、uViewUI、FirstUI、TuniaoUI、ThorUI等&#xff0c;这些组件库适用于Vue3和TypeScript&…

Vue 学习随笔系列十四 -- JavaScript巧妙用法

JavaScript巧妙用法 文章目录 JavaScript巧妙用法1、String.padStart 函数2、String.padEnd 函数3、tirm 函数3. Object.freeze 函数4. Object.fromEntries 函数5. Object.entries 函数6. Array.prototype.flat 函数 1、String.padStart 函数 在字符串前面进行填充 let temp …

理想汽车Android面试题及参考答案

请解释一下 Android 中的 Handler 是如何工作的 在 Android 中,Handler 主要用于在不同线程之间进行通信,特别是在主线程(UI 线程)和工作线程之间。 Handler 是基于消息队列(MessageQueue)和 Looper 来工作的。首先,Looper 是一个循环器,它会不断地从消息队列中取出消息…

docker运行ActiveMQ-Artemis

前言 artemis跟以前的ActiveMQ不是一个产品&#xff0c;原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的&#xff0c;和原来不兼容&#xff0c;全称&#xff1a;ActiveMQ Artemis 本位仅介绍单机简单部署使用&#xff0c;仅用于学习和本地测试使用 官网&#xff1a;…

终端应用开发沉思录

前言 以下所有分析皆是从我的视角出发&#xff0c;探讨下我现行局势下觉得最有可能的实现且有未来发展前景的技术方案。由于本人没有啥开发经验&#xff0c;所以多是纸上谈兵&#xff0c;仅仅记录和分享下我个人想法。 移动App的开发模式&#xff1a; 在技术选型上&#xff…

商场试衣间惊现隐藏摄像头:小澄检测仪助力博主影子揭露

在信息时代&#xff0c;隐私安全如同一座需要时刻守护的堡垒。然而&#xff0c;近期公共场所出现的针孔摄像头事件&#xff0c;让这座堡垒遭受了严峻冲击。科普博主影子不会说谎近日发布视频&#xff0c;再度曝光隐藏在商场服装店试衣间的针孔摄像头&#xff0c;引发公众关注。…