信息安全实践第四次作业远程控制系统_第1页
信息安全实践第四次作业远程控制系统_第2页
信息安全实践第四次作业远程控制系统_第3页
信息安全实践第四次作业远程控制系统_第4页
信息安全实践第四次作业远程控制系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号: 姓名:专业: 班级: 第 3 周 课程名称 信息安全产品开发实践  实验课时4实验项目远程控制系统实验时间2013.9.27实验目的 利用流套接字实现一个简单的远程控制系统  实验环境 虚拟机 Ubuntu-VMware Workstation  实验内容(算法、程序、步骤和方法) 服务器服务器代码中有两个死循环,外部是为了重复连接客户端(即使对方断了此次连接仍然能继续等待并连接下一客户端),要注意每连接一次客户端套接字都会不同,而且除了连接客户端的套接字以外还有监听套接字。#include

2、<stdlib.h>#include<stdio.h>#include<sys/socket.h>#include<netdb.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#define PORT 8900#defineSIZE 2048/* 2K BUFFER */void exec (char* command,char* result)FILE * in;int len;cha

3、r c;len=0;bzero(result,sizeof(result);in=popen(command,"r");if (NULL=in)fprintf(stderr,"error in create a pipen");/return -1;while(c=fgetc(in)!=EOF)&&(len<SIZE)resultlen=c;len+;resultlen='0'pclose(in);if (0=len)sprintf(result,"%s cannot executen",comm

4、and);int main(int argc,char* argv)struct sockaddr_in server;struct sockaddr_in client;int len;int port;int listend;int connectd;int sendnum;int opt;int recvnum;char send_buf2048;char recv_buf2048;int rvalue;char cmd10; /* these two var used to deal with cd command */char path2048;port= PORT;memset(s

5、end_buf,0,2048);memset(recv_buf,0,2048);opt = SO_REUSEADDR;if (-1=(listend=socket(AF_INET,SOCK_STREAM,0)/使用TCP创建监听用的套接字perror("create listen socket errorn");exit(1);setsockopt(listend,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt);#ifdef DEBUGprintf("the listen id is %dn",listend);

6、#endifmemset(&server,0,sizeof(struct sockaddr_in);server.sin_family = AF_INET;/IPv4协议server.sin_addr.s_addr = htonl(INADDR_ANY);/接收任意地址server.sin_port = htons(port);/设置端口号if (-1=bind(listend,(struct sockaddr *)&server,sizeof(struct sockaddr)/绑定perror("bind errorn");exit(1); if (-1=

7、listen(listend,5) perror("listen errorn");exit(1); while(1)/外部死循环,用来重复连接客户端if (-1=(connectd=accept(listend,(struct sockaddr*)&client,&len)/创建新的套接字连接客户端perror("create connect socket errorn");continue;while (1)memset(recv_buf,0,2048);#ifdef DEBUGprintf("the connect id

8、is %d",connect);printf("the client ip addr is %s",inet_ntoa(client.sin_addr);#endif#ifdef DEBUGprintf("the send num is %d",sendnum);printf("the client ip addr is %s",inet_ntoa(client.sin_addr);#endifif (0>(recvnum = recv(connectd,recv_buf,sizeof(recv_buf),0)perr

9、or("recv errorn");close(connectd);continue;recv_bufrecvnum-1='0'/这里要注意-1,不然会保留换行符if (0=strcmp(recv_buf,"quit")|(0=strcmp(recv_buf,"QUIT")/结束对话,跳出内部循环,继续外部循环printf("overn");break;sscanf(recv_buf,"%s %s",cmd,path);if (0=strcmp("cd",cm

10、d) |(0=strcmp("CD",cmd)chdir(path);continue;exec(recv_buf,send_buf);rvalue=-1;rvalue=send(connectd,send_buf,sizeof(send_buf),0); close(listend); return 0;  (接上)实验内容(算法、程序、步骤和方法)客户端客户端代码中只有一个死循环,和上次实验差别不大。#include<stdlib.h>#include<stdio.h>#include<sys/socket.h>#inclu

11、de<netdb.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#define SIZE 2048void print_usage (char* cmd )fprintf(stderr,"Usage:%s ip addressn",cmd);int main(int argc,char* argv)struct sockaddr_in server;int ret;int len;int port;i

12、nt sockfd;int sendnum;int recvnum;char send_buf2048;char recv_buf2048;int rvalue;char bufferSIZE;char cmd10; if (2>argc)| (argc >3)print_usage(argv0);exit(1);if (3=argc) /这里的端口号从主函数参数获取port = atoi(argv2);if (-1=(sockfd=socket(AF_INET,SOCK_STREAM,0)perror("can not create socketn");exi

13、t(1);memset(&server,0,sizeof(struct sockaddr_in);server.sin_family = AF_INET;server.sin_addr.s_addr = inet_addr(argv1);server.sin_port = htons(port);if (0>(ret=connect(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr)perror("connect error");close(sockfd);exit(1);while(1)/

14、这边只需一个死循环memset(buffer,0,2048);fprintf(stderr,"TCP>");fgets(buffer,SIZE,stdin);rvalue=send(sockfd,buffer,strlen(buffer),0);if (0=strcmp(buffer,"quitn")|(0=strcmp(buffer,"QUITn")/结束对话close(sockfd);break;if (0>rvalue)fprintf(stderr,"error in receiving datan");continue;sscanf(buffer,"%s",cmd);if (0=strcmp("cd",cmd)|(0=strcmp("CD",cmd)continue;/如果是cd命令则没有返回内容直接重新开始循环len=sizeof(struct sockaddr);if (0>(len=recv(sockfd,buffer,2048,0)perror("recv data errorn");close(sockfd);exit(1);bufferlen='0'printf(&

温馨提示

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

评论

0/150

提交评论