浏览器串口通信方案

    浏览器不能直接访问硬件接口,微软采用Active插件的方式进行访问,而插件只支持IE浏览器,IE浏览器已经不进行更新了,慢慢退出主流浏览器。

   通过上网查询“浏览器串口通信”,找到一个非常好的实现方案。demo地址如下:http://d.iyanhong.com/demos/TComm/commt2.html

   这套方案的原理是:实现一个Windows服务负责串口通信,通过浏览器对该服务的HTTP调用实现浏览器对串口的数据传输。串口对浏览器的传输是通过浏览器对该服务进行HTTP轮训实现的。(其实采用websocket更好,但是为了兼容更多的浏览器,作者采用了HTTP轮询的方案)。作者封装了JavaScript的库进行交互,调用类库的方法,仿佛浏览器天生支持了串口通信一般。使用上面的demo地址,配合串口虚拟串口Virtual Serial Port Driver和串口调试工具ComAssistant 调通了浏览器和串口的数据交互。

   但是,当将JavaScript集成到前端项目时出现了问题。原来该程序并非免费服务,于是我加了开发者的QQ,询问如何收费的。作者告诉我,需要支付一定费用,我提供域名,给我重新生成一个安装包即可。

   通过收费方式,对权限验证的方法大致有了了解,肯定是通过HTTP头里的Referer进行判断的,demo里下载的安装包配置的合法hosts就是http://d.iyanhong.com,只要访问接口时,Referer是http://d.iyanhong.com就能使用demo提供的服务进行开发了。

   该服务对外提供服务的端口是8132,而浏览器访问HTTP时,并不能通过修改访问使用的Hosts。于是我想到了HTTP转发的方案,让浏览器请求转发服务8133,转发服务器修改Header里的Referer属性后将请求转发给8132服务即可。这样的话8132端口对应的服务接收到的Referer便是修改后的Referer,从而欺骗权限验证逻辑,达到正常提供服务的目的。

   这套方案需要三步:

   1.修改JavaScript类库,将8132的请求全部改为8133的请求。

   首先,将min.js进行解压,获得正常格式的js文件,然后找到所有的http请求,在发起请求前对URL进行字符串替换,将:8132替换为:8133,替换代码如下:

    pq.url = pq.url.replace(":8132",":8133");

   2.实现8133到8132的转发服务。

   这里我们使用go语言开发,go语言开发的代码可以直接打包成exe文件,exe是Windows系统原生的可运行文件,为下一步配置Windows服务提供方便。转发代码使用go语言提供http类库,逻辑非常简单,代码如下:

package main

import (
    "log"
 "net/http"
 "net/http/httputil"
 "net/url"
)

type handle struct {
    host string
    port string
}

func (this *handle) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    remote, err := url.Parse("http://" + this.host + ":" + this.port)
    if err != nil {
        panic(err)
    }
    proxy := httputil.NewSingleHostReverseProxy(remote)
    r.Header.Set("Referer","http://w.want.com/demo.html")
    proxy.ServeHTTP(w, r)
}

func startServer() {
    //被代理的服务器host和port
 h := &handle{host: "127.0.0.1", port: "8132"}
    err := http.ListenAndServe(":8133", h)
    if err != nil {
        log.Fatalln("ListenAndServe: ", err)
    }
}

func main() {
    startServer()
}

    3.将转发服务配置成开机自启,避免每次都要手动启动的麻烦。

    开机自启动使用Windows Service Wrapper小工具即可。https://github.com/winsw/winsw/releases

    配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>CrackTcom</id>
<name>CrackTcom</name>
<description>CrackTcom</description>
<executable>D:\commt2\CrackTcom.exe</executable>
<logmode>none</logmode>
</service>

 

全套方案实现后的预备工作如下:

/**********安装串口插件***********/
1.安装TComm2.exe(安装时需要关闭各种安全卫士)。
2.浏览器输入http://127.0.0.1:8132/验证
/**********安装破解串口插件***********/
1.cmd进入当前目录。
2.执行 start reg.exe install。
3.重启电脑。
4.浏览器输入http://127.0.0.1:8133/验证

 

上面工作完成后,就可以根据JavaScript提供的类库进行串口通信开发了。

这套浏览器串口通信方案基于HTTP实现,支持Windows下的全部浏览器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值