[Share Experiences] Deepin V23 商店中 wireshark 无法直接打开 pcap 文件的解决办法 Resolved
Tofloor
poster avatar
178******17
deepin
2024-07-31 20:41
Author

问题概述

在 Deepin V23 的应用商店下载了 wireshark, 版本非常新已经到 4.2.0, 但使用的时候发现一些不符合个人习惯的点.

我一般使用 wireshark 有两种场景:

  1. 用来打开别人发过来的 pcap 文件进行查看, 比如某个 http 请求发的对不对.
    • 如果只是打开 pcap 文件是不需要 root 权限的.
    • 通常是双击 pcap 文件直接打开, 有时候也需要在命令行执行 wireshark xxx.pcap
  2. 用来抓取网卡上的报文.
    • 抓取网卡数据包需要 root 权限.
    • 通常从命令行打开 sudo wireshark

从商店下载的 wireshark 也提供了两种打开方式, 普通权限模式和 root 权限模式.

但是双击打开 pcap 文件时会先提示一段话, 告诉用户 wireshark 大部分功能都需要在 root 权限下打开, 点击确定后会提示 pcap 文件找不到, 此时只能再把 pcap 文件拖进 wireshark 来打开.

当我尝试在命令行下执行 wireshark xxx.pcap 时, 提示找不到命令.

如果按照我的使用习惯, 我会有如下改进

  1. 去掉普通用户权限打开 wireshark 时的提示(或者仅第一次提示).
  2. 双击 pcap 文件能够直接使用 wireshark 打开.
  3. 在命令行可以执行 wireshark xxx.pcap 来打开文件.

尝试解决的过程

  1. 找到 wireshark 的安装目录及启动命令
    • 打开开始菜单, 找到 wireshark 的图标点击右键 -> 发送到桌面
    • 到桌面上右键点击 wireshark 图标 -> 打开方式 -> 文本编辑器
    • 可以找到 Exec=/opt/apps/org.wireshark/files/Run.sh %f
    • 其中 Run.sh 是启动脚本, %f 就是传入打开 pcap 文件路径的参数
  2. 查看启动命令
    • 命令行执行 cat /opt/apps/org.wireshark/files/Run.sh 查看 Run.sh 脚本内容.
    • 可以看到前面的 zenity 是在弹提示信息框, 将这几行用 # 号注释就可以去除提示框了
  3. 定位无法打开 pcap 文件的问题
    • 因为 desktop 文件中调用 Run.sh 脚本时是传入了 %f 文件路径的, 所以先看以下传入的路径是啥
    • zenity 提示框就可以用来帮忙调试, 网上搜索得知 Run.sh 脚本中第一个输入参数是 $1, 可以使用 zenity 将其打印出来
    • 最后发现传入的参数是 file:///xxx/yyy/zzz.pcap, 由于多了 file 前缀导致 wireshark 不识别了
  4. 解决路径不识别问题
    • 方法是在 Run.sh 脚本中调用 wireshark 前把多余的前缀去掉, 继续网上搜索发现 ${word/ab/} 可以删除开头的 ab
    • 修改好之后测试发现能正常打开 pcap 文件了
  5. 尝试在命令行下执行 wireshark
    • 执行就报错了, 这个问题能力不够解决不了, 不过好在问题影响不大

最终效果

修改 /opt/apps/org.wireshark/files/Run.sh 文件为如下内容

#!/bin/bash

INPUT=$1
FILE=${INPUT/file:\/\//}

#zenity --info --title="警告!" --text="${FILE}" --width=350 --height=100

exec /opt/apps/org.wireshark/files/bin/wireshark "${FILE}"

后续更新

前面的内容遗留了两个问题

  1. 如果 pcap 文件名带空格就无法双机打开
  2. 无法通过命令行来启动 wireshark

第一个问题是因为最终效果里的 ${FILE} 没有加引号, 加上后就可以了

而第二个问题以前不知道怎么改,现在发现通过 apt search wireshark 搜索包时软件源里面的 wireshark 已经更新到 4.4.0 了, 而 deepin 商店里的版本还在 4.2.0

于是我商店卸载了 wireshark, 然后通过 sudo apt install wireshark 来安装 wireshark, 结果报了找不到依赖包 libqt6multimedia6

错误:1 https://community-packages.deepin.com/beige beige/main amd64 libqt6multimedia6 amd64 6.6.1-2deepin0
  404  Not Found [IP: 223.111.183.30 443]
E: 无法下载 https://community-packages.deepin.com/deepin/beige/pool/main/q/qt6-multimedia/libqt6multimedia6_6.6.1-2deepin0_amd64.deb  404  Not Found [IP: 223.111.183.30 443]

通过报错中的 URL 去浏览器访问 https://community-packages.deepin.com/deepin/beige/pool/main/q/qt6-multimedia/ 发现包是有的,只是包名中没有 deepin ,于是手动下载 https://community-packages.deepin.com/deepin/beige/pool/main/q/qt6-multimedia/libqt6multimedia6_6.6.1-2_amd64.deb 然后安装

sudo dpkg -i ~/Download/libqt6multimedia6_6.6.1-2_amd64.deb

之后再次安装 wireshark 就可以成功安装了, 完成后发现可以用命令行启动 wireshark 了,但是双机文件还是打不开,另外 wireshark(root) 那个图标也没有了

于是新建一个wireshark 启动脚本 sudo vi /usr/bin/wireshark.sh

#!/bin/bash

INPUT=$1
FILE=${INPUT/file:\/\//}

exec /usr/bin/wireshark "${FILE}"

再编辑下 wireshark.desktop 文件, sudo vi /usr/share/applications/org.wireshark.Wireshark.desktop,找到 Exec 开头的行,改成如下内容

Exec=wireshark.sh "%f"

保存后就可以正常双机打开文件了

这样我自己的几个习惯就满足了,双机打开文件和命令行启动,但 root 启动快捷方式没有了可能不适合其他人

Reply Favorite View the author
All Replies
荔枝使
deepin
2024-07-31 21:47
#1

感谢分享

Reply View the author
神末shenmo
deepin
Spark-App
Solutions Team Moderator
2024-08-01 00:42
#2
Reply View the author
waittingsummer
deepin
2024-08-01 13:41
#3

亲测有效 👍

Reply View the author
Ziggy
deepin
2024-08-01 13:43
#4

这个看起来更像是传参的问题,正常%F、%U都可以作为url来被程序处理的

可以加入内测通道更新下看看

Reply View the author
来自其他发行版的小明哥
deepin
2024-08-09 10:44
#5
It has been deleted!
来自其他发行版的小明哥
deepin
2024-08-09 11:27
#6

wow, 我也遇到了这个问题

正想着不知道怎么调试.desktop, 都没对Run.sh起反应

没想到弹警告问题和附带参数都能调试了

而且这个帖子就在一周前发的

感谢大佬 让我加深了对zenity的认识orz👍

Reply View the author
来自其他发行版的小明哥
deepin
2024-08-09 11:34
#7
Ziggy

这个看起来更像是传参的问题,正常%F、%U都可以作为url来被程序处理的

可以加入内测通道更新下看看

是不是wireshark本身没支持url? 我在终端尝试wireshark file:/// 这种方式会报错"file xxx does not exist"

Reply View the author