实 验 报 告
学号: 姓名: 专业:软件学院 班级:09 第 3 周
课程名称
信息安全产品开发实践
实验课时
1
实验项目
远程控制系统
实验时间
2013927
实验目
流套接字数报套接字回顾
远程控制系统流程
实验环境
X86Windows7VMware90Red Hat Enterprise Linux 50
实验容(算法程序步骤方法)
利流套接字实现简单远程控制系统:
客户端输入quit客户端程序服务器端程序印退出信息终止程序执行
客户输入命令客户端命令通流套接字发送客户端服务器执行收命令结果发送客户端显示
果没客户输入命令服务器发送命令非法信息客户端显示该条信息
编写实验报告:
列出程序运行状态截图配文字说明
独立完成印报告报告语言中文少4页A4封面书写姓名学号
(接)
实验容(算法程序步骤方法)
修改代码:
编译
运行结果:
源代码 udpclientc
*
*
*
* Filename udpclientc
*
* Description This program is used to demostrate how to implement a udp rpc control server
*
* Version 10
* Created 2013骞9鏈5鏃16鏃6鍒5绉 * Revision none
* Compiler gcc
*
* Author Gang liang
* Organization Computer Science College Sichuan University
*
*
*
#include
#include
#include
#include
#include
#define PORT 8888
#define SIZE 2048
#include
*
* FUNCTION
* Name print_useage
* Description
*
*
void print_usage (char* cmd )
{
fprintf(stderrUsages ip address\ncmd)
} * end of function print_useage *
*
* FUNCTION
* Name main
* Description
*
*
int
main ( int argc char *argv[] )
{
int sockfd
struct sockaddr_in client
struct sockaddr_in server
int len
int port
int rvalue
char buffer[SIZE]
char cmd[10] * these two vars used to deal with cd command *
char path[2028]
init
sockfd1
bzero(&clientsizeof(struct sockaddr))
bzero(&serversizeof(struct sockaddr))
len1
rvalue1
portPORT
memset(buffer0sizeof(buffer))
bzero(cmd10)
bzero(path2048)
if (2argc)
{
print_usage(argv[0])
exit(1)
}
phrase 1 The creation of the socket
sockfdsocket(AF_INETSOCK_STREAM0)
if (1sockfd)
{
fprintf(stderrerror in creating socket\n)
exit(1)
}
Communation with the serverAttentionClient should send data to the server first
Set the destination's address
serversin_familyAF_INET
serversin_addrs_addrinet_addr(argv[1])
serversin_porthtons(port)
if (1connect(sockfd(struct sockaddr*)&serversizeof(server)))
{
perror(connect error\n)
close(sockfd)
return 1
}
while(1)
{
fprintf(stderrTCP>)
fgets(bufferSIZEstdin)
rvaluewrite(sockfdbufferstrlen(buffer)0)
if (0strcmp(bufferquit\n)||(0strcmp(bufferQUIT\N)))
{
fprintf(stderrquit\n)
break
}
if (0>rvalue)
{
fprintf(stderrerror in receiving data\n)
continue
}
sscanf(bufferscmd)
if ((0strcmp(cdcmd))||(0strcmp(CDcmd)))
continue
lensizeof(struct sockaddr)
rvalueread(sockfdbufferSIZE0)
if (0
buffer[rvalue]'\0'
fprintf(stderrs\nbuffer)
}
else
{
continue
}
}
close(sockfd)
return EXIT_SUCCESS
}
* end of function main *
Udpserverc
*
*
*
* Filename udpserverc
*
* Description This program is used to demostrate how to implement a udp rpc server
*
* Version 10
* Created 2013骞9鏈4鏃20鏃9鍒2绉 * Revision none
* Compiler gcc
*
* Author Gang Liang
* Organization Computer Science College Sichuan Universtiy
*
*
*
#include
#include
#include
#include
#include
#include
#define PORT 8888 *server port *
#define SIZE 2048 * 2K BUFFER *
int exec (char* commandchar* result)
{
FILE * in
int len
char c
len0
bzero(resultsizeof(result))
inpopen(commandr)
if (NULLin)
{
fprintf(stderrerror in create a pipe\n)
return 1
}
while(((cfgetc(in))EOF)&&(len
result[len]c
len++
}
result[len]'\0'
pclose(in)
if (0len)
{
sprintf(results cannot execute\ncommand)
}
return len
}
* end of function exec *
*
* FUNCTION
* Name main
* Description
*
*
int main ( int argc char *argv[] )
{
int sockfd * socket *
struct sockaddr_in client * ip address of client *
struct sockaddr_in server * ip address of server *
int len
int port
int rvalue
char send_buf[SIZE] * the result of buffer *
char recv_buf[SIZE] * the command buffer *
char cmd[10] * these two var used to deal with cd command *
char path[2048]
int opt
int connected
init
sockfd1
bzero(&clientsizeof(struct sockaddr))
bzero(&serversizeof(struct sockaddr))
len1
rvalue1
bzero(send_bufSIZE)
bzero(recv_bufSIZE)
portPORT
bzero(cmd10)
bzero(path2048)
optSO_REUSEADDR
connected1
phrase 1 create socket
sockfdsocket(AF_INETSOCK_STREAM0) * generate the socket *
if (1sockfd)
{
fprintf(stderrerror in creating socket\n)
exit(1)
}
setsockopt(sockfdSOL_SOCKETSO_REUSEADDR&optsizeof(opt))
phrase 2 bind the socket
serversin_familyAF_INET
serversin_porthtons(port)
serversin_addrs_addrhtonl(INADDR_ANY)
rvaluebind(sockfd(struct sockaddr*)&serversizeof(struct sockaddr))
if (1rvalue)
{
fprintf(stderrerror in binding socket\n)
close(sockfd)
exit(1)
}
listen socket
if (1listen(sockfd10))
{
perror(listen socket error\n)
close(sockfd)
return 1
}
phrase 3 communication with clientAttentionThe client send message to server firstthen the server
can send message to the clientOtherwise server cannot konw about the client
while(1)
{
lensizeof(struct sockaddr)
if (1(connectedaccept(sockfd(struct sockaddr*)&client&len)))
{
perror(three shakehands error\n)
close(sockfd)
return 1
}
while(1)
{
rvalueread(connectedrecv_bufSIZE)
if (0>rvalue)
{
fprintf(stderrerror in receiving data\n)
continue
}
recv_buf[rvalue1]'\0'
if (0strcmp(recv_bufquit))
{
fprintf(stderrthe client is quit\n)
close(connected)
break
}
sscanf(recv_bufs scmdpath)
if ((0strcmp(cdcmd)) ||(0strcmp(CDcmd)))
{
chdir(path)
continue
}
fprintf(stderrthe result is \nssend_buf)
exec(recv_bufsend_buf)
rvalue1
rvaluewrite(connectedsend_bufstrlen(send_buf))
if (0>rvalue)
{
fprintf(stderrerror in sending data\n)
continue
}
}
close(connected)
}
phrase 4release the socket
close(sockfd)
return EXIT_SUCCESS
}
* end of function main *
数记录
计算
TCP套接字编程(cont):
工作原理:
• 客户端接收户输入命令客户端通套接字命令传送服务器端
• 服务器收户命令命令进行解析
• 服务器端调应命令
• 命令执行结果发送客户端实现远距离控制功
结
(结 果)
功修改代码成功TCP实现远程控制
结
通实验掌握:
利流套接字实现简单远程控制系统熟悉流套接字数报套接字编程
做简单远程控制系统流程
指导老师评 议
成绩评定: 指导教师签名:
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档