只狼 做穿透部署过程,用于js/android加解密等
第一步: 访问git : https://github.com/virjar/sekiro
第二步:访问:demoServer编译和部署 · Sekiro系统文档
第三步:部署服务器 Go HTTP File Server
第四步:访问
第五步 :打开浏览器,f12 在source 标签中,找到 snipets,在脚本 中写入
https://sekiro.virjar.com/sekiro-doc/assets/sekiro_web_client.js 复制这里的内容,粘贴到下面的框里。
下面的示例也一同粘贴到上面框里。
就是如下代码
- function SekiroClient(wsURL) {
- this.wsURL = wsURL;
- this.handlers = {};
- this.socket = {};
- // check
- if (!wsURL) {
- throw new Error('wsURL can not be empty!!')
- }
- this.webSocketFactory = this.resolveWebSocketFactory();
- this.connect()
- }
-
- SekiroClient.prototype.resolveWebSocketFactory = function () {
- if (typeof window === 'object') {
- var theWebSocket = window.WebSocket ? window.WebSocket : window.MozWebSocket;
- return function (wsURL) {
-
- function WindowWebSocketWrapper(wsURL) {
- this.mSocket = new theWebSocket(wsURL);
- }
-
- WindowWebSocketWrapper.prototype.close = function () {
- this.mSocket.close();
- };
-
- WindowWebSocketWrapper.prototype.onmessage = function (onMessageFunction) {
- this.mSocket.onmessage = onMessageFunction;
- };
-
- WindowWebSocketWrapper.prototype.onopen = function (onOpenFunction) {
- this.mSocket.onopen = onOpenFunction;
- };
- WindowWebSocketWrapper.prototype.onclose = function (onCloseFunction) {
- this.mSocket.onclose = onCloseFunction;
- };
-
- WindowWebSocketWrapper.prototype.send = function (message) {
- this.mSocket.send(message);
- };
-
- return new WindowWebSocketWrapper(wsURL);
- }
- }
- if (typeof weex === 'object') {
- // this is weex env : https://weex.apache.org/zh/docs/modules/websockets.html
- try {
- console.log("test webSocket for weex");
- var ws = weex.requireModule('webSocket');
- console.log("find webSocket for weex:" + ws);
- return function (wsURL) {
- try {
- ws.close();
- } catch (e) {
- }
- ws.WebSocket(wsURL, '');
- return ws;
- }
- } catch (e) {
- console.log(e);
- //ignore
- }
- }
- //TODO support ReactNative
- if (typeof WebSocket === 'object') {
- return function (wsURL) {
- return new theWebSocket(wsURL);
- }
- }
- // weex 鍜� PC鐜鐨剋ebsocket API涓嶅畬鍏ㄤ竴鑷达紝鎵€浠ュ仛浜嗘娊璞″吋瀹�
- throw new Error("the js environment do not support websocket");
- };
-
- SekiroClient.prototype.connect = function () {
- console.log('sekiro: begin of connect to wsURL: ' + this.wsURL);
- var _this = this;
- // 涓峜heck close锛岃
- // if (this.socket && this.socket.readyState === 1) {
- // this.socket.close();
- // }
- try {
- this.socket = this.webSocketFactory(this.wsURL);
- } catch (e) {
- console.log("sekiro: create connection failed,reconnect after 2s");
- setTimeout(function () {
- _this.connect()
- }, 2000)
- }
-
- this.socket.onmessage(function (event) {
- _this.handleSekiroRequest(event.data)
- });
-
- this.socket.onopen(function (event) {
- console.log('sekiro: open a sekiro client connection')
- });
-
- this.socket.onclose(function (event) {
- console.log('sekiro: disconnected ,reconnection after 2s');
- setTimeout(function () {
- _this.connect()
- }, 2000)
- });
- };
-
- SekiroClient.prototype.handleSekiroRequest = function (requestJson) {
- console.log("receive sekiro request: " + requestJson);
- var request = JSON.parse(requestJson);
- var seq = request['__sekiro_seq__'];
-
- if (!request['action']) {
- this.sendFailed(seq, 'need request param {action}');
- return
- }
- var action = request['action'];
- if (!this.handlers[action]) {
- this.sendFailed(seq, 'no action handler: ' + action + ' defined');
- return
- }
-
- var theHandler = this.handlers[action];
- var _this = this;
- try {
- theHandler(request, function (response) {
- try {
- _this.sendSuccess(seq, response)
- } catch (e) {
- _this.sendFailed(seq, "e:" + e);
- }
- }, function (errorMessage) {
- _this.sendFailed(seq, errorMessage)
- })
- } catch (e) {
- console.log("error: " + e);
- _this.sendFailed(seq, ":" + e);
- }
- };
-
- SekiroClient.prototype.sendSuccess = function (seq, response) {
- var responseJson;
- if (typeof response == 'string') {
- try {
- responseJson = JSON.parse(response);
- } catch (e) {
- responseJson = {};
- responseJson['data'] = response;
- }
- } else if (typeof response == 'object') {
- responseJson = response;
- } else {
- responseJson = {};
- responseJson['data'] = response;
- }
-
-
- if (Array.isArray(responseJson)) {
- responseJson = {
- data: responseJson,
- code: 0
- }
- }
-
- if (responseJson['code']) {
- responseJson['code'] = 0;
- } else if (responseJson['status']) {
- responseJson['status'] = 0;
- } else {
- responseJson['status'] = 0;
- }
- responseJson['__sekiro_seq__'] = seq;
- var responseText = JSON.stringify(responseJson);
- console.log("response :" + responseText);
- this.socket.send(responseText);
- };
-
- SekiroClient.prototype.sendFailed = function (seq, errorMessage) {
- if (typeof errorMessage != 'string') {
- errorMessage = JSON.stringify(errorMessage);
- }
- var responseJson = {};
- responseJson['message'] = errorMessage;
- responseJson['status'] = -1;
- responseJson['__sekiro_seq__'] = seq;
- var responseText = JSON.stringify(responseJson);
- console.log("sekiro: response :" + responseText);
- this.socket.send(responseText)
- };
-
- SekiroClient.prototype.registerAction = function (action, handler) {
- if (typeof action !== 'string') {
- throw new Error("an action must be string");
- }
- if (typeof handler !== 'function') {
- throw new Error("a handler must be function");
- }
- console.log("sekiro: register action: " + action);
- this.handlers[action] = handler;
- return this;
- };
-
-
-
-
- function guid() {
- function S4() {
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
- }
-
- return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
- }
-
- var client = new SekiroClient("ws://127.0.0.1:5620/business/register?group=ws-group&clientId=" + guid());
-
- client.registerAction("clientTime", function (request, resolve, reject) {
- resolve("SekiroTest:" + new Date());
- });
-
- client.registerAction("executeJs", function (request, resolve, reject) {
- var code = request['code'];
- if (!code) {
- reject("need param:{code}");
- return;
- }
-
- code = "return " + code;
-
- console.log("executeJs: " + code);
-
- try {
- var result = new Function(code)();
- resolve(result);
- } catch (e) {
- reject("error: " + e);
- }
-
- });
第六步:运行浏览器中的脚本
第七步:在浏览器中 访问: http://127.0.0.1:5620/business-demo/invoke?group=ws-group&action=clientTime
得到如下的返回 信息就算成功了。
- // 20221102074607
- // http://127.0.0.1:5620/business-demo/invoke?group=ws-group&action=clientTime
-
- {
- "__sekiro_seq__": 2,
- "clientId": "ef076b70-40fb-4d6c-0296-abad81d964c4",
- "data": "SekiroTest:Wed Nov 02 2022 07:46:06 GMT+0800 (中国标准时间)",
- "status": 0
- }