一种基于WIFI连接方式的数据传输方法
技术领域
本发明涉及信息安全技术领域,特别涉及一种基于WIFI连接方式的数据传输方法。
背景技术
在电子取证当中,智能手机由于自身硬件及移动端分析App软件的局限性,对一些重要数据文件只能传入到电脑端再结合强大的电子数据分析软件对这些数据进行更专业,更深度的挖掘提取分析。绝大部分取证类软件都是通过USB传输方式拷贝智能手机上数据到电脑端。以下总结以USB连接方式传输到电脑端的不足:
1、USB传输的硬件条件是:电脑端USB端口,手机端USB端口,及USB线三者完好且连接正常,有一者出现问题则无法完成USB传输。
2、USB传输的软件条件是:电脑端必须安装手机连接驱动或第三方手机助手,手机端对数据请求的允许操作等,一方出问题则无法完成USB传输。
3、在正常USB传输过程中,由于USB端口供电不足或设备移动等客观因素导致传输中断。
4、USB传输要求手机端文件权限必须为可读可写的超级权限,某些文件权限修改失败则无法传输。
本发明所用到的专用名词如下
TCPListener:微软基于Socket封装的C#调用库,用于侦听和阻塞同步模式接受传入的连接请求。可以使用一个TcpClient与TcpListener建立连接。创建一个使用TCPListener需用到本地IP地址和端口号,或者只是一个端口号,调用本地默认IP:127.0.0.1,即可监听客户端的连接请求。
发明内容
本发明针对现有技术的缺陷,提供了一种基于WIFI连接方式的数据传输方法,能有效的解决上述现有技术存在的问题。
一种基于WIFI连接方式的数据传输方法,包含以下步骤:
S1:配置无线网卡开启局域网;
S2:电脑端开启TCPListener监听;
S3:生成用于WIFI连接的二维码图片;
S4:创建传输的数据包协议;
S5:创建监听数据传输异常模块;
S6:手机端扫描电脑端的二维码图片建立数据传输通道;
S7:约定用于数据传输的安全密匙;
S8:设计电脑端接收数据的高速缓存;
S9:电脑端接收并解析数据。
作为优选,S1的详细步骤如下:
S11:检测无线网卡,电脑端调用底层封装获取识别无线网卡,当有多张无线网卡时自动获取发射频率最高的作为电脑端开启局域网的WIFI网卡设备;
S12:开启电脑端WIFI局域网,调用window系统中的底层WIFI设置接口,创建电脑端WIFI局域网,该WIFI局域网底层句柄监听模块中加入只识别手机端设备接入,有效的防止其他设备的加入影响数据传输速率及数据安全性。
作为优选,S2的详细步骤如下:
S21:创建TcpListener,其详细步骤如下:
S221:获取本地IP地址:如192.168.0.101;
S222:设置本地IP及端口号,分析确定该端口号是否被占用;
S223:创建两个TcpListener:listenerString和listenerBytes,listenerString用于协议包的传输,listenerBytes用于纯Json数据的传输;
S224:开启两个线程thTcpListenString和thTcpListenBytes,分别监听listenerBytes和listenerString上的连接请求;
S22:创建TcpClient,在监听线程thTcpListenString里已阻塞的方式创建TcpClientclientString=listenerString.AcceptTcpClient();
在监听线程thTcpListenBytes里已阻塞的方式创建TcpClientclientBytes=listenerBytes.AcceptTcpClient()。
作为优选,S3的详细步骤如下:
S31:调用QrCodeEncodingOptions二维码生成对象,设定二维码生成对象的高,宽,字符集,容错级别及格式等重要参数,通过设置参数创建二维码生成器;
S32:传入IP和端口到二维码生成器生成Bitmap格式图片,界面展示图片为BitmapSource格式,所以需将Bitmap格式转为BitmapSource格式,将BitmapSource格式数据生成图片对象并在界面展示。
作为优选,所述S4中电脑端有两个TcpListener监听手机端的连接:
当电脑端监听到一个手机端连接时:在两个TcpListener里分别创建一个线程与手机端建立连接;
当多手机端与电脑端建立连接时:执行S32,同时任务线程池发挥线程调度作用,确保多手机同时传输数据时的正常进行;
每个手机端与电脑端连接后都创建ListenClientString和ListenClientBytes两个数据传输通道,其中ListenClientString只传输JsonData协议包,ListenClientBytes则只负责传输具体的数据流;
协议包设计为一个JsonData类包含:phoneIMEI,jsonType,jsonMsg;
jsonType定义了:“Phone”,“SMS”,“CALLLOG”,“CONTACT”,“BLUETOOTH”,“WIFI”,“APP”,“POSITION”,“SYSTEM”,“END”共10种消息类型,其中“Phone”数据为Android手机基本信息,“END”指示数据传输完毕,其余消息类型是传输具体采集数据。
作为优选,所述S5中监听传输断开线程设计了三种状态:
1.当连接一个手机端时即开启一个监听连接的线程,该线程采用每10毫秒/次的监听频率不断检测当前数据传输对象TcpListener的连接状态;
2.手机端开启异常断开后重连的WIFI逆向监听接口,并在第一次连接时传输给电脑端并保存;
3.监听线程触发连接断开事件时,立即采取WIFI逆向连接程序,再次连接成功后根据记录下的断点开启数据续传。
作为优选,S6的详细步骤如下:
S61:电脑端成功开启后打开生成的二维码连接图片供手机端连接;
S62:手机端打开并在后台提取需要传输的数据源,包括:手机基本信息,短信,通话记录,联系人,蓝牙信息,App安装信息,位置信息,系统信息,将上述数据源保存到内存中;
S63:手机端扫描电脑端的二维码图片并开始上传该手机基本信息,当收到电脑端的回执消息后确认数据传输通道已成功建立,依次传输S4中准备的数据。
作为优选,S7的详细步骤如下:
S71:电脑端生成密匙,当检测到有一个手机客户端已连接上来,则随机生成一个6位数的字母与数字随机出现的密匙;
界面显示此密匙,在后续的数据传输过程中会对数据流进行加密及解密处理,程序内部设计了加密与解密算法;
S72:手机端输入密匙传输,在手机客户端上输入电脑端显示的传输密匙,经过后台数据处理,对接下来要传输的数据进行加密处理;
S73:开始向电脑端传输加密数据。
作为优选,所述S8中电脑端开辟了一段10MB内存用于数据缓存空间,用队列模式将每次数据缓冲区接到的数据都先写入该缓存;
缓存数据达到最大容量时,将该队列缓存数据由10个I/O线程分别写入本地文件中;
可连接10个或以上手机设备,可使用100MB或以上内存空间做缓存操作;
每个手机端在闲置1分钟时,自动销毁该缓存空间,在手机端下一次请求传输数据时再次创建高速缓存空间;手机端断开时自动释放创建的高速缓存空间。
所述S9的详细步骤如下:
S91:电脑端接收手机端数据流;
S911:当一个手机连接上时,首先在ListenClientString通道中接收到手机端发送的手机基本信息数据协议包JsonData,PC端成功解析数据后,再从此通道发送给手机端一个回执消息,告知已收到基本数据可以开始在发送数据,这时手机端开始往ListenClientBytes通道发具体数据;
S912:电脑端在ListenClientBytes通道接收字节流并写入内存中的数据缓冲区,当在ListenClientString通道中接收到“END”消息包时表明手机端已成功发送完具体数据,电脑端关闭ListenClientBytes通道的数据接收,并从内存里的数据缓冲区里取出刚才传输的数据流转码并保存到该手机的连接对象的资源字典中;
S92:电脑端解析Json数据;
电脑端共设计了手机基本信息,短信,通话记录,联系人,蓝牙信息,App安装信息,位置信息,系统信息7个类对象,需要将Json数据反序列化为具体的类对象
经过S62后,原始Json数据再保存一份,供后续的数据导出功能使用。
与现有技术相比本发明的优点在于:
1、电脑端通过外接无线网卡开启WIFI局域网,手机端连接不需要借助路由器即可传输,且该局域网只能有手机端模块接入,其他设备无法接入,极大提升该WIFI数据传输的安全性。
2、设计有监听数据传输异常模块,传输异常断开可逆向连接手机端的监听连接模块并自动快速修复连接,保证在WIFI条件不好的情况下的数据传输稳定性。
3、电脑端接收数据使用高速缓存算法,并以多I/O线程模式将接受到的数据写入文件,可使WIFI传输速率最高达到10MB/秒。
4、包含电脑端和手机端,手机端对数据的提取采集权限要求比USB方式低,无需繁琐的文件权限修改。
5、在电子取证软件中加入WIFI传输方式,有效的解决了遇到某些手机USB端口或连接线出问题无法与电脑端连接的问题。
6、支持10个及以上手机端与电脑端连接传输数据,具备对多台Android设备同时采集数据及连接维护的能力。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下举实施例,对本发明做进一步详细说明。
一种基于WIFI连接方式的数据传输方法,包含以下步骤:
S1:配置无线网卡开启局域网;
S2:电脑端开启TCPListener监听;
S3:生成用于WIFI连接的二维码图片;
S4:创建传输的数据包协议;
S5:创建监听数据传输异常模块;
S6:手机端扫描电脑端的二维码图片建立数据传输通道;
S7:约定用于数据传输的安全密匙;
S8:设计电脑端接收数据的高速缓存;
S9:电脑端接收并解析数据。
S1的详细步骤如下:
S11:检测无线网卡,电脑端调用底层封装获取识别无线网卡,当有多张无线网卡时自动获取发射频率最高的作为电脑端开启局域网的WIFI网卡设备;
S12:开启电脑端WIFI局域网,调用window系统中的底层WIFI设置接口,创建电脑端WIFI局域网。该WIFI局域网底层句柄监听模块中加入只识别手机端设备接入,有效的防止其他设备的加入影响数据传输速率及数据安全性。
S2的详细步骤如下:
S21:创建TcpListener,其详细步骤如下:
S221:获取本地IP地址:如192.168.0.101;
S222:设置本地IP及端口号,分析确定该端口号是否被占用;
S223:创建两个TcpListener:listenerString和listenerBytes,listenerString用于协议包的传输,listenerBytes用于纯Json数据的传输;
S224:开启两个线程thTcpListenString和thTcpListenBytes,分别监听listenerBytes和listenerString上的连接请求;
S22:创建TcpClient,在监听线程thTcpListenString里已阻塞的方式创建TcpClientclientString=listenerString.AcceptTcpClient();
在监听线程thTcpListenBytes里已阻塞的方式创建TcpClientclientBytes=listenerBytes.AcceptTcpClient()。
S3的详细步骤如下:
S31:调用QrCodeEncodingOptions二维码生成对象,设定二维码生成对象的高,宽,字符集,容错级别及格式等重要参数,通过设置参数创建二维码生成器;
S32:传入IP和端口到二维码生成器生成Bitmap格式图片,界面展示图片为BitmapSource格式,所以需将Bitmap格式转为BitmapSource格式,将BitmapSource格式数据生成图片对象并在界面展示。
所述S4中电脑端有两个TcpListener监听手机端的连接:
当电脑端监听到一个手机端连接时:在两个TcpListener里分别创建一个线程与手机端建立连接;
当多手机端与电脑端建立连接时:执行S32步骤,同时任务线程池发挥线程调度作用,确保多手机同时传输数据时的正常进行;
每个手机端与电脑端连接后都会创建ListenClientString和ListenClientBytes两个数据传输通道,其中ListenClientString只传输JsonData协议包,ListenClientBytes则只负责传输具体的数据流;
协议包设计为一个JsonData类包含:phoneIMEI(手机IMEI),jsonType(json消息类型)jsonMsg(json具体消息);
jsonType定义了:“Phone”,“SMS”,“CALLLOG”,“CONTACT”,“BLUETOOTH”,“WIFI”,“APP”,“POSITION”,“SYSTEM”,“END”共10种消息类型,其中“Phone”数据为Android手机基本信息,“END”指示数据传输完毕,其余消息类型是传输具体采集数据。
所述S5中监听传输断开线程设计了三种状态:
1.当连接一个手机端时即开启一个监听连接的线程,该线程采用每10毫秒/次的监听频率不断检测当前数据传输对象TcpListener的连接状态;
2.手机端开启异常断开后重连的WIFI逆向监听接口,并在第一次连接时传输给电脑端并保存;
3.监听线程触发连接断开事件时,立即采取WIFI逆向连接程序,再次连接成功后根据记录下的断点开启数据续传。
S6的详细步骤如下:
S61:电脑端成功开启后打开生成的二维码连接图片供手机端连接;
S62:手机端打开并在后台提取需要传输的数据源,包括:手机基本信息,短信,通话记录,联系人,蓝牙信息,App安装信息,位置信息,系统信息,将上述数据源保存到内存中;
S63:手机端扫描电脑端的二维码图片并开始上传该手机基本信息,当收到电脑端的回执消息后确认数据传输通道已成功建立,依次传输S4中准备的数据。
S7的详细步骤如下:
S71:电脑端生成密匙,当检测到有一个手机客户端已连接上来,则随机生成一个6位数的字母与数字随机出现的密匙;
界面显示此密匙,在后续的数据传输过程中会对数据流进行加密及解密处理,程序内部设计了加密与解密算法;
S72:手机端输入密匙传输,在手机客户端上输入电脑端显示的传输密匙,经过后台数据处理,对接下来要传输的数据进行加密处理;
S73:开始向电脑端传输加密数据。
在S8中在电脑端开辟一段10MB内存用于数据缓存空间,用队列模式,将每次数据缓冲区接到的数据都先写入该缓存;
缓存数据达到最大容量时,将该队列缓存数据由10个I/O线程分别写入本地文件中,高效的提升数据传输速率;
(目前通常情况,手机端与电脑端传输数据都是接到数据缓冲区数据变写入本地文件中,往往速度受制于本地硬盘的读写速度和路由器WIFI传输频率的影响)
当建立一个手机端连接时就产生一个高速缓存,理论上再内存运行的情况下可以连接无数手机端,但在此设计最多只能连接10个手机设备,最多使用100MB内存空间做缓存操作;
每个手机端在闲置1分钟时,自动销毁该缓存空间,在手机端下一次请求传输数据时再次创建高速缓存空间;手机端断开时自动释放创建的高速缓存空间。
所述S9的详细步骤如下:
S91:电脑端接收手机端数据流(接收到字节流时先用密匙解密);
S911:当一个手机连接上时,首先在ListenClientString通道中接收到手机端发送的手机基本信息数据协议包JsonData,PC端成功解析数据后,再从此通道发送给手机端一个回执消息,告知已收到基本数据可以开始在发送数据,这时手机端开始往ListenClientBytes通道发具体数据;
S912:电脑端在ListenClientBytes通道接收字节流并写入内存中的数据缓冲区,当在ListenClientString通道中接收到“END”消息包时表明手机端已成功发送完具体数据,电脑端关闭ListenClientBytes通道的数据接收,并从内存里的数据缓冲区里取出刚才传输的数据流转码并保存到该手机的连接对象的资源字典中(字节流形式);
S92:电脑端解析Json数据;
电脑端共设计了手机基本信息,短信,通话记录,联系人,蓝牙信息,App安装信息,位置信息,系统信息7个类对象,需要将Json数据反序列化为具体的类对象
经过S62后,原始Json数据再保存一份,供后续的数据导出功能使用,至此从建立WIFI连接到数据传输流程已经全部完成。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。