写在前面 : 实验目的是为了教学交流,坚决抵制违法行为。
一、实验目的
搭建基于OpenBTS的基站,手机接入该基站,进行短信、语音等测试。
二、所用仪器
USRP B210 1台,天线2根,PC机1台
三、实验原理
OpenBTS使用通用软件无线电硬件(如USRP)作为射频前端,并提供了GSM协议栈的开源实现,通过语音交换软件(如Asterisk),可以接入公共网络。
四、实验步骤
本次实验使用USRP B210软件无线电硬件,操作系统为Ubuntu 14.04 64位或更高。OpenBTS安装过程中需要下载一些源码(主要从GitHub下载),请保证计算机正常联网,部分软件包安装可能需要科学,上网。
首先在此实验之前,确保你已经安装完成UHD+GNURadio,并能正常运行,安装过程可能比较慢,具体安装过程请参考链接:
如果在终端输入gnuradio-companion ,回车能够打开GNURadio软件,则表示安装成功;
sudo uhd_usrp_probe ,出现如下界面(来自网络),则表示UHD也正常运行;
开始本次实验
l 操作系统安装与更新
假定初始操作目录为/home/master/
l OpenBTS安装
- 安装依赖:sudo apt-get install software-properties-common python-software-properties git
- 下载源码:
- mkdir openbts && cd openbts
- git clone https://github.com/RangeNetworks/dev.git
- cd dev
- ./clone.sh
- 选择分支:./switchto.sh master
- 编译:./build.sh B210
- 安装:sudo dpkg -i BUILDS/[编译成功时间]/*.deb
- 建议先安装依赖deb包(liba53, libcoredumper),接下来安装应用deb包(range-asterisk, sipauthserve, smqueue, openbts),最后安装配置deb包(range-asterisk-config, range-configs)
- 若配置deb包的配置文件与已安装应用配置文件冲突,选择配置deb包的配置文件
- 如遇依赖问题,无法安装某些deb包,使用sudo apt-get -f install解决
- 启动/停止OpenBTS:
- sudo start/stop sipauthserve
- sudo start/stop smqueue
- sudo start/stop openbts
- sudo start/stop asterisk
- OpenBTS控制终端
- cd /OpenBTS && sudo ./OpenBTSCLI
打开的界面为:
l 解决编译遇到的问题
./build.sh B210 会遇到一些问题,以下逐一分析
- libzmq5 unable to install
- 原因:OpenBTS对Ubuntu 16.04的支持导致某些依赖版本较高
- 解决方法:把build.sh中的libzmq5改成libzmq3,重新执行./build.sh B210
- openbts boost/config.hpp: No such file or directory
- 解决方法:sudo apt-get install libboost-dev
- 'class uhd::rx_Streamer' has no member named 'issue_stream_cmd', 'class uhd::tx_Streamer' has no member named 'recv_async_msg'
- 解决方法:安装Ettus Ubuntu PPA中的libuhd-dev libuhd003 uhd-host
i. sudo add-apt-repository ppa:ettusresearch/uhd
ii. sudo apt-get update
iii. sudo apt-get install libuhd-dev libuhd003 uhd-host
4. /usr/bin/ld: cannot find -lboost_system
- 解决方法:sudo ldconfig
- 备用方法:sudo apt-get install libboost-system1.54-dev
l 使用OpenBTS
注意事项:
- OpenBTS及asterisk等应用默认开机启动,若系统安装其他GSM相关应用,如gr-gsm,注意sudo stop openbts,避连接B210时冲突
- 若uhd_usrp_probe或sudo ./OpenBTSCLI提示无设备,拔插再试
- 在使用之前,确保已经安装好UHD,并且能够正常运行。
参数设置
- 调整增益:devconfig GSM.Radio.RxGain 10
- 开放注册:config Control.LUR.OpenRegistration .*
关闭手机4G,选择2G,在手机 设置里 选取运营商 里面 关闭自动选择
常用命令
- tmsis显示尝试连接本基站设备的IMSI及IMEI等信息
在搭建好基站之后显示连接的设备:
添加用户(手动添加完用户之后,已添加的设备之间就可以通话或者互相发短信)
在未设置开放注册情况下,需先将IMSI添加到OpenBTS数据库,才可以连接设备到网络
- cd NodeManager(在系统环境下的终端操作,不要在打开openbts之后执行)
- ./nmcli.py sipauthserve subscribers create “[设备昵称]” IMSI[IMSI值] [MSISDN(指定设备的手机号)]
- 设备的IMSI值可由tmsis查看,IMSI值的写法是”IMSI”四个字母后紧跟着设备15位IMSI数字值
- Mobile Subscriber ISDN (MSISDN)即手机号可随意指定
执行结果为(我添加了我的MI6,指定其手机号为456,添加了张大佬的honor,指定手机号为123):
之后已经添加的设备之间就可以互相通信。
l 短信
1. Echo SMS
a. 连接到设备之后,收到echo信息
2. 直接互相发送短信
a. 基站内的两部终端可以互相发送短息,号码是添加用户时指定的手机号,我们在添加时指定了我的设备号码为456,另一个同学的设备号码为123.
3. 由基站给用户发短信
a. 由基站直接发给某个终端(由IMSI指定),发送者的号码可随意设定,短信内容暂不支持中文
b. OpenBTS> sendsms [IMSI] [发送者号码] “短信内容”
模仿110给自己发送短信:
l 语音
1. Test Tone Call (2602)
a.拨打号码2602,接通后声音的频率随信号质量变化
随着距离基站的远近,声音发生不同变化(当然是吱吱吱声啦~)。
2. Echo Call (2600)
a. 拨打号码2600,接通后声音为发起方声音的回音
在我说完语音之后,可以明显的听到回音(类似串音的赶脚)。
3. 互拨电话
a. 基站内的两部终端进行正常语音通话,在添加完设备的前提下,两部手机互相通信,123-456
| 实验结果分析及回答问题(个人简单的思考,望大佬们指正)
1.所搭建的系统如何充当伪基站?
指定基站的运营商类型,获取设备的IMSI之后应该把IMSI添加进OpenBTS数据库。
2.在确保手机能接入该系统时需要预先对手机做何种操作?
首先要确保目标手机使用2G,同时基站的信号应该要比当前环境的正常运营商的信号强。实验中通过手动来连接伪基站,并没有自动完成连接。
3.如何检测伪基站的存在?
一般伪基站都会离用户比较近,或者由于它的功率比较小(相比于正常基站),所以可以拨打2602来根据距离伪基站的远近导致声音的变化来做简单的判断。而且伪基站肯定会对用户的手机信号进干扰,如果手机信号总是莫名其妙的自动连续切换,我认为也可以做为简单的判断依据。
此次实验中,主要的问题是环境的搭建(遇到的问题远超文中所提),刚开始在虚拟机上搭建,uhd+GNURadio安装好之后,Openbts总是显示无法找到设备,遂由和张大佬转向实体机操作,在U盘上做Ubuntu16的启动盘,猝!找了块硬盘继续,前前后后又开始重新部署环境,最后终于完成了无线实验之一,也是心累了哈哈哈。