使用nexus 6P同时获取CSI和RSSI数据(保姆级教程)
记录一下踩坑历史,折磨了我接近半年。
项目地址
设备要求:nexus 6P,手机系统为Android8.0.0(一般在购买二手机器时可以让卖家帮忙刷机并root),虚拟机:Ubuntu16.04 64位(下载地址)
以下将开始固件安装与数据采集
固件安装
对应项目地址中的Getting Started
step 1:在VMware下安装好Ubuntu16.04 64位虚拟机
(不需要像项目里面一样安装xubuntu16.04)
step 2:打开终端(ctrl+alt+T)并安装一些依赖
sudo apt-get install git gawk qpdf adb flex bison
step 3:安装i386库
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
step 4:克隆nexmon项目:
git clone https://github.com/seemoo-lab/nexmon.git
step 5:下载安装Android NDK r11c(仅支持此版本),并配置环境变量
- 在终端进入管理员模式,然后打开并创建文件夹/opt/ndk
sudo su
cd /opt/
mkdir ndk
cd ndk
- 下载ndk开发包
wget -c https://dl.google.com/android/repository/android-ndk-r11c-linux-x86_64.zip
- 解压
apt-get install fastjar
jar xvf android-ndk-r11c-linux-x86_64.zip
- 打开/etc/profile文件
apt-get install vim
vim /etc/profile
- 按i开始编辑,在文件末尾添加以下环境变量:
export NDK_ROOT=/opt/ndk/android-ndk-r11c
export PATH=$NDK_ROOT:$PATH
这里输入完后按ESC后,再依次输出":wq"就可以保存退出vim了
- 刷新环境变量
source /etc/profile
- 给文件赋予执行权:
chmod a+x -R android-ndk-r11c
- 此时在任意路径都可以执行:
ndk-build -v
至此ndk就配置完毕,但是建议把上述的环境变量再添加一份到/nexmon/setup_env.sh文件的末尾,如果不这样做,则需要每次打开虚拟机就手动刷新一次ndk的环境变量:source /etc/profile
step 6:刷新nexmon的环境变量
cd /home/user/nexmon
source setup_env.sh
step 7:执行make指令
make
cd utilities
make
step 8:给手机安装固件
连接手机,并允许此计算机进行调试
make install
step 9:克隆nexmon_csi项目
进入nexmon/patches/bcm4358/7_112_300_14_sta/文件夹并克隆nexmon_csi项目:
cd nexmon/patches/bcm4358/7_112_300_14_sta/
git clone https://github.com/seemoo-lab/nexmon_csi.git
step 10:给手机安装nexmon_csi固件
注意!!!这里一定要按照特定版本的固件,是2020年6月发布的,编号为7e3f9f720e1eb12ef11afd855515981d5a3b715b。我这里实测只有这个补丁可以同时获得CSI和RSSI数据,不然CSI数据就会像这样奇奇怪怪:
血泪教训,真的,千万千万要用这个版本的固件。
以下命令第二行就是回滚到这个对应版本:
cd nexmon_csi
git checkout 7e3f9f720e1eb12ef11afd855515981d5a3b715b
make install-firmware
到这一步手机上要安装的东西都弄好了。
如果你对RSSI数据没有需求,那你可以尝试更旧的版本,不能比这个版本新,不然很有可能出现和我一样的问题。
step 11:生成makecsiparams的可执行文件
cd utils/makecsiparams
make
数据采集
step 1:获得一连串特定编码
./makecsiparams -c 157/80 -C 1 -N 1 -m 00:11:22:33:44:55
-c后面的是157信道和80MHz频率,可以在路由器的管理员界面进行设置的,-m后面的是路由器的mac地址,注意5g和2.4g的mac地址是不同的。
step 2:进入手机进行设置
adb shell
以下就进入手机的命令行了,首先输入指令进入管理员模式:
su
打开wlan:
ifconfig wlan0 up
设置nexutil的参数:
nexutil -Iwlan0 -s500 -b -l34 -vm+IBEQGIAgAAESIzRFWqu6q7qrsAAAAAAAAAAAAAAAAAAA==
上述-v后面接的编码就是之前生成的特定编码
然后设置成monitor模式就行了:
nexutil -Iwlan0 -m1
step 3:利用手机采集数据
tcpdump -i wlan0 -v dst port 5500 -w /sdcard/1.pcap -c 1000
上述指令-w后面的是指定的存储地址,你可以改成手机中的任意地址。-c后面的是采集的数据帧的个数。
采集到的数据幅度图长这样:
如果在测量过程中进行拿起手机又放下的动作连续两次,就会得到这样的图:
感觉还是很不错的!
总结
这玩意对我这种不怎么用Linux的人简直是折磨。安装固件的过程总是出现莫名其妙的bug。愿大家不要在这个上面踩雷了。但是nexmon固件的数据还是很不错的,比Intel 5300要好很多。
使用nexus 6P同时获取CSI和RSSI数据(保姆级教程)相关推荐
- Maix Bit K210人脸识别(内有获取机器码步骤)【保姆级教程】
上一篇 MaixPy IDE Maix Bit K210定时器 介绍 在一张图片中找出人脸, 并且框出人脸,即知道脸的位置和大小,对人脸进行检测与识别. 方法 一种是采用LBP特征进行人脸识别,可进行 ...
- 获取微信小程序页面路径【保姆级教程】
1.进入微信小程序公众平台,登录账号,点击右上角生成小程序码 微信公众平台 2.输入小程序名称或者小程序的APPID或者原始ID,输入完成,然后点击搜索,然后下一步 3.输入自己的微信号之后,点 ...
- 【UE Unreal Camera】【保姆级教程二】手把手教你通过UE获取摄像头帧数据
概述 在UE 摄像头教程一中,我们已经通过Unreal自带的媒体播放器打开了摄像头,并且将摄像头的数据展示在了游戏画面中.当然这只是最基本的功能,一般情况下,我们需要对摄像头的画面数据进行处理,比 ...
- 利用Python获取excel的数据并绘制直方图(保姆级教程,含多组样例)
学习样例 开发工具:python3.8.pycharm2020.3.3 开发过程 分析数据 总共三列数据,分别是年份,月份及对应的客流量,如果将数据可视化,我们可以将年份作为横坐标,可以将客流量总和作 ...
- uniapp 微信小程序获取openid(保姆级教程超清晰)
当需要openid的时候,就看看本仙女的这篇博客✨ 文章建立在你有appid(也就是说微信公众平台你有账号)的基础上,话不多说,let's start ! Step 1 :https://mp.wei ...
- 零星PCB打板|开源广场|每月2张|等你来撸|保姆级教程:嘉立创免费PCB打样获取攻略
目录 缘由 软件:嘉立创EDA专业版(视情况下载,非必需) 软件:嘉立创PC端下单助手(领优惠券) 优惠券在这里: 嘉立创PCB免费打样新规则解读 6层板免费打样 免费订单可指定 券的使用期限 免杂色 ...
- 别找了,小程序实现isbn扫码获取图书信息2022最新可用(保姆级教程内附接口)
关注.收藏.点赞3连
- Nexus 6P获取CSI(含刷机、root)
项目地址 设备要求:型号:Nexus 6P,系统:Android8.0.0 实验路由器:TPL-LINK:TL-WDR4310(非必需) 准备工作 设备相关: 目前nexus 6p仅支持在系统为And ...
- 渗透测试|移动端 nexus 6p 刷入8.1和获取root权限(magisk)
作者: Overture 免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 前言 工作内容中有很多需要抓apk包的情况,之前遇到过不少有root检测.ssl pinn ...
最新文章
- asp用于取代什么技术_.NET的未来:关于.NET5,每个.Net开发人员必须知道什么
- Google JAVA编程风格
- 自学Zabbix3.0版本以上资产清单inventory
- 泽西岛客户:测试外部呼叫
- lEO数值资产系统某平台c2c币数值合约交易平台自动撮合松机器人功能
- Android开发环境搭建Eclipse+JDK+ADT+AVD(系列一)
- MySQL定时备份数据库方案(全库备份)
- python color属性_Python turtle.color方法代码示例
- python调用函数获取最开始的异常_Python使用sys.exc_info()方法获取异常信息
- SQL那些事儿(七)--oracle表空间、用户查看基本语句
- C语言函数库之字符串连接函数(string.h)
- librdkafka 封装的C++类
- Java程序员怎样考察报表工具的开发效率
- SpringBoot中使用Aspect实现切面,超详细
- 1133_SICP开发环境搭建
- 5g通用模组是什么_5G通用模组需要做哪些温湿度可靠性测试?
- sdcard里边的东西能删除吗_手机内存中有一个sdcard文件夹删除不了
- Pycurl的简单使用与对比
- Android图片加载框架最全解析(五)
- 微信又更新了,这次新增了一个大家喜闻乐见的新功能?
热门文章
- 常用 flash CPU占用和内存问题优化
- PDF阅读器帮你解决文档字体显示难看的问题
- 【HTML——网页端“超级玛丽”】(游戏效果+代码)
- 转载:Java并发编程:volatile关键字解析
- 安信可推荐 | 安信可ESP32-S3系列模组和ESP8266系列模组硬件参数对比。
- RL:prat1:key_concepts_in_RL强化学习
- 算法 | 输出扑克牌中的最大5连牌/6连牌/7连牌顺子 - Java实现
- 没有电商巨头有钱,又要挑战双十一流量高峰,一次低成本、高质量的大促是如何做到的?
- arm上的webdav配置
- 机器学习——XGboost进行分类预测,模型优化的实战