一、背景
针对云桌面使用扫描仪进行文件扫描的场景,本文提出一种基于云桌面网络扫描仪的文件扫描方法,可以在云桌面网络与本地网络不互通的情况下,同时不需要连接USB线,不受限于物理连接和时空限制,通过网络代理和数据转发技术,在云桌面内进行文件扫描操作,与传统计算机扫描文件体验一致,操作简便、效率高、易维护。
二、技术方案
本文提出一种基于云桌面网络扫描仪的文件扫描方法,是在云桌面场景下扫描仪使用的优化,同时大大提升扫描仪的使用效率。针对云桌面网络与本地网络不互通的情况,添加网络代理模块和云桌面服务模块,对网络数据进行定向转发,使扫描仪驱动和扫描仪设备之间可以进行正常数据交互,完成文件扫描过程。
如图1所示,该方案包含网络代理模块、云桌面服务、云桌面客户端等模块,由网络代理工具捕获扫描仪驱动和本地扫描仪的交互数据,修改IP层数据包头字段(dstIP、dstPort),将修改后的数据发到云桌面服务模块,对TCP/UDP等网络数据进行封装、转发、处理,并将数据通过串口通信发送到云桌面客户端,本地客户端与扫描仪设备建立连接,将数据转发给扫描仪。经过驱动和扫描仪的多次数据交互,完成文件扫描,并将文件保存在云桌面中。
1.网络代理模块
网络代理模块通过设置的目的IP、代理IP、代理端口,利用WinDivert进行流量代理和流量转发。windows数据包转移(WinDivert)是一种用户模式的数据包捕获和转移包,WinDivert允许用户模式应用程序捕获、修改、丢弃从windows网络堆栈发送的网络数据包。windows防火墙架构如图2所示,在winsock.dll层面将流量报文拦截下来,然后转移到端口代理中去,利用WinDivert驱动可以把指定目的端口的流量转换成访问本地其它端口。从而实现把扫描仪驱动出来的流量进行捕获并转移到本地特定端口,再经过云桌面服务模块进行数据监听、封装处理。
2.云桌面服务模块
模块初始化,如图3所示,首先进行TCP/UDP特定端口监听,如127.0.0.1:9001,监听来自网络代理模块的数据,一旦有数据过来,云桌面服务模块会将数据获取并缓存,解析网络数据得到源IP端口和目的IP端口、TCP/UDP类型,数据长度等,并对数据进行封装处理,将数据缓存到队列中,同时运用串口通信转发到云桌面客户端。
3.云桌面客户端
客户端通过与服务模块协商的连接id来识别不同的TCP连接,通过连接id和目的IP、port共同组成的字符串来识别不同的UDP连接。通过协商的结构体来记录一个完成连接所需的信息,包括socket状态等等信息。TCP数据有状态的数据流、UDP是无状态的数据报,客户端处理过程遵循这一基本原理,来传递所需的信息。云桌面客户端与扫描仪设备通过IP和端口信息建立连接,将获取的数据发送给扫描仪并接收来自扫描仪的数据,并将扫描仪数据返回给云桌面服务模块,完成数据交互。
三、应用场景
针对云桌面与扫描仪相结合的应用场景,主要考虑在云桌面网络受限的情况,同时不需要连接USB线,不受限于物理连接和时空限制,通过网络流量代理和数据转发技术,在云桌面内进行文件扫描操作,解决了用户在云桌面网络与本地网络不互通的情况下使用扫描仪的问题,用户体验有了较大提升,同时也提升了使用扫描仪的效率。
使用步骤:
- 连接并启动扫描仪,在扫描仪设备上获取扫描仪IP。
- 在云桌面内打开网络代理工具,设置好扫描仪IP并启动工具。
- 根据扫描仪型号获取对应版本驱动,在云桌面内正确安装驱动。
- 检查驱动与扫描仪的连通性后可以正常进行文件扫描操作。
- 扫描完成后文件保存在云桌面文件夹下,可查阅。
附图
图1 网络扫描仪代理转发示意图
图2 windows防火墙架构
图3 网络扫描仪数据转发流程图