使用srsLTE搭建4G基站
很多IoT设备都在使用4G网卡,但测4G链路安全时候,毕竟不像WIFI测试那么方便,CMW500的价格还是很贵的,尤其是想IoT安全爱好者童鞋,或者其他移动端需要测试4G链路的,其实可以使用低成本SDR方案,也就是这里要介绍的。
最低成本可以使用LimeSDR Mini+PC机,也可以使用BladeRF x40或者x115来实现。如果条件允许,还是使用USRP B200mini、B210或者N210甚至X310比较舒服。
srsLTE 是软件无线电系统(SRS)的开源SDR LTE软件套件。是由爱尔兰SoftwareRadioSystems (SRS)公司开发实现的免费开源LTE SDR平台,在AGPLv3 license许可下发布,并且在实现中使用了OpenLTE的相关功能。有关文档,指南和项目新闻,请参见srsLTE项目页面(www.srslte.com)
srsLTE包括以下组件:
- srsUE - 完整的 SDR LTE UE 应用,支持从 PHY 到 IP 层特性
- srsENB - 完整的 SDR LTE eNodeB 应用
- srsEPC - 轻量级 LTE 核心网络实现,支持 MME, HSS 和 S/P-GW
- 高度模块化的共用库 PHY, MAC, RLC, PDCP, RRC, NAS, S1AP 和 GW层
通用特性:
- 支持 LTE Release 10
- 测试频率: 1.4, 3, 5, 10, 15 and 20 MHz
- 传输模式1(单天线),2(发射分集),3(CCD)和4(闭环空间复用)
- 基于频率的ZF和MMSE均衡器
- 演进的多媒体广播和多播服务(eMBMS)
- 高度优化的Turbo解码器,采用Intel SSE4.1 / AVX2(+100 Mbps)和标准C(+25 Mbps)
- 支持 MAC, RLC, PDCP, RRC, NAS, S1AP 和 GW 层
- 具有每层日志级别和十六进制转储的详细日志系统
- MAC层wireshark数据包捕获
- 命令行跟踪指标
- 详细的输入配置文件
- 用于EPA,EVA和ETU 3GPP频道的信道模拟器
- 基于ZeroMQ的伪RF驱动器,用于IPC/网络上的 I/Q
srsUE 特性:
- FDD 和 TDD 配置
- 运营商聚合支持
- UE的小区搜索和同步过程
- 软USIM支持Milenage和XOR身份验证
- 使用PCSC框架的硬USIM支持
- 在网络连接时创建的虚拟网络接口tun_srsue
- QoS 支持
- i7四核CPU中20 MHz MIMO TM3 / TM4配置中的150 Mbps DL。
- i7四核CPU中20 MHz SISO配置中的75 Mbps DL。
- i5双核CPU中10 MHz SISO配置中的36 Mbps DL。
srsUE 在如下网络设备中测试和验证通过:
- Amarisoft LTE100 eNodeB 和 EPC
- 诺基亚FlexiRadio系列FSMF系统模块具有1800MHz FHED无线电模块和TravelHawk EPC模拟器
- Huawei DBS3900
- Octasic Flexicell LTE-FDD NIB
srsENB 特性:
- FDD 配置
- 循环MAC调度程序,具有类似FAPI的C ++ API
- SR 支持
- 定期和非周期性CQI反馈支持
- 标准S1AP和GTP-U与核心网络接口
- 具有商用UE的20MHz MIMO TM3 / TM4中的150Mbps DL
- 具有商用UE的SISO配置中的75 Mbps DL
- 20 MHz的50 Mbps UL,商用US
- 用户平面加密
srsENB已通过以下手机进行测试和验证:
- LG Nexus 5 and 4
- Motorola Moto G4 plus and G5
- Huawei P9/P9lite, P10/P10lite, P20/P20lite
- Huawei dongles: E3276 and E398
srsEPC 特性:
- 单个二进制、轻量级LTE EPC实现,具有:
- MME(移动性管理实体)具有到eNB的标准S1AP和GTP-U接口
- 标准SGi的S/P-GW暴露为虚拟网络接口(TUN设备)
- HSS(归属订户服务器),具有CSV格式的可配置用户数据库
- 支持分页
硬件支持:
支持如下硬件:
- USRP B200
- USRP B210
- USRP B200mini
- USRP B205mini
- USRP N210
- USRP X310
- limeSDR
- bladeRF
Github网址:https://github.com/srsLTE/srsLTE
安装部署srsLTE建议用物理机,因为一些指令优化、时序要求非常精准,比如双向验证鉴权的时候,差一点都不行,如果不使用USRP N210或者X310一类通过网络的SDR硬件稳定性,而使用USB接口的话虚拟机稳定性略差。
这里使用Ubuntu 16.04搭配USRP B210进行测试,使用root账户直接安装配置。
先安装低延时内核,之后重启加载新内核:
apt-get install linux-lowlatency
apt-get install linux-image-`uname -r | cut -d- -f1-2`-lowlatency
apt-get install linux-headers-`uname -r | cut -d- -f1-2`-lowlatency
reboot
需要注意的是,之后如果升级内核,需要手动再安装低延迟内核!
先安装UHD,使用pybombs安装或者源码直接安装都可以,具体如前文所述,这里不再重复。如果是BladeRF、LimeSDR也一样,先装驱动。
在Ubuntu下也可以选择用apt安装:
add-apt-repository ppa:srslte/releases
apt-get update
apt-get install srsepc srcenb srsue stelte
但需要注意的是,uhd驱动不能用最新的,否则加载usrp会失败。所以,还是建议使用源码编译安装。
这里再讲下用源码安装。
安装srsGUI:
apt-get install cmake g++ libpython-dev python-numpy swig git libsqlite3-dev libi2c-dev libusb-1.0-0-dev libwxgtk3.0-dev freeglut3-dev libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev libboost-system-dev libboost-test-dev libboost-thread-dev libqwt-dev libqt4-dev
git clone https://github.com/srsLTE/srsGUI.git
cd srsGUI
mkdir build
cd build
cmake ../
make -j4
make install
ldconfig
安装SoapySDR:
git clone https://github.com/pothosware/SoapySDR.git
cd SoapySDR
git checkout soapy-sdr-0.7.2
mkdir build
cd build
cmake ..
make -j4
make install
ldconfig
安装srsLTE:
git clone https://github.com/srsLTE/srsLTE.git
cd srsLTE
mkdir build
cd build
cmake ../
make -j8
make test
make install
ldconfig
安装完成后生成配置文件,配置文件user生成到用户路径~/.config/srsLTE/,service生成到/etc/srsLTE路径:
srslte_install_configs.sh user
配置网络接口,参数是默认能上网的网口,这里是eth0:
srsepc_if_masq.sh eth0
最后再添加SIM卡的配置,主要是IMSI、KI、OPC,编辑~/.config/srsLTE/user_db.csv文件,格式为:
(ue_name),(algo),(imsi),(K),(OP/OPc_type),(OP/OPc_value),(AMF),(SQN),(QCI),(IP_alloc)
ue3,mil,221010123456789,6874736969202073796D4B2079650A76,opc,504F20634F6320504F50206363500A4F,8000,000000001234,7,dynamic
再将这些参数写入SIM卡,这里建议使用GPSIMWrite,简单便捷,相比pysim还是方便不少,缺点是只能在Windows下。写卡器可以使用MCR3512、M100等营业厅所用写卡器都可以,用Bludrive IISIM也可以。
白卡选择LTE卡就可以,很多手机或者终端厂商需要用白卡配合CMW500一类综合测试仪进行测试,所以检索测试白卡关键字能买到,价格不便宜。仅供学习使用,请勿用于非法用途!
具体可以设置完LTE的IMSI15、KI和OPC之后,点击Same With LTE,之后点击Write Card写入白卡:
把写好的卡装入手机,再分别启动srsepc和srsenb:
这样srsLTE就启动了,下行2685MHz上行2565MHz。如果不使用USRP,使用BladerRF或者LimeSDR也类似,在启动时候会自动加载。
注:如果USRP、BladeRF驱动都安装了,个别人的环境会出现从USRP换BladeRF无法加载的问题,进入srsLTE的build目录,检查CMakeCache.txt文件中BLADERF_FOUND是TRUE。如果是FALSE,就删掉CMakeCache.txt再重新“cmake..”,按照前面的步骤重新编译安装srsLTE。
注:为了获得最佳性能,建议禁用CPU频率动态调整,比如以下脚本:
for f in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_governor ; do
echo performance > $f
done
在srsenb界面可以输入t回车来实时查看snr、bler等性能指标参数,如图所示:
如果电脑配置高的话,可以打开星座图,修改enb.conf,将enable设置为true,会增加CPU负载:
打开手机的网络选择界面,将手机注册进入网络:
如果手机无法搜索到信号,或者搜到了无法加入,先用其他SDR或者频谱仪检查下是否有信号发出,其次检查信号是否有频偏,因为每种手机对频偏的容忍度是不一样的。笔者实测中,华为的兼容性是最好的。
如果有频偏,修改“ue.conf”中的“freq_offset”参数,如图所示。正常情况下如果使用官方原版SDR设备,而不是山寨SDR设备,很少出现这种情况。另外,使用GPSDO或者其他稳定的时钟输入,也能避免这种问题。
如果还是无法搜索到信号,那就可能是手机的基带问题,比如在默认配置下,测试发现小米MIX就无法搜索到,可以修改下频段,也就是“EARFCN”参数,也可以直接在srsenb执行时加参数:
srsenb ~/.config/srslte/enb.conf --rf.dl_earfcn 1575
再测试就能搜索到了,如图所示。
EARFCN和频段对照关系如下图所示:
当然,注册进网络后,还需要在电脑上配置nat转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
在手机上配置APN,也就是epc.conf中默认设置的srsapn:
手机上APN设置里新建,只需要设置名称和APN即可:
然后手机就可以愉快地上网了:
再进行一次测速:
受限于家里宽带的速度,总体还可以。
同时,在部署的电脑上可以使用wireshark进行抓包,可以对手机的4G流量进行分析,用于手机、平板、工控机等使用4G网络的设备进行分析研究。
除了enb用于手机,还可以使用ue让电脑与电脑连接,这里使用另一台电脑外接一个USRP B210,安装部署流程一致,只是执行应用的时候不是srsepc和srsenb,直接执行srsue即可:
相当于这个USRP就是一个LTE基带,连上基站后会创建一个虚拟网卡tun_srsue,分配的IP是172.16.0.2和srsenb做创建的虚拟网卡在一个网段,可以互相ping一下:
和srsenb类似srsue也可以打开星座图,修改ue.conf,将enable设置为true,如图所示。同样会增加CPU负载,效果如图所示。
相比OAI,srsLTE对电脑的性能要求更高一些,但配置更加简便。
更多内容可以看官方文档:
https://docs.srslte.com/en/latest/index.html
最后附一个淘宝的参考购买链接:
https://item.taobao.com/item.htm?id=615846456252
这篇文章转载自简老师的博客:
https://www.white-alone.com/%E4%BD%BF%E7%94%A8srsLTE%E6%90%AD%E5%BB%BA4G%E5%9F%BA%E7%AB%99%E7%94%A8%E4%BA%8E%E6%97%A5%E5%B8%B8%E6%B5%8B%E8%AF%95/
欢迎大家关注简老师的博客
- sql server 使用函数辅助查询
- sql server存储过程编程
- sql server 2008 数据库的完整性约束
- sql server T-SQL 基础
- sql server 触发器
- T-SQL 查询、修改数据表
- sql server 事务处理
- Android P专区免费开放 -- 同样的Android,不同的体验
- YJango:TensorFlow中层API Datasets+TFRecord的数据导入
- CentOS7上ElasticSearch安装填坑记
- ASP.NET Core 阶段性总结
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程案例演示
- C# 窗体常用API函数 应用程序窗体查找
- C#进阶系列——WebApi接口测试工具:WebApiTestClient
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php创建多级目录与级联删除文件的方法示例
- Linux VPS定时备份服务器/网站数据到Github私人仓库
- Laravel框架验证码类用法实例分析
- Yii框架常见缓存应用实例小结
- 使用Docker搭建DPlayer视频弹幕接口API后端
- php+jQuery ajax实现的实时刷新显示数据功能示例
- yii2.0框架使用 beforeAction 防非法登陆的方法分析
- PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
- php项目中类的自动加载实例讲解
- Yii框架参数配置文件params用法实例分析
- 使用Kotlin实现文字渐变TextView的代码
- thinkPHP5框架路由常用知识点汇总
- PHP实现一个限制实例化次数的类示例
- AndroidStudio中重载方法@Override的使用详解
- mysqli扩展无法在PHP7下升级问题的解决