基于USRPN210实现定位信息欺骗

设备:USRPN210一台,天线一个,千兆网线一根,电脑一台

实验环境:GNU Radio,UHD

源文件:github网站上名为gps-sdr-sim的文件

一,源项目原理

   gps-sdr-sim原理

这个项目的原理是gps-sdr-sim能根据指定的卫星信息文件、坐标信息、采样频率等参数输出二进制的信号文件,将这个二进制文件导入到USRP或者bladeRF之类的无线电射频设备上就可以实现GPS的伪造。

   卫星信息:

必备,可以在nasa官网下载到最新的信息文件,项目源码中已经包括了一个旧的信息文件brdc3540.14n也可以使用。

   坐标信息:

坐标信息有三种方式输入:

  1. 固定坐标
  2. NMEA流文件
  3. 用户定义文件

其中,NMEA和用户定义文件是一系列的时间和坐标,可以伪造移动的GPS位置,具体的使用我还没有测试,我就先使用固定的坐标作为测试。

   采样频率:

采样频率相当于二进制文件每个坐标产生的频率,默认的是2600000Hz,但是USRP中,10000000Hz除以使用的采样频率必须是整数,不然就会出错,所以使用USRP的时候我使用的是2500000Hz。这个采样率过大或者过估计都会有问题,过小可能导致信号不稳定,过大可能在传输过程中会出现传输速度跟不上采样率,这样发出来的信号也是不稳定的。

   二进制文件格式:

输出的二进制文件有三种格式,分别有1-bit、8-bit、16-bit,默认使用的是16-bit的。但是USRP中,支持的是8-bit的二进制文件,所以一定要把这个参数改成8-bit,不然不成功。一开始早就在这个地方走了不少弯路,用了16-bit的输出的信号客户端设备根本识别不了,白忙活了一整天我都开始怀疑人生了。后来我用GNU Radio打开项目里面的输出的py文件,查看各个blocks,才发现第一个blocks是byte转short,而byte是8bits的,所以才搞明白是这里出了问题。

   频率:

这个是输出的信号的中心频率,默认是美国官方的GPS L1信号频段1575420000Hz,按照默认即可,如果不是默认的可能通用的GPS客户端设备不能收到信号。我不太清楚其他国家的GPS卫星的频段是多少,而且这里用的是NASA的卫星信息,估计伪造其他国家的GPS在这个卫星信息上也得重新修改一下,所以我就没有深入尝试。

   二进制信号持续时间:

这个参数决定了信号的持续时间,但是其实输出的时候是循环输出的,所以如果使用固定坐标的话不用太长。默认的是300s,这个时间越大生成的二进制文件也会越大,经过测试,固定坐标情况下30s多一点点就可以完成定位,所以使用60s以上应该都没有问题。但是为了保险起见,我这里保留了默认的300s

   gps-sdr-sim参数

Usage: gps-sdr-sim [options]
Options:
  -e      卫星信息文件(必须)
  -u  用户定义的坐标文件 (动态的位置信息)
  -g     NMEA坐标文件 (动态的位置信息)
  -l     坐标,维度-经度-海拔,例如: 30.286502,120.032669,100
  -t    模拟的开始时间 YYYY/MM/DD,hh:mm:ss
  -d     持续时间 [秒] (最大: 300)
  -o       二进制文件的输出位置 (默认: gpssim.bin)
  -s    采样频率 [Hz] (默认: 2600000)
  -b      二进制文件格式 [1/8/16] (默认: 16)
  -v               更多细节信息

二,定点欺骗具体步骤

1,从github上安装gps-sdr-sim 源文件

(1)打开终端,键入以下代码:

git clone https://github.com/osqzss/gps-sdr-sim.git
         即可在主文件夹里下载好一个名为gps-sdr-sim的文件包如下图所示:

         基于USRPN210实现定位信息欺骗_第1张图片

(2)键入以下命令:

cd gps-sdr-sim
sudo make

输入主机名称后,就会在gps-sdr-sim文件夹中生成一个可执行文件,这个文件很重要。

2,生成可发射文件

(1)输入以下网址:

http://www.gpsspg.com/maps.htm

          在网址中找到一个合适的点并记录其经纬度。(例如,找到北京动物园,其经纬度为:39.9418406828,116.3422268626,如下图所示)

基于USRPN210实现定位信息欺骗_第2张图片

(2)打开终端,进入gps-sdr-sim文件夹,而后生成可发射的bin文件,终端键入的代码如下:

cd gps-sdr-sim
sudo ./gps-sdr-sim -e brdc3540.14n -l 39.9418406828,116.3422268626,100 -s 2500000 -b 8
【注明】:-e后面的文件为源文件自带的星历文件,-l后面为地址的经纬度坐标,100 表示的是高度,-b表示的是字节数,默认为16比特,但此处一定要改为8bit,否则报错。

在输入密码之后,大约过一分钟左右,就会生成一个名字为 gpssim.bin 的文件,这个文件大小可达到1.5G左右。

3,发射bin文件形成欺骗

这一步的目的就是要将可发射文件bin文件发射出去,从而构成定点欺骗,步骤如下:

(1)用千兆网线将USRP同电脑连接,并将USRP接通电源(要确保gnuradio环境已经配置好了),将天线接在RF1上。

(2)打开终端,进入gps-sdr-sim文件夹,发射bin文件。

           终端中具体代码如下:

sudo ./gps-sdr-sim-uhd.py -t gpssim.bin -s 2500000 -x 0 -b 8

【注】:-x表示增益,-b表示比特数,此处一定要注意亲自设为8bit,否则就等着报错吧。

经过一段时间后,打开GPS Test,,可看到以下结果:

基于USRPN210实现定位信息欺骗_第3张图片

基于USRPN210实现定位信息欺骗_第4张图片

之后在飞行模式下,打开高德地图,可以看到已经被定位到北京动物园,如下图所示:

基于USRPN210实现定位信息欺骗_第5张图片

经过上述步骤,则我们实现了定点位置的粗定位。

(未完待续)


你可能感兴趣的:(软件无线电平台)