Windows 下使用 GNU Radio 和 GPS-SDR-SIM
做 GPS 欺骗实验前需要准备点东西,一个是 GNU Radio,相当于是 hackrf 的运行库,它提供了 hackrf_info、hackrf_transfer 这些命令;第二个是 gps-sdr-sim 这个开源项目,使用广播星历文件生成伪造 GPS 的信号文件,hackrf 只负责发送信号不负责伪造,所以伪造的工作就交给 gps-sdr-sim 来完成。
GNU Radio
控制 hackrf 需要 gnuradio 环境,默认在 Ubuntu 和 Kali 下会安装,如果是 Windows,就需要到 gnuradio 的官网下载一键安装包 Windows Radioconda installer,没有任何技巧。
记好软件的安装路径,用于设置环境变量,默认是在 %USERPROFILE%\radioconda\Library\bin 下面。
设置好之后就可以在命令行终端直接使用 hackrf 命令了。
GPS-SDR-SIM
安装 gps-sdr-sim 这个开源项目,需要准备两个东西,一个是星历文件,一个是项目源代码。
星历文件
gps-sdr-sim 需要广播星历文件,GitHub 的项目库下载下来的星历文件不一定是最新的,网上官网的下载地址是 https://cddis.nasa.gov/archive/gnss/data/daily/,但这个需要注册,我一直注册不成功。然后就发现了可以从武汉大学 IGS 数据中心下载。
每次试验尽量使用最新的星历文件,老旧的星历文件会降低成功率。
还有一个网站也可供参考:数据下载 (csno-tarc.cn)
星历文件命名规则
下载下来的文件大概是这样一种命名:brdc1230.24n
brdc是固定前缀123表示一年中的第 123 天(年积日)0表示全天24表示 2024 年
知道命名规则后就可以知道手上的星历文件是不是新的了。
Windows 下编译 GPS-SDR-SIM
编译项目需要 Visual Studio(紫色的那个,不是 Visual Studio Code)。
安装组件选择桌面 C++ 开发即可。
创建空项目,建议命名为 gps-sdr-sim。
将 getopt.c 和 gpssim.c 两个文件加入源文件。
顶部菜单->生成->生成解决方案
在项目目录下的 \x64\Debug 路径就能找到 gps-sdr-sim.exe 这个执行文件了。可以把这个文件放到 gnuradio 的 bin 路径下,这样 gps-sdr-sim 就加入了环境变量,在命令行终端可以直接使用了。
生成信号文件
gps-sdr-sim 命令参数:
-e:指定 RINEX 格式的 GPS 导航电文文件,即广播星历文件(必需参数)-u:ECEF 坐标系格式的轨迹文件(动态模式)-x:经纬度加海拔格式的轨迹文件(动态模式)-g:NMEA GGA 数据流(动态模式)-c:以 ECEF 坐标系格式指定位置,单位是米(静态模式)。例如:3967283.154,1022538.181,4872414.484。-l:以经纬度加海拔的格式指定位置(静态模式)。例如:35.681298,139.766247,10.0。-t:设定场景的开始时间,格式为 YYYY/MM/DD,hh:mm:ss。这指定了模拟信号的开始时间点。-T:覆盖 TOC(Time Of Clock)和 TOE(Time Of Ephemeris)到场景的开始时间。这可以用来同步模拟的 GPS 时间与真实世界的时间。-d:持续时间,单位秒(动态模式最大 300,静态模式最大 86400)-o:输出的数据文件名称(默认是 gpssim.bin)-s:采样率,单位 Hz(默认值 2600000)-b:I/Q 数据格式(可选:1、8、16,默认是 16,hackrf 用 8,blader 用 16)-i:禁用航天器场景中的电离层延迟。在某些高精度的模拟需求中,可能需要排除电离层对信号的影响。-v:显示有关模拟频道的详细信息。这可以帮助用户更好地理解和分析模拟的信号。
举例:
|
|
使用默认的采样率即可,因为后面使用 hackrf 发送信号时要指定采样率。