要求
- 一台 Linux(最好是 Ubuntu 16.04.4 桌面版 64 位)机器(i5 双核 CPU 即可,最好有 USB 3.0 端口)
- 一款支持 Ettus Universal Hardware Driver (UHD)或 bladeRF 驱动的软件定义无线电(SDR)板,例如 USRP B210
- 一台运行闭源 USIM 卡编程软件的 Windows 机器
- 一个兼容 PC/SC 的 SIM 卡读卡器,例如 MCR3512
- 一张与编程软件兼容的 USIM 卡
- 一个 LTE 手机,比如 Oneplus One
构建
srsLTE 是 SRS (www.softwareradiosystems.com) 开发的免费开源 LTE 软件套件。
在三个著名的开源 LTE 协议栈(openLTE、srsLTE 和 OpenAirInterface)中,我发现 srsLTE 兼具 openLTE 的代码优雅性和 OpenAirInterface 的完整性。
使用 srsLTE,我们可以在单台 PC 上运行一个 LTE 网络(eNodeB、MME、HSS 和 S/P-GW)。
在一个全新安装的 64 位 Ubuntu 16.04.4 桌面机器上,使用以下命令安装所需的库:
sudo apt-get install cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev
然后为我们的 USRP B210 安装 UHD 驱动程序:
sudo apt-get install libuhd-dev libuhd003 uhd-host
接下来,使用非 root 用户在主目录中下载并构建 srsLTE:
cd ~
git clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake ../
make
make test
sudo make install
配置
切换回源目录。
cd ~/srsLTE
srsEPC
cp srsepc/epc.conf.example srsepc/epc.conf
cp srsepc/user_db.csv.example srsepc/user_db.csv
srsENB
cp srsenb/enb.conf.example srsenb/enb.conf
cp srsenb/rr.conf.example srsenb/rr.conf
cp srsenb/sib.conf.example srsenb/sib.conf
cp srsenb/drb.conf.example srsenb/drb.conf
运行
cd ~/srsLTE/srsepc
sudo srsepc epc.conf
打开另一个终端:
cd ~/srsLTE/srsenb
sudo srsenb enb.conf
您也可以调整 epc.conf 或 enb.conf 文件,例如更改 MCC 和 MNC,或 DNS 地址。
注意: UE 数据库文件(user_db.csv)必须与运行 srsepc 命令的目录在同一目录下。
从你的手机上搜索“可用网络”,你应该能在本地网络中看到定制的 4G 网络。

USIM 卡
USIM 卡是一个复杂的封闭系统。
通常情况下,你无法使用像 pySim 这样的开源软件来编程在线购买的空白 USIM 卡,因为不同制造商对 USIM 标准有不同的实现。
如果你没有 pySIM 支持的 USIM 卡,例如 sysmoUSIM-SJS1、GrcardSIM、GrcardSIM2 和 MagicSIM,则需要闭源软件,而且大多数情况下,该软件是基于 Windows 的。
另一种方法是直接请卖家为你编程 USIM 卡。eBay 和淘宝上都有很多这样的卖家。
只需确保 ICCID、IMSI、KI 和 OP/OPc 等参数已正确编程。
节省 150 元
我从淘宝上买了一张 USIM 卡,花了 30 元。USIM 卡读卡器和编程软件加起来花了 150 元。

注意:如果此链接失效,只需在淘宝上搜索“openlte”即可。
看来我得为此至少花 180 元。
别急!
在翻阅了中国的程序员网站 CSDN 后,我发现了一篇有趣的帖子 。
博主使用的 USIM 卡编程软件和淘宝店里的图片一样,尽管后者有很重的水印。

两张截图都显示,USIM 编程软件名为 SIM Personalize tools(Copyright: GreenCard Co.,Ltd Ver 3.1.0) 。它们甚至是同一版本!
博主已将配置文件和编程软件都上传至 CSDN,但只提供了参数配置文件的下载链接。
我已经设法找到了编程软件的下载链接在这里 。
不幸的是,像大多数中文网站一样,CSDN 需要积分才能下载。
幸运的是,淘宝上有许多卖家提供 CSDN 下载服务,无论 CSDN 需要多少积分,费用都不到 3 元。
为了省事,我决定在这里提供它。为了安全起见,你最好用一些杀毒软件扫描一下:)
对于 USIM 读卡器,任何兼容 PC/SC 的智能卡读卡器都可以。
烧录 USIM 卡
在 Windows 10 上,只需插入智能卡读卡器,Windows 就会负责安装所需的驱动程序。
然后,打开 SIM Personalize 工具 GRSIMWrite.exe,点击 Read Card,它应该能够无错误地读取存储的参数。

接下来,随心所欲地写入卡片。
对于 srsLTE,请确保 IMSI、KI 和 OP 值与 user_db.csv 文件中的值相同。
启用 IP 网络
使用上面编程的 USIM 卡,您应该能够连接到 LTE 网络。
要浏览互联网:
cd ~/srsLTE/srsepc
sudo su
./if_masq.sh [Interface for Internet connection]
你可以使用 ifconfig 获取机器上的所有网络接口,请确保将连接到互联网的接口名称提供给 if_masq.sh。
注意: 不要使用 sudo 运行 if_masq.sh,它在 Ubuntu 上不起作用。
srsEPC 创建一个虚拟网络接口 srs_spgw_sgi,IP 地址为 172.16.0.0/24。你的手机应该能够获得像 172.16.0.2 这样的 IP 地址。

if_masq.sh 脚本为我们的 Ubuntu 系统启用 IP 转发,并通过连接到互联网的接口,对来自 srs_spgw_sgi 的流量进行伪装。
接下来,在手机的蜂窝网络设置中添加一个接入点名称(APN)。


只需要填写两个字段,第一个 name 可以随意填写;第二个 APN 需要与 epc.conf 中的设置相同,默认为 srsapn。
现在,你可以像使用 Wi-Fi 一样,通过定制的 LTE 网络上网了!
Verizon 服务提供商名称(SPN)值已在 USIM 卡中设置。

使用来自 Netflix 的 FAST Speed Test 进行速度测试。

参考