当前位置: 首页 > news >正文

_撸猫websocket服务器端,手机远程服务端

自写自用的小东西.

远程控制手机的.用aardio写的,原理也简单的很.

客户端是用autojs写.

这个是服务器端的.

main代码

//异步服务端
import win.ui;
import web.socket.server;
import win;
import inet.http;
/*DSG{{*/
mainForm = win.form(cls="EMAO_FORM";text="__撸猫websocket服务器端";left=10;top=4;right=1298;bottom=836;topmost=1)
mainForm.add(
Btn_SendCommand={cls="plus";text="发送给所有机(&C)";left=1120;top=752;right=1259;bottom=784;db=1;dr=1;font=LOGFONT(h=-14;name='微软雅黑';weight=700);notify=1;z=14};
Btn_SendCommandToSel={cls="plus";text="发送给已选机(&C)";left=976;top=752;right=1112;bottom=784;db=1;dr=1;font=LOGFONT(h=-14;name='微软雅黑';weight=700);notify=1;z=17};
Btn_SendTask={cls="plus";text="重新载入(&R)";left=1056;top=468;right=1184;bottom=500;db=1;dr=1;font=LOGFONT(h=-14;name='微软雅黑';weight=700);notify=1;z=13};
CB_CmdList={cls="combobox";left=824;top=755;right=957;bottom=779;db=1;dr=1;edge=1;font=LOGFONT(h=-14;name='微软雅黑');items={"集成指令列表"};mode="dropdownlist";z=16};
CB_EnabledJoin={cls="checkbox";text="允许新机加入";left=1148;top=13;right=1276;bottom=45;bgcolor=12639424;checked=1;dr=1;dt=1;font=LOGFONT(h=-16;name='微软雅黑');z=8};
CB_TaskList={cls="combobox";left=824;top=471;right=1048;bottom=497;db=1;dr=1;edge=1;font=LOGFONT(h=-14;name='微软雅黑');items={};mode="dropdownlist";z=6};
OnlineCount={cls="edit";text="0";left=811;top=437;right=864;bottom=461;align="center";db=1;dr=1;edge=1;font=LOGFONT(h=-14;name='微软雅黑');multiline=1;z=4};
TB_Command={cls="edit";text='alert("演示");';left=824;top=504;right=1261;bottom=744;db=1;dr=1;edge=1;font=LOGFONT(h=-16);multiline=1;vscroll=1;z=15};
groupbox={cls="groupbox";text="【在线】";left=736;top=440;right=1280;bottom=800;db=1;dr=1;edge=1;z=3};
plus={cls="plus";left=0;top=0;right=1288;bottom=56;bgcolor=12639424;dl=1;dr=1;dt=1;z=1};
plus1={cls="plus";left=952;top=16;right=1016;bottom=40;background="\res\ServiceOn.png";disabled=1;dr=1;dt=1;notify=1;repeat="scale";transparent=1;z=9};
plus2={cls="plus";left=1072;top=16;right=1136;bottom=40;background="\res\ServiceOn.png";disabled=1;dr=1;dt=1;notify=1;repeat="scale";transparent=1;z=10};
static2={cls="static";text="任务列表:";left=752;top=474;right=832;bottom=506;db=1;dr=1;font=LOGFONT(h=-14;name='微软雅黑');transparent=1;z=5};
static3={cls="static";text="单独指令:";left=752;top=504;right=832;bottom=536;db=1;dr=1;font=LOGFONT(h=-14;name='微软雅黑');transparent=1;z=7};
static4={cls="static";text="WebSocket";left=864;top=16;right=960;bottom=40;bgcolor=12639424;dr=1;dt=1;font=LOGFONT(h=-16;name='微软雅黑');transparent=1;z=11};
static5={cls="static";text="HTTP";left=1032;top=16;right=1080;bottom=40;bgcolor=12639424;dr=1;dt=1;font=LOGFONT(h=-16;name='微软雅黑');transparent=1;z=12};
static6={cls="static";text="手机群控服务端v2.3";left=24;top=14;right=352;bottom=40;font=LOGFONT(h=-20;name='微软雅黑');transparent=1;z=19};
tab1={cls="tab";left=8;top=64;right=1280;bottom=424;db=1;dl=1;dr=1;dt=1;edge=1;font=LOGFONT(h=-16;name='微软雅黑');z=2};
tab2={cls="tab";left=8;top=432;right=728;bottom=800;db=1;dl=1;dr=1;edge=1;font=LOGFONT(h=-16;name='微软雅黑');z=18}
)
/*}}*//*myVariables*/
wsrv = web.socket.server();/*myUI*/	mainForm.loadForm("/dlg/UI.aardio")
/*Func*/	mainForm.loadForm("/dlg/FUNC.aardio");
/*COMM*/	mainForm.loadForm("/dlg/COMMAND.aardio");sktList = {  };//一个客户端掉线了
wsrv.onClose = function(hSocket,event){//mainForm.other1.txtMessage.print("onClose",hSocket,event);var sid = getSid( hSocket );//根据sid取相关信息//取设备信息,以及对应手机号码,如13号手机androidID = "";for( k,v in sktList ){if( v && sid == v.string ){sktList[k] = null;androidID = k; //取得socket对应的安卓id号break;}}if( androidID!="" ){for(i=1; mainForm.list1.LV_Online.count;1){if( mainForm.list1.LV_Online.getItemText( i, 3 ) == androidID ){name = mainForm.list1.LV_Online.getItemText( i, 2 );mainForm.other1.txtMessage.print( "【id:" ++ i ++ " - " ++ name ++ "】已掉线" );mainForm.OnlineCount.text = wsrv.clientCount();//这里可以报警了---////////////////////////////////////////////////////////////////////////////setOffLineState( androidID );list2.disabledItem( name );return;}}}//mainForm.other1.txtMessage.print( "【id=" ++ sid ++ " 】已掉线" );mainForm.OnlineCount.text = wsrv.clientCount();
}//一个客户端发消息过来了
wsrv.onMessage = function(hSocket,msg){//mainForm.other1.txtMessage.print(hSocket,msg.data);  //wsrv.send(hSocket,"收到xx消息:" + msg.data);mainForm.OnlineCount.text = wsrv.clientCount();//第----------------2----------------收到身份-登记造册if( string.indexOf(msg.data,"verify:") && mainForm.CB_EnabledJoin.checked ){var client = wsrv.client(hSocket);ip = client.getRemoteIp();vStr = string.replace( msg.data, "@verify:","" );vStr = string.split( vStr, '<||>' ); //厂商+主板+ID+电量//检测列表中有没有,没有才新加,有就更新nid = setOnLineState( vStr[3] );if( nid == null ){nid = getNewId();mainForm.list1.LV_Online.addItem( { nid; ""; vStr[3]; vStr[1]++" " ++ vStr[2]; ip; "在线"; vStr[4]; tostring(time(,"%Y/%m/%d %H:%M:%S" )); "0天0时0分"; }, 0 );}else {mainForm.list1.LV_Online.setItemText( vStr[3], nid, 3 );mainForm.list1.LV_Online.setItemText( vStr[1]++" " ++ vStr[2], nid, 4 );mainForm.list1.LV_Online.setItemText( ip, nid, 5 );mainForm.list1.LV_Online.setItemText( "【在线】", nid, 6 );mainForm.list1.LV_Online.setItemText( vStr[4], nid, 7 );mainForm.list1.LV_Online.setItemText( tostring(time(,"%Y/%m/%d %H:%M:%S" )), nid, 8 );mainForm.list1.LV_Online.setItemText( "0天0时0分", nid, 9 );}mainForm.other1.txtMessage.print( "【"++client.getRemoteIp()++"】ID=" ++ nid ++ " / 机型:" ++ vStr[1]++"-" ++ vStr[2] ++ " / 电量:" ++ vStr[4] ++ "% - 成功连接!" );sktList[ vStr[3] ] = { //安卓id当键名"instance" = hSocket;"string" = getSid( hSocket );};//检测缓存中有没有对应的手机编号名称,有则直接读取if( io.exist("/config/"++vStr[3]++".txt" ) ){var phoneCode=string.load("/config/"++vStr[3]++".txt");if( phoneCode!="" ){mainForm.list1.LV_Online.setItemText( phoneCode, nid, 2 );list2.enableItem( phoneCode );}}}//第----------------3----------------收到心跳if( string.indexOf(msg.data,"HeartBeat:") ){//mainForm.other1.txtMessage.print( msg.data );vStr = string.replace( msg.data, "@HeartBeat:","" );vStr = string.split( vStr, '<||>' ); //手机编号+ID+电量nid = setOnLineState( vStr[2] );debugForm.log( vStr[1] ++ " - " ++ vStr[2] );if( mainForm.list1.LV_Online.getItemText( nid,2 )=="" || mainForm.list1.LV_Online.getItemText( nid,2 )!=vStr[1] ){//如果还没更新机器编号,或换了编号,则更新文件string.save("/config/" ++ vStr[2] ++ ".txt", vStr[1]);}//mainForm.other1.txtMessage.print( msg.data );mainForm.list1.LV_Online.setItemText( vStr[1], nid, 2 );if( vStr[4]=="1" ) vStr[3] = "【"++vStr[3] ++"】";mainForm.list1.LV_Online.setItemText( vStr[3], nid, 7 );tm = time( mainForm.list1.LV_Online.getItemText( nid, 8 ) );tm2 = time();var v = tm2.diffsecond( tm ); mainForm.list1.LV_Online.setItemText( getTimeBySecond( v ), nid, 9 );}//第----------------4----------------收到错误信息 //运行脚本出错if( string.indexOf(msg.data,"enginesError:") ){//mainForm.other1.txtMessage.print( msg.data );vStr = string.replace( msg.data, "@enginesError:","" );nid = getRowBySocket( hSocket );if( nid ){mainForm.list1.LV_Online.setItemText( vStr, nid, 10 );}}//第----------------5----------------收到脚本执行完的反馈,查看start 或 endif( string.indexOf(msg.data,"enginesResult:") ){//mainForm.other1.txtMessage.print( msg.data );vStr = string.replace( msg.data, "@enginesResult:","" );nid = getRowBySocket( hSocket );if( nid ){if( vStr == "end" ){mainForm.list1.LV_Online.setItemText( "执行完成!", nid, 10 );} else {mainForm.list1.LV_Online.setItemText( "出错了!", nid, 10 );}mainForm.other1.txtMessage.print( vStr );}}//第----------------6----------------接收新的短信if( string.indexOf(msg.data,"NewSms:") ){vStr = string.replace( msg.data, "@NewSms:","" );//nid = getRowBySocket( hSocket );vStr = string.split( vStr, "<||>" );mainForm.sms.txtMessage.print( "【" ++ vStr[1] ++ " - " ++ vStr[2] ++ " - " ++ getTimeByNumber( vStr[3] ) ++ "】" );mainForm.sms.txtMessage.print( vStr[4] );mainForm.sms.txtMessage.print( string.repeat( 100,"-" ) );ckSms = checkSMS( vStr[4] );if( ckSms ){mainForm.sms.txtMonitor.print( "【" ++ vStr[1] ++ " - " ++ ckSms ++ " - " ++ vStr[2] ++ " - " ++ getTimeByNumber( vStr[3] ) ++ "】" );mainForm.sms.txtMonitor.print( vStr[4] );mainForm.sms.txtMonitor.print( string.repeat( 100,"-" ) );//发送到微信pushBase( ckSms ++ "-" ++ vStr[1], vStr[4] );}}//返回高速---不返回--由服务端主动推送//if( string.trim(msg.data) == "requestGAOSU" ){//	return wsrv.send( hSocket, "EXE||" ++ string.load("/js/GAOSU.txt") );//}
}mainForm.Btn_SendTask.oncommand = function(id,event){ mainForm.CB_TaskList.clear();cmd = string.load( "/config/_tasklist.txt" );if( cmd ){ cmd = string.split( cmd, '<\r\n>' );for(i=1;#cmd;1){ if( string.trim(cmd[i])=="" ) break;str = string.split( cmd[i], '<||>' );if( #str==2 ){mainForm.CB_TaskList.add( cmd[i] );}}}if( mainForm.CB_CmdList.count>0 ){ mainForm.CB_CmdList.selIndex = 1; } mainForm.msgbox("重新载入完成!");
}mainForm.Btn_SendCommand.oncommand = function(id,event){if( wsrv ){for(i=1;mainForm.list1.LV_Online.count;1){hp = mainForm.list1.LV_Online.getItemText(i,3);hp = sktList[ hp ];if( hp && hp.instance ){result = wsrv.send( hp.instance, "COMMAND||"++mainForm.TB_Command.text );if( !result ){mainForm.list1.LV_Online.setItemText( "命令发送成功!", i, 10 );}else {mainForm.list1.LV_Online.setItemText( "命令发送失败!", i, 10 );}}else {mainForm.list1.LV_Online.setItemText( "---", i, 6 );mainForm.list1.LV_Online.setItemText( "已退线", i, 10 );}}//wsrv.send( hSocket,"verify" )mainForm.msgbox("命令发送成功!");}
}win.delay( 500 );
//启动服务端 
if( wsrv.start(,880) ){mainForm.other1.txtMessage.print( wsrv.getUrl() + "/aardio","已启动WebSocket服务器");mainForm.other1.txtMessage.print( wsrv.httpServer.getUrl(),"已启动HTTP服务器");mainForm.plus1.disabled = false;mainForm.plus2.disabled = false;
}
else {mainForm.other1.txtMessage.print("启动失败,建议修改端口号");
}//同一个端口还可以同时运行HTTP服务端
wsrv.httpServer.run( function(response,request){ //mainForm.other1.txtMessage.print( request );if( #mainForm.other1.txtMessage.text > 10000 ){ mainForm.other1.txtMessage.text = ""; }if( !string.indexOf( request.url, "favicon.ico" ) ){mainForm.other1.txtMessage.print("HTTP协议访问:",request.url , request.uri);}else{return;}response.contentType = "text/html";//response.jsonPrettyPrint = true;var uri = request.uri;uri = string.split( uri, "/" );if( uri[2] == "config" || string.indexOf( request.uri, "debug" )  ){fl = string.replace( request.uri,"\?.+","" );if( io.exist( fl ) ){response.write( string.load( fl ) );}else {response.write( string.load("/res/404.html") );}}}
);mainForm.Btn_SendCommandToSel.oncommand = function(id,event){if( wsrv ){for(i=1;mainForm.list1.LV_Online.count;1){if( mainForm.list1.LV_Online.getChecked( i ) ){hp = mainForm.list1.LV_Online.getItemText(i,3);hp = sktList[ hp ];if( hp && hp.instance ){result = wsrv.send( hp.instance, "COMMAND||"++mainForm.TB_Command.text );if( !result ){mainForm.list1.LV_Online.setItemText( "定向命令发送成功!", i, 10 );}else {mainForm.list1.LV_Online.setItemText( "定向命令发送失败!", i, 10 );}}else {mainForm.list1.LV_Online.setItemText( "已掉线", i, 10 );}}}//wsrv.send( hSocket,"verify" )mainForm.msgbox("命令发送成功!");}
}win.loopMessage();

代码很短,其实就像是一个中介一样.

可以自定义代码,存成单独的文件,可以在主界面,选择要执行的脚本,可以单发群发给上线手机

下载地址:https://wangpanmao.com/archives/6722/

喜欢的宝子们,帮点赞评论,感谢支持嗷.

http://www.dtcms.com/a/523742.html

相关文章:

  • 【论文精读】FDGaussian:基于几何感知扩散模型的单图快速高斯溅射 3D 重建
  • 功防世界-Web-bug
  • 做网站能拿多少钱平面设计 网站推荐
  • REST介绍,实质,六大约束,优缺点(数据冗余问题,身份验证困难(解决方式 -- JWT+集中式认证服务,使用代理))
  • Snapchat Data Scientist 面试经验分享|从 OA 到 Final Round 全流程复盘
  • 消息队列集群——RabbitMQ
  • 初识C语言14.动态内存管理
  • ks2e做网站高端品牌设计
  • 华为od-22届考研-C++面经
  • Win10 系统构建仿真 NVIDIA Jetson Orin Nano 环境部署 YOLOv8 模型
  • 英文网站开发付费下插件wordpress
  • 【面板数据】汽车之家及懂车帝汽车配置信息数据集(1999-2025.4)
  • Slotted Aloha
  • 「赤兔」Chitu 框架深度解读(六):剖析 Attention 机制后端实
  • 嵌入式开发中为啥常用do{}while(0)进行宏定义
  • 第六部分:VTK进阶(第172章 vtk-m加速器管线)
  • 矽塔 SA8207 36V输入耐压 高精度可调过流保护与集成智能故障管理 过压过流保护芯片
  • 关键词优化公司网站怎么做网站后台界面
  • 从「Bug 制造机」到「问题解决者」的进化之路
  • 华为新一代鸿蒙操作系统实现与苹果互联
  • 常用 apt 命令及语法(Ubuntu)
  • 华为 AI,建造中的全景图
  • 第二十九篇:动态规划(一):基础与背包问题
  • 深度学习中的训练流程:从输入到权重更新的完整旅程
  • QT------QPainter::save() 和 QPainter::restore() 的使用方法和作用。
  • http trailer 与 http2
  • 有没有会计做兼职的网站wordpress获取文章
  • 中国人在国外做网站网站代理网站群建设 会议 主持
  • 在Ubuntu Linux安装brew 使用brew安装llama.cpp 运行文心Ernie大模型
  • 基于MATLAB/Simulink的风光储联合系统经M3C接入电网的低电压穿越仿真研究