IoT设备程序开发及编译环境搭建初体验
引言
Mirai事件一经曝出,立即引领了一轮研究IoT设备的热潮。目前,对Mirai的报告大多只是在对其功能实现上的介绍,却很少提及如何实现IoT设备程序开发的测试环境。本文在对Mirai的源码研究的基础上,实现了一个比较简单的IoT设备开发编译环境。该工具能自动配置交叉编译环境,使其可以满足简单的物联网开发测试。
编译环境搭建
采用脚本的方式,在git中为config.sh,可自动安装交叉编译工具安装包,并将可执行目录配置到环境变量中。具体步骤如下,采用wget到固定的网站上下载交叉编译安装包(需要其他交叉编译工具包,可自行添加),解压即可用,不用对安装包进行编译安装,并将安装包可执行文件目录写入/etc/profile的末尾,最后使用source /etc/profile使其生效,如未生效,手动执行命令source /etc/profile即可。

编译脚本
编译脚本在git上为build.sh,可根据情况对bot文件进行编译。编译分为release模式和debug模式,release模式对bot文件进行交叉编译,使其适用于不同的嵌入式架构;debug模式直接对bot文件进行编译,并在debug程序运行的过程中会打印出调试信息。

测试环境
小米路由器3一台,选择它,是因为它可以方便地安装SSH插件,具体的方法,可参照:
https://jingyan.baidu.com/article/624e7459ae65e834e8ba5afd.html

登陆上小米路由器,如图所示:

测试方法
下载该项目程序,git地址为:https://github.com/scu-igroup/IoT_bot
git上主要存放的是bot客户端程序,其中config.sh为交叉编译环境自动配置脚本,build.sh为程序编译脚本,需要先运行config.sh搭好交叉编译环境,才能对bot程序进行编译。

客户端程序编译及运行:
本项目的文件相当于实现了一个简单的是客户端,先在bot目录下的include.h中更改要连接的IP和port。运行build.sh 脚本编译程序,如:./build.sh debug
即可在debug目录下编译好所要的程序。由于小米路由器的CPU采用的是MIPS架构,系统为Linux,在测试过程中,只有用mipsel-gcc编译的程序才能正常运行,下面会做详细说明。因此,不同CPU架构的IoT设备,需要用对应的交叉编译工具,才能编译出能正常运行的可执行程序。下图中,即为编译出的适应于不同架构的可执行程序。

对于如何判断某个IoT设备适用哪种可执行程序,通过看路由器的cpuinfo,就可以知道cpu model的架构,为MIPS;通过查看路由器的系统版本,为linux2.6.36,即可查知该系统支持的库函数,在程序开发的时候,查明所用的库函数该系统是否支持非常重要,以免引起程序意外退出。如下图所示为小米路由器的cpuinfo和系统版本信息。


编译好程序后,在debug目录下找到./mirai.mipsel程序,用scp命令将该程序投放到路由器的tmp目录下(小米路由器支持scp命令,其他的IoT可能不支持,需要探测其支持的命令工具),运行该程序,如下图:

遇到的问题:
在投放可执行程序过程中,需要注意CPU是大端存储还是小端存储的问题,在实验过程,采用mips-gcc编译的程序,直接运行,会报如下错误:

排查后才知道,mips-gcc编译出的为大端存储的可执行程序;mipsel-gcc编译出的为小端存储的可执行程序。小米路由器为小端存储,故用mipsel-gcc编译的程序才能正常执行。
服务端程序:
服务端比较简单,采用的是现成的工具,找一台Linux主机(虚拟机即可),安装nc工具(精悍的小工具),在centos系统下可直接安装: yum install nc
在客户端程序已运行的情况下,运行:nc –l 9999 //监听9999端口
只要客户端运行该IP下的9999端口,即可建立通信。
服务端程序运行图为:

总结
该测试程序是在Mirai源码的基础上做的裁剪,已删除攻击模块,目的在于做一个针对IoT设备的程序开发测试。总的来说,Mirai到目前为止都还是一款先进的物联网程序,值得大家深入研究,并做相应的测试。最后,不足之处,大家多多提出来一起讨论。
IoT设备程序开发及编译环境搭建初体验的更多相关文章
- Tiny4412 开发板 编译环境搭建【转】
本文转载自:http://blog.csdn.net/beijiwei/article/details/51055369 版权声明:本文为博主原创文章,未经博主允许不得转载. /*********** ...
- Cocos2dx3.1-Android环境搭建初体验
初玩Cocos2dx,多多包涵. 感觉版本号之间的差异比較大.相对前面的版本号来说.3.X更easy上手.更方便了. 一.安装python.我的python-2.7.3. 配置环境变量 系统变量里:在 ...
- windows下cocos2dx3.0开发环境及Android编译环境搭建
cocos2dx更新到了3.x版本号,自己一直没有换,如今开发组要求统一换版本号,我就把搭建好开发环境的过程记录下来. 一.Windowns下开发环境搭建 1. 所需工具 1)coc ...
- ubuntu12.04下安卓编译环境搭建总结
前言: 因为工作需要,经常要编译安卓下的动态库,公司有已经搭建好环境的服务器,但是第一自己想自己搭建一下了解一个整个过程,另外,公司的服务器也经常出现问 题,导致编译不了,所以就想自己搭建环 ...
- 使用Kotlin开发Android应用 - 环境搭建 (1)
一. 在Android Studio上安装Kotlin插件 按快捷键Command+, -> 在Preferences界面找到Plugins -> 点击Browse repositorie ...
- C语言编程入门之--第二章编译环境搭建
第二章 编译环境搭建 导读:C语言程序如何工作,首先需要编译链接成可执行文件,然后就可以运行在不同的环境中,这个“环境”的意思就是比如说,电脑,手机,路由器,蓝牙音箱等等智能设备中,其中编译器启到了关 ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- Emscripten编译环境搭建--将C和C++编译成JS
Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...
- u-boot 移植(一)编译环境搭建
u-boot 移植(一)编译环境搭建 soc:s3c2440 board:jz2440 uboot:u-boot-2016.11 toolchain:gcc-linaro-7.4.1-2019.02- ...
随机推荐
- Python GUI界面开发环境配置:Pycharm+PyQt5
通过DoS命令行执行如下命令,可能需要管理员权限. 检查Python版本:python 更新pip版本:python -m pip install --upgrade pip 安装PyQt5: pip ...
- Python9-迭代器-生成器-day13
迭代器# print('__iter__' in dir(int))# print('__iter__' in dir(list))# print('__iter__' in dir(dict))# ...
- WIN10配置MAVEN
添加新的系统环境变量M2_HOME, 并设置其值为你安装的目录MAVEN_HOME=D:\Softwares\apache-maven-3.2.2. 更新系统PATH 变量, 添加;%M2_HOME% ...
- MIP启发式求解:局部搜索 (local search)
*本文主要记录和分享学习到的知识,算不上原创. *参考文献见链接. 本文讲述的是求解MIP问题的启发式算法. 启发式算法的目的在于短时间内获得较优解. 个人认为局部搜索(local search)几乎 ...
- PAT Basic 1039
1039 到底买不买 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么 ...
- SQL server游标基本结构
简单游标遍历数据: BEGIN DECLARE QZ_cursor CURSOR SCROLL FOR /*创建游标*/ SELECT NAME FROM USERINFO/*要遍历的数据*/ OPE ...
- [android 代码search地址]
http://www.androidcodesearch.com/source/packages/apps/Settings/src/com/android/settings/SecuritySett ...
- 九度oj 题目1140:八皇后
题目描述: 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的 ...
- nginx的详解(三)
6.禁止访问某个文件或目录1)禁止访问以txt或doc结尾的文件location ~* \.(txt|doc)${root /data/www/wwwroot/linuxtone/test;deny ...
- 查询UNDO使用情况
查看UNDO事务占用情况 SELECT s.username, s.sid, pr.PID, s.OSUSER, s.MACHINE, s.PROGRAM, rs.segment_id, r.usn, ...