图片来源:https://www.pixiv.net/en/artworks/74340900 这里的有线设备指带网线的物联网设备,正常情况下这些设备将网线插入家用路由器后即可正常使用 基本思路就是: 网络共享这一部分主流桌面环境和 NetworkManager 都有很好的支持,没有特殊需求的话,直接使用图形界面的网络设置即可 Ubuntu(GNOME) 硬件要求:带 RJ45 网口的 ubuntu PC、无线网卡 步骤 使用无线网卡连接互联网, 创建共享,将无线网络共享给有线网口 将物联网设备网线插入 Linux 机器网口,打开 wireshark 抓取有线网卡的数据包即可 SteamDeck 外接扩展坞(KDE) 硬件要求:SteamDeck、带 RJ45 网口的 TypeC 扩展坞 SteamDeck 是V社推出的游戏掌机,自带的系统 SteamOS 3.0 基于 Arch Linux,默认 KDE桌面环境,本质上就是一台X86架构的 Linux PC,但由于V社对系统魔改,配置上多少还是和其他 Linux 有区别 步骤 在游戏模式中开启开发者模式(Setting -> System -> Enable Developer Mode) 按 steam 键,选择电源,切换到桌面模式(Power -> Switch to Desktop) 使用无线网卡连接互联网 快捷键 Ctrl + Alt + T 打开 Konsole,执行以下命令: 创建共享,将无线网络共享给有线网口 将物联网设备网线插入扩展坞网口,打开 wireshark 抓取有线网卡的数据包即可 参考:
抓包
图片来源:https://www.pixiv.net/artworks/81818784 PCAPdroid下载安装 PCAPdroid是一个Android端抓包软件,可以不使用root权限,通过VPN的方式捕获网络流量并保存为pcap文件。但以这种方式保存的报文没有Enternet数据,可以通过tcprewrite修改报文,添加Enternet报文头 安装包下载链接: 抓包 Linux上使用tcprewrite添加Enternet报文头 tcprewrite工具包含在tcpreplay包里,安装tcpreplay即可 安装 Arch Linux Ubuntu 重写报文数据 将手机上抓包保存的pcap文件传到PC上,使用下面的命令添加Enternet报文头 另外我在Arch Linux上使用安装的“tcpreplay-4.4.2”存在重写失败的情况,回退到“tcpreplay-4.3.1”后则没有问题
图片来源:《侦探已经死了》第一集截图 使用的Android设备为一加7Pro, 刷机和root流程:Linux下给一加7Pro刷入LineageOS、获取root权限 不需要root权限的抓包方法:Android手机4G网络抓包(no-root) 方案一(仅使用手机):安装配置Termux Termux下载地址:官方github仓库, GooglePlay(不推荐,版本较老), Fdroid, apkmirror 配置 打开Termux 获取存储权限,并且会在家目录下生成storage文件夹,里面包含downloads等手机共享目录的软连接方便使用 先更新一波,更新过程中可能会有多次提示配置文件覆盖需要你选择,直接回车默认是不覆盖,也可以输入“Y”选择覆盖,建议覆盖 添加root仓库 安装sudo工具 安装tcpdump 抓包 运行tcpdump开始抓包,然后切换到需要抓包的应用开始操作即可 “Ctrl+C”停止抓包,这样抓到的报文就会保存在系统下载目录的“xxx.pcap”文件中 这样抓的包以太网协议头会被替换成伪协议“Linux cooked capture”,需要的话可以进行转换,转换方法见文末 方案二:使用tcpdump和PC端wireshark抓包 注意:LineageOS支持下面的操作,但很多国内厂商的手机系统,即使root了也无法进行下面的操作,原因和解决方案请自行参看https://stackoverflow.com/questions/25271878/android-adbd-cannot-run-as-root-in-production-builds 安装adb Arch Linux Ubuntu 安装tcpdump到手机 访问https://www.androidtcpdump.com/android-tcpdump/downloads, 下载“tcpdump for ARM Android” 手机打开“USB调试”、“Root身份调试”,数据线连接手机和电脑,进入存放刚刚下载的tcpdump的目录,执行 抓包 确保adbd运行在root模式 电脑上打开wireshark,能看到很多“Android tcpdump”开头的网卡(Android tcpdump 后面跟的第一个单词才是真的网卡名字) 候选网卡比较多,可以一个个试,移动数据网络一般是“rmnet_dataN”(N是个数字,关闭“移动数据”再打开可能会变),我的是“rmnet_data3”,双击即可开始抓包 和方案一一样,这样抓的包以太网协议头会被替换成伪协议“Linux cooked capture”,需要的话可以进行转换,转换方法见文末 Linux cooked-mode capture (SLL)格式转换 使用“tcprewrite”重写数据即可,“tcprewrite”包含在“tcpreplay”包中 安装 Arch Linux Ubuntu 转换 另外我在Arch Linux上使用安装的“tcpreplay-4.4.2”存在转换失败的情况,回退到“tcpreplay-4.3.1”后则没有问题 参考:
图片来源:https://www.pixiv.net/artworks/86467376 安装 安装adb Arch Linux Ubuntu 安装gnirehtet Arch Linux可通过aur安装 Ubuntu 需要手动下载,访问https://github.com/Genymobile/gnirehtet/releases下载最新版,有java版和rust版,个人建议下载rust版的,rust版的解压后仅包含两个文件“gnirehtet”和“gnirehtet.apk”。 进入解压目录,手动安装(不是必须的,可以跳过) 手机进入开发者模式并打开USB调试 不同手机界面会有些区别,但都差不多,设置里找到系统版本号连点7下,会提示进入开发者模式,之后再找到“开发者选项”,打开USB调试即可(也有叫Android调试的) 连接电脑 插入数据线将手机连接到电脑,手机会有弹窗“允许USB调试吗?”,点击允许(有的手机不会弹窗,默认仅充电,可以在通知栏修改连接选项) 可通过命令查看是否已连接 运行 注意:如果你的手机有其他VPN软件并且该VPN设置了“始终开启的VPN”选项,请先关闭,否则即使连接了“Gnirehtet”也可能中途断开无法上网 执行以下命令,会自动检测、安装“gnirehtet.apk”到手机、添加VPN(手机会弹出提示,需要确认)并转发手机网络数据 要停止的话,电脑上直接“Ctrl + C”就行 抓包 wireshark找不到网卡无法抓包解决方法:linux下wireshark无法抓包问题 wireshark抓电脑有线网卡的包即可。由于这种共享网络的方式没有使用额外网口,只能抓电脑出口网卡的报文,手机产生的报文会和电脑本身发送/接收的报文混在一起,算是个缺点 可选:添加gnirehtet快捷启动方式(Desktop entries) 在“~/.local/share/applications/”添加一个desktop文件,让桌面环境菜单能够找到并添加该程序(当然这个desktop文件可以放到任何目录,比如桌面,双击即可运行) 更新数据库 参考:
图片来源:https://www.pixiv.net/artworks/101295432 Linux下从网卡读取数据需要root权限,以普通用户身份运行的Wireshark无法抓包 临时方案 使用root权限启动Wireshark 不太安全的方案 利用“SUID”让所有用户执行特定二进制程序时能够拥有root权限,SUID简单介绍可参看 SUID、SGID和SBIT 推荐方案 给 /usr/bin/dumpcap 添加抓包的权限,添加一个新用户组wireshark,使所有组内用户能够执行 /usr/bin/dumpcap,有的Linux发行版(比如ArchLinux、Ubuntu)用包管理器安装wireshark后,其实默认就是这个方案,只是不会自动将用户加入wireshark用户组而已 查看/usr/bin/dumpcap 如果输出类似上面这样, 文件所属组为wireshark,组成员具有可读和可执行权限,则只需要将当前用户加入wireshark用户组,然后注销重新登录即可 如果不是话,就要自己手动执行创建用户组等全部操作,然后注销重新登录 参考:
图片来源:https://www.pixiv.net/artworks/82352687 要抓取一些由于众所周知的原因无法直接使用的软件的报文或者要抓取软件在不同国家/城市下报文时,可以配置透明代理,在软件客户端不感知代理环境的情况下抓取尽量真实的流量 配置透明代理 以Ubuntu为例,采用v2ray + v2rayA内置透明代理。这个方案配置上比较简单,但日常使用体验上个人感觉比v2ray + qv2ray + cgproxy的方案略差一些 安装v2ray 由于Ubuntu和v2ray官方都没有提供软件源,这里选择第三方的铜豌豆Linux软件源 添加软件源 安装v2ray 安装v2rayA 添加公钥 添加 v2rayA 软件源 安装v2rayA 配置 启动v2rayA并设置开机自启 如果不想开机自启,可以在需要用的时候手动启动 访问http://127.0.0.1:2017/,第一次访问设置帐号密码 点击左上“导入”按钮填写节点链接地址或者订阅地址,点击确认。至于如何获取节点链接地址或者订阅地址,请自己想办法 点击右上角设置,配置参考如下图,也可以根据需要自行修改,修改完成点击“保存并应用”(第四项转发DNS请求有助于让流量更真实,但如果代理节点在国外可能会影响国内网站的访问速度,甚至可能出现无法访问的情况,请根据需要修改) 选择一个节点连接,然后点击左上角启动即可。由于我导入的是订阅地址,会生成一订阅名相关的标签,节点在该标签里,如果导入的是节点地址,节点会出现在“Server”标签里阅地址 设置完成后,访问http://www.ip111.cn/测试一下 抓包 Wireshark Linux安装wireshark之后可能会出现找不到网卡无法抓包的情况,解决方案参考这个:https://blog.geekgo.tech/linux/linux%e4%b8%8bwireshark%e6%97%a0%e6%b3%95%e6%8a%93%e5%8c%85%e9%97%ae%e9%a2%98/ 一般情况下不建议直接将透明代理和要抓包的软件安装在同一设备上,因为: 建议的做法是在配置了透明代理的LinuxPC上开启无线热点,将要抓包的软件安装在其他设备上并连接热点,使用wireshark直接抓取入口无线网卡的报文即可(无线网卡名称一般以“wl”开头,如“wlan0”) 无线网卡 如果你是在Linux PC上配置的透明代理环境,并且恰巧你的主版没有内置无线网卡,那就需要一张USB无线网卡,但市面上很多宣传支持Linux的USB无线网卡实际只是能连接WIFI,并不支持AP模式开热点。目前我测试过的有rt5370芯片和 rt3070芯片的无线网卡linux上都是可以开热点的,也不用折腾第三方驱动,价格在30-40软妹币之间,抓包分析用足够了。 查看无线网卡是否支持AP模式 支持AP模式的话,“Supported interface modes”下会有一行“* AP” 参考: