远程终端管理系统_第1页
远程终端管理系统_第2页
远程终端管理系统_第3页
远程终端管理系统_第4页
远程终端管理系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、服务器端:Lsd.h#ifndef _LSD_H_#define _LSD_H_#include #include #include #include #include #include #include #include #include #include #include #include #define TYPE_LOGIN 0 /鐧诲綍鏁版嵁鍖?#define TYPE_REG 1 /娉唽鏁版嵁鍖?#define TYPE_MSG 2 /娑堟伅鏁版嵁鍖?#define TYPE_HEART 3 /蹇冭烦鏁版嵁鍖?#define TYPE_CMD 4 /鍛戒护鏁版嵁鍖?/#define

2、TYPE_END 5struct packetint data_type;int size;char *data;struct clientint state;char client_name9;char passwd9;struct client *next;int check_login(char *str);struct sockaddr_in ip_port();void client_pthread(int newsock);void heart(char *ipbuf);void browse(int newsock, char *str);struct client *creat

3、_user(struct client *head);void write_user(struct client *head);void Free(struct client *head);int login(int sockfd, char *str);void regis_file(char *str);void registion(int sockfd, char *str);void writebuf(char *string);struct packet unpack(int sockfd, struct packet server);void signal();int execmd

4、(const char *cmd, int newsock);#endifServer.c:#include lsd.htime_t newtime;time_t oldtime;struct client *head = NULL; /鍏眬閾捐澶存寚閽?/* 涓诲嚱鏁?*/int main()int sockfd = -1;int newsock = -1;int ret = -1;int len;char ipbuf20;char buf100;pthread_t tid;struct sockaddr_in serveraddr;struct sockaddr_in cliaddr;he

5、ad = creat_user(head); /寤虹珛鍏眬閾捐newtime = time(NULL);oldtime = time(NULL);/* 寤虹珛濂楁帴瀛?*/sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd 0)perror(socket);exit(0);/* 缁欏鎺瓧璧嬩簣鍦板潃鍜岀鍙?*/serveraddr = ip_port();ret = bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr);if (ret 0)perror(bind);ex

6、it(0);/* 缁欓摼鎺帓闃?*/ret = listen(sockfd, 5);if (ret 0)perror(listen);exit(1);/* 鎺彈缃戠粶閾炬帴 */while (1)len = sizeof(cliaddr);newsock = accept(sockfd, (struct sockaddr *)&cliaddr, &len);if (newsock 0)perror(accept);exit(0);/* 灏?杩涘埗缃戠粶鍦板潃杞崲鎴愬瓧绗覆缃戣矾鍦板潃 */inet_ntop(AF_INET, &cliaddr.sin_addr.s_addr, ipbuf, s

7、izeof(ipbuf);/* 鏈嶅姟鍣樉绀哄苟鍐欏叆鏃織鏂囦欢 */time_t t;time(&t);char *tm = ctime(&t);sprintf(buf, IP:%s STATE: Connected TIME: %s, ipbuf, tm);printf(%s, buf);writebuf(buf);ret = pthread_create(&tid, NULL, (void *)client_pthread, (void *)newsock);if (ret 0)perror(pthread_create tid);exit(0);ret = pthread_create

8、(&tid, NULL, (void *)heart, (void *)ipbuf);if (ret client_name) = 0)p-state = 1;break;p = p-next;/* 鏌湅鍦嚎鎵鏈夌敤鎴?*/void browse(int newsock, char *str)int ret = -1;char buf100;struct client *p = head;/* 閬嶅巻閾捐锛屾壘鍑哄湪绾跨敤鎴?*/while (p != NULL)memset(buf, 0, sizeof(buf);if (p-state = 1)sprintf(buf, user: %s s

9、tate: onlinen, p-client_name);ret = write(newsock, buf, strlen(buf);if (ret next;ret = write(newsock, ok, sizeof(ok);if (ret 10)sprintf(buf, IP: %s STATRE: disconnectn, ipbuf);printf(%s, buf);writebuf(buf);break;/* 浠庢枃浠朵腑璇诲彇鐢埛淇伅 鍒涘缓閾捐 */* 杩斿洖鍊硷細 閾捐澶存寚閽?*/struct client *creat_user(struct client *head

10、)struct client *new = NULL;FILE *fp = NULL;fp = fopen(./doc_server/userdata, r);if (fp = NULL)perror(creat fopen);return;while(!feof(fp)new = (struct client *)malloc(sizeof(struct client);if (new = NULL)printf(malloc error.n);fclose(fp);return;/* 鏍煎紡鍖栬鍙栵紝骞跺皢鐘舵佺疆0 */fscanf(fp, %st%sn, new-client_name

11、, new-passwd);new-state = 0;if (head = NULL)new-next = NULL;elsenew-next = head;head = new;fclose(fp);return head;/* 灏嗘敞鍐屼俊鎭啓鍏枃浠?*/void write_user(struct client *head)struct client *p = head;FILE *fp = NULL;fp = fopen(./doc_server/userdata, w);if (fp = NULL)perror(creat fopen);return;while (p != NUL

12、L)fprintf(fp, %st%sn, p-client_name, p-passwd);p = p-next;fclose(fp);/* 閲婃斁绌洪棿 */void Free(struct client *head)struct client *p;struct client *q;p = head;while (p != NULL)q = p-next;free(p);p = q;/* 妫娴嬬櫥褰曟槸鍚垚鍔?*/* 杩斿洖鍊硷細0鐧诲綍鎴愬姛 1褰撳墠鐢埛鍦嚎 2鐢埛鍚嶅拰瀵嗙爜閿欒 */int check_login(char *str)struct client *user = N

13、ULL;int i = 0;int j = 0;char name9;char pwd9;/* 瀛楃涓茬殑鎷嗗垎澶勭悊 */memset(name, 0, sizeof(name);while (stri != /)namei = stri;i+;i = i+1;memset(pwd, 0, sizeof(pwd);while (stri != 0)pwdj = stri;i+;j+;/printf(%s %sn, name, pwd);user = head;while (user != NULL)/* 鍒柇鐢埛鍚嶅瘑鐮佹槸鍚尮閰?*/if (strcmp(name, user-client

14、_name) = 0) & (strcmp(pwd, user-passwd) = 0)/* 鍒柇褰撳墠鐢埛鏄惁宸茬櫥褰?*/if (user-state != 0)return 1;elseuser-state = 1;return 0;user = user-next;return 2;/* 鍚戝鎴风鍙戦佺櫥褰曠姸鎬?*/* 杩斿洖鍊硷細0鎴愬姛 1澶辫触 */int login(int sockfd, char *str)int flag = 0;flag = check_login(str);/* 鐧诲綍鎴愬姛 */if (flag = 0)write(sockfd, yes, str

15、len(yes);return 1;/* 娌湁璇敤鎴?*/else if (flag = 2)write(sockfd, no, strlen(on);return 0;/* 璇敤鎴峰湪绾?*/elsewrite(sockfd, ol, strlen(ol);return 0;/* 娉唽 */void registion(int sockfd, char *str)regis_file(str);write(sockfd, yes, strlen(yes);/* 澶勭悊娉唽淇伅 */void regis_file(char *str)struct client *user = NULL;str

16、uct client *p = NULL;int i = 0;int j = 0;int ret = -1;char name9;char pwd9;user = (struct client *)malloc(sizeof(struct client);/* 瀛楃涓茬殑鎷嗗垎澶勭悊 */memset(name, 0, sizeof(name);while (stri != /)namei = stri;i+;i = i+1;strcpy(user-client_name, name);memset(pwd, 0, sizeof(pwd);while (stri != 0)pwdj = str

17、i;i+;j+;strcpy(user-passwd, pwd);/* 鎻掑叆閾捐澶?*/p = head;head = user;head-next = p;write_user(head); /鍐欏叆鏂囦欢/* 閰嶇疆IP鍜岀鍙彿 */* 杩斿洖鍊硷細瀛樻斁閾炬帴淇伅鐨勭粨鏋勪綋 */struct sockaddr_in ip_port()int fd = -1;int ret = -1;int i = 0;char buf20;char port6;int p;struct sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;me

18、mset(serveraddr.sin_zero, 0, sizeof(serveraddr.sin_zero);fd = open(./doc_server/ip&port, O_RDONLY);if (fd 0)perror(ip_port open file);exit(0);lseek(fd, 12, SEEK_SET);memset(buf, 0, sizeof(buf);while (1)ret = read(fd, &bufi, sizeof(bufi);if (ret 0)perror(ip_port read);exit(0);else if (ret = 0)break;i

19、f (bufi = n)break;i+;bufstrlen(buf)-1 = 0;if (buf0 9)serveraddr.sin_addr.s_addr = INADDR_ANY;elseinet_pton(AF_INET, buf, &serveraddr.sin_addr.s_addr);lseek(fd, 7, SEEK_CUR);ret = read(fd, port, sizeof(port);if (ret 0);int flag_cmd = 0;char path20;/* 杈撳叆鎸囦护鐨勫疄鐜?*/* 杩斿洖鍊硷細 -1鎵澶辫触 */int execmd(const ch

20、ar *cmd, int newsock)pid_t pid;int fd2;char buf100;int ret = -1;ret = pipe(fd); /鍒涘缓鍖垮悕绠亾if (ret 0)perror(execmd pipe);exit(0);signal(17, signal); /瀹夎淇彿if (cmd0 = c) & (cmd1 = d)memset(path, 0, sizeof(path);strcat(path, &cmd3);flag_cmd = 1;/printf(path: %sn, path);if (flag_cmd = 0)pid = fork();if (p

21、id = 0)close(fd0);dup2(fd1, 1);dup2(fd1, 2);ret = execlp(/bin/sh, sh, -c, cmd, NULL);if (ret 0 )close(fd1);while(1)memset(buf, 0, sizeof(buf);ret = read(fd0, buf, sizeof(buf)-1);if (ret 0)perror(read);return -1;ret = write(newsock, buf, strlen(buf);if (ret 0)perror(write);return -1;else if (ret = 0)

22、ret = write(newsock, ok, strlen(ok);if (ret 0)perror(write);return -1;break;if (flag_cmd = 1)pid = fork();if (pid = 0)close(fd0);dup2(fd1, 1);dup2(fd1, 2);chdir(path);ret = execlp(/bin/sh, sh, -c, cmd, NULL);if (ret 0 )close(fd1);while(1)memset(buf, 0, sizeof(buf);ret = read(fd0, buf, sizeof(buf)-1)

23、;if (ret 0)perror(read);return -1;ret = write(newsock, buf, strlen(buf);if (ret 0)perror(write);return -1;else if (ret = 0)ret = write(newsock, ok, strlen(ok);if (ret 0)perror(write);return -1;break; /* 灏嗗瓧绗覆string鍐欏叆鏃織鏂囦欢 */void writebuf(char *string)int fd = -1;int ret = -1;fd = open(./doc_server/

24、data, O_CREAT|O_RDWR|O_APPEND, 0640);if (fd = -1)perror(open data);exit(0);ret = write(fd, string, strlen(string);if (ret 0)perror(write data);exit(0);close(fd);/* 灏嗘暟鎹鍖?*/* 杩斿洖鍊硷細瀛樻斁鏁版嵁鐨勭粨鏋勪綋 */struct packet unpack(int sockfd, struct packet server)int ret = -1;ret = read(sockfd, &server.data_type,

25、sizeof(server.data_type);if (ret 0)perror(unpack read);exit(0);server.data_type = ntohs(server.data_type);ret = read(sockfd, &server.size, sizeof(server.size);if (ret 0)perror(unpack read);exit(0);server.size = ntohs(server.size);server.data = (char *)malloc(server.size+1);server.dataserver.size = 0

26、;ret = read(sockfd, server.data, server.size);if (ret 0)perror(unpack read);exit(0);return server;客户端:Lsd_cli.h:#ifndef _LSD_CLI_H_#define _LSD_CLI_H_#include #include #include #include #include #include #include #include #include #include #include #include #define TYPE_LOGIN 0 #define TYPE_REG 1 #d

27、efine TYPE_MSG 2 #define TYPE_HEART 3 #define TYPE_CMD 4 /#define TYPE_END 5struct packetint data_type;int size;char *data;void Exit(int sockfd);int login_menu();int client_menu();struct sockaddr_in ip_port();int login(int sockfd);void heart(int sockfd);void function(int sockfd);void incmd(int sockf

28、d);void browse(int sockfd);void regis(int sockfd);void pack(int sockfd, struct packet user);struct packet unpack(int sockfd, struct packet server);#endifMenu.c:#include lsd_cli.hint login_menu()int n = 0;int i = 0;system(clear);for (i = 0; i 35; i += 1)printf(-);printf(nnntClient Loginn);printf(t1.

29、Loginn);printf(t2. Registrationn);printf(t3. Quitnnn);for (i = 0; i 35; i += 1)printf(-);printf(nselect cmd: );fflush(stdout);scanf(%d, &n);return n;int client_menu()int n = 0;int i = 0;system(clear);for (i = 0; i 35; i += 1)printf(-);printf(nnntClient Menun);printf(t1. input cmdn);printf(t2. Browse

30、 othersn);printf(t3. Quitnnn);for (i = 0; i 35; i += 1)printf(-);printf(nselect cmd: );fflush(stdout);scanf(%d, &n);return n;Server.c:#include lsd_cli.hchar ipbuf25;char name9;/* 涓诲嚱鏁?*/int main()int n = 0;int a = 0;int flag = 1;int sockfd = -1;int ret = -1;pthread_t tid;struct sockaddr_in cliaddr;/

31、* 寤虹珛濂楁帴瀛?*/sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd 0)perror(sockte);exit(0);/* 鐢宠杩炴帴 */cliaddr = ip_port();ret = connect(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr);if (ret 0)perror(connect);exit(0);/* 鍒涘缓蹇冭烦绾跨 */ret = pthread_create(&tid, NULL, (void *)heart, (void *)sockfd);i

32、f (ret 0)n-;memset(buf, 0, sizeof(buf);/* 鐧诲綍楠岃瘉 */printf(Please input uesrname: );fflush(stdout);scanf(%s, buf);strcpy(name, buf);bufstrlen(buf) = /;printf(Please input password: );fflush(stdout);scanf(%s, &bufstrlen(buf);/* 鏁版嵁鍖呰祴鍊?*/user.data_type = TYPE_LOGIN;user.size = strlen(buf);user.data =

33、(char *)malloc(user.size + 1);user.datauser.size = 0;strcpy(user.data, buf);pack(sockfd, user);memset(readbuf, 0, sizeof(readbuf);ret = read(sockfd, readbuf, sizeof(readbuf)-1);if (ret 0)perror(login read);exit(0);if (strcmp(readbuf, yes) = 0)printf(Login sucessful .n);sleep(1);return 1;else if(strc

34、mp(readbuf, no) = 0)printf(username or password wrong!n);printf(Another %d times to try.n, n);elseprintf(The current user is logged in!n);break;/* 娉唽鍔熻兘鐨勫疄鐜?*/void regis(int sockfd)int n = 3;int ret = -1;char buf20;char pwd_a20;char pwd_b20;char readbuf5;struct packet user;while (1)memset(buf, 0, si

35、zeof(buf);printf(Please input uesrname: );fflush(stdout);scanf(%s, buf);strcpy(name, buf);bufstrlen(buf) = /;printf(Please input password: );fflush(stdout);scanf(%s, pwd_a);printf(Input password again: );fflush(stdout);scanf(%s, pwd_b);/* 涓瀵嗙爜杈撳叆鏄惁涓鑷?*/if (strcmp(pwd_a, pwd_b) = 0)sprintf(&bufstrlen

36、(buf), %s, pwd_a);break;/* 鏁版嵁鍖呰祴鍊?*/user.data_type = TYPE_REG;user.size = strlen(buf);user.data = (char *)malloc(user.size + 1);user.datauser.size = 0;strcpy(user.data, buf);pack(sockfd, user);memset(readbuf, 0, sizeof(readbuf);ret = read(sockfd, readbuf, sizeof(readbuf)-1);if (ret 0)perror(login read);exit(0);if (strcmp(readbuf, yes) = 0)printf(regist sucessfuln);sleep(1);return;elseprintf(Please open the client again to try.n);sleep(5);exit(0);/* 涓昏鍔熻兘鐨勫疄鐜?*/void function(int sockfd)int n = 0;while (1)n = client_menu();switch (n)case 1:/* 杈撳叆鍛戒护琛屽鐞?*/incmd(sockfd);break;cas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论