第三章 抓包环境搭建:硬件准备与软件安装

说实话,很多初学者一上来就问我:“老师,我能不能直接用电脑抓LTE空口的包?”我的回答很直接——不行。LTE的无线信号在空中飞,你的电脑网卡可听不懂。想抓空口的包,你得先搭一套能“听”懂LTE信号的硬件和软件环境。

这一章,我就带你把这套环境搭起来。咱们分两块走:硬件选型与准备、软件安装与配置。别急,一步步来。

3.1 硬件准备:你的“耳朵”长什么样

抓LTE空口包,核心硬件就是软件无线电设备(SDR)。说白了,它就是一个能收能发的射频前端,配合电脑里的基带处理软件,就能把空中的LTE信号变成我们能看懂的数据包。

目前主流的选择有两个:USRP 和 LimeSDR。我两种都用过,给你讲讲它们的区别和适用场景。

对比项 USRP(以B210为例) LimeSDR
频率范围 70 MHz – 6 GHz 100 kHz – 3.8 GHz
带宽 最高 56 MHz 最高 61.44 MHz
接口 USB 3.0 USB 3.0
价格 约 ¥5000-8000 约 ¥2000-3000
稳定性 工业级,非常稳定 消费级,偶有掉线
适合场景 实验室、长期部署 个人学习、原型验证
我的建议:如果你是个人学习,预算有限,LimeSDR完全够用。我最初就是用LimeSDR搭的环境,跑了半年没出大问题。但如果是给公司搭测试平台,别省那点钱,直接上USRP B210,省心。

3.2 天线与射频附件

光有SDR板子还不够,你得给它配上天线。LTE常用的频段有Band 1(2.1 GHz)、Band 3(1.8 GHz)、Band 40(2.3 GHz)等。你需要根据当地运营商的频段选择对应的天线。

  • 全向天线:适合室内抓包,信号来自四面八方,简单方便。
  • 定向天线(如八木天线):适合对准特定基站,增益高,信号干净。我在做外场测试时,经常用定向天线对准远处的基站,效果比全向天线好很多。
注意:天线和SDR之间要用SMA转接线连接。别小看这根线,劣质线缆会引入很大的信号衰减。我曾经因为用了根便宜的转接线,折腾了两天发现灵敏度始终上不去,换线后问题立刻解决。

3.3 软件安装:让硬件“活”起来

硬件接好了,接下来就是装软件。我们的目标是搭建一套能抓包、能分析的环境。核心软件有三件套:Wireshark(抓包分析)、srsLTE(轻量级LTE协议栈)、OpenAirInterface(更完整的开源LTE实现)。

我个人习惯在Ubuntu 20.04 LTS上搭建,兼容性最好。下面我按步骤来。

3.2.1 安装Wireshark

Wireshark是抓包分析的主力。安装很简单:

sudo apt update
sudo apt install wireshark

安装过程中会问你是否允许非root用户抓包,选“是”。然后把你自己的用户加入wireshark组:

sudo usermod -a -G wireshark $USER

退出重新登录,就能直接用Wireshark抓包了。

小技巧:Wireshark默认只显示数据包摘要。想看到LTE的NAS层、RRC层细节,需要安装LTE相关的解析插件。srsLTE和OAI都会自带这些插件,后面会讲到。

3.2.2 安装srsLTE

srsLTE是一套轻量级的LTE协议栈,支持eNB、UE、EPC。我们主要用它来配合SDR做信号接收和解码。

安装依赖:

sudo apt install build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev

下载源码并编译:

git clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake ../
make
sudo make install

编译完成后,运行 srslte_install_configs.sh 生成配置文件。然后就可以用 srslte_ue 或 srsenb 启动对应的模块了。

避坑指南:我曾经在编译srsLTE时卡在“找不到libmbedtls”这个错误上。原因是Ubuntu 20.04默认的mbedTLS版本太旧。解决办法是手动从源码编译安装最新版mbedTLS,或者直接用 sudo apt install libmbedtls-dev 安装系统包。建议用后者,省事。

3.2.3 安装OpenAirInterface(OAI)

OAI比srsLTE更完整,支持更多的LTE特性和更精细的协议栈控制。但安装也复杂一些。

OAI推荐使用Ubuntu 18.04,但20.04也能跑。安装步骤:

git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g
source oaienv
cd cmake_targets
./build_oai -I -w USRP

这里 -w USRP 表示使用USRP驱动。如果你用的是LimeSDR,需要改成 -w lime。

编译过程比较长,大概20-30分钟。编译完成后,会在 cmake_targets/lte_build_oai/build 下生成可执行文件。

注意:OAI对内核版本有要求。我遇到过在5.4内核上编译失败的情况,换成5.15内核就好了。如果你也遇到类似问题,先检查内核版本:uname -r。如果版本不对,升级内核再试。

3.4 环境验证:看看能不能抓到包

软件都装好了,怎么知道环境是不是通的?我一般用srsLTE的 cell_search 工具做快速验证。

把SDR插上电脑,接好天线,运行:

cd srsLTE/build
sudo ./srslte/examples/cell_search -f 2120000000

这里的 -f 2120000000 是频率,单位Hz,对应LTE Band 1的中心频点。如果环境正常,你会看到类似这样的输出:

Found cell  Cell ID: 123,  CP: Normal,  PRB: 50,  Ports: 2,  PSS: 456,  SSS: 789

看到“Found cell”就说明你的硬件和软件都正常工作了。如果没找到,先检查天线连接、频点设置,再确认SDR驱动是否加载成功。

我的经验:第一次搜不到小区很正常。别慌,先检查SDR的指示灯——USRP的TX/RX灯应该闪烁,LimeSDR的LED应该常亮。如果灯不亮,大概率是USB驱动问题,重新插拔或换一个USB口试试。

3.5 整体架构图

下面这张图展示了我们搭建的抓包环境整体架构。从天线接收信号,到SDR数字化,再到软件解码,最后进入Wireshark分析,一条完整的链路。

LTE抓包环境架构图 LTE抓包环境整体架构 天线 SDR (USRP/LimeSDR) srsLTE / OAI 基带处理 + 协议栈 Wireshark 数据流向说明: 1. 天线接收LTE射频信号 → SDR进行下变频和数字化 2. srsLTE/OAI对数字信号进行OFDM解调、信道估计、协议栈解析 3. 解析后的LTE信令和数据包通过虚拟网卡或UDP送入Wireshark 注:srsLTE和OAI可二选一,也可同时安装用于对比测试 硬件层 软件层 分析层

3.6 常见问题与解决

搭建环境时,我遇到过不少坑。这里列几个最常见的,你遇到了可以直接对照着查。

问题现象 可能原因 解决办法
cell_search找不到小区 频点设置错误、天线没接好、SDR驱动未加载 检查频点是否对应当地LTE频段;重新插拔天线;运行 sudo uhd_find_devices 确认USRP被识别
Wireshark看不到LTE协议 缺少LTE解析插件 安装srsLTE或OAI后,其自带的 .lua 插件会自动注册到Wireshark。如果没生效,手动加载:Tools → Lua → Load
编译srsLTE报错“找不到FFTW” 依赖库未安装 运行 sudo apt install libfftw3-dev 后重新编译
OAI编译卡在“Building oai”超过30分钟 网络问题导致依赖下载失败 检查网络连接,或使用代理。也可以手动下载依赖包放到 cmake_targets/download 目录
核心要点:硬件选型看预算和场景,软件安装看耐心和细心。环境搭好了,后面抓包分析才能顺利。别怕踩坑,每个坑都是经验。我当年第一次搭环境,光编译就折腾了两天,但一旦跑通,那种成就感是无可替代的。