Socket远程执行命令并结果回传(客户端)
2011-10-20 13:31
337 查看
/*
*客户端,执行命令,回传执行结果
*By rekken
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define SERVERPORT 3490
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 120
int main()
{
//declare the variable
to be used
FILE *pp;; //used
for file handle, pp used as buf after doing command
char sendout[65535]; //used
for store the data retrived from the file
struct sockaddr_in server_sockaddr,client_sockaddr; //for create socket
int sin_size,recvbytes,sendbytes; //recv
and send used for recv()
and send()
int sockfd,client_fd; //for socket creation
char buf[MAXDATASIZE]; //store the file dir from recv()
char output[MAXDATASIZE];
//creat socket connection
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
//set relevant parameters
in the socketr_in struct
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVERPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
//bind the sockfd
and port
if(bind(sockfd,(struct sockaddr
*)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind success!\n");
//begin
to listen
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
printf("listening....\n");
//call the accept(),wait
for the peer's connecting
if((client_fd=accept(sockfd,(struct
sockaddr *)&client_sockaddr,&sin_size))==-1){
perror("accept");
exit(1);
}
//receive the data from the peer
if((recvbytes=recv(client_fd,buf,sizeof(buf),0))==-1){
perror("recv");
exit(1);
}
//do the received command
if((pp
= popen(buf,
"r"))
==
NULL )
{
printf("popen error!\n");
return 0;
}
while(fgets(output, 255, pp))
{
printf("%s", output);
if((sendbytes=send(client_fd,output,strlen(output),0))==-1){
perror("send file");
exit(1);
}
printf("send data length:%d\n",sendbytes);
}
pclose(pp);
close(sockfd);
return 1;
}
/*
*讲命令执行部分封装
*/
int do_command(int sockfd,char
*command,char
*output)//sockfd套接字用于结果回传,command为待执行命令,output存放执行结果
{
FILE *pp;
int count_byte=0;
if((pp
= popen(command,
"r"))
==
NULL )
{
printf("popen error!\n");
return 0;
}
while(!feof(pp)){//判断文件尾,下两行用于将文件内容保存在output中
output[count_byte]=fgetc(pp);
count_byte++;
}
if((send(sockfd,output,count_byte,0))==-1){//将执行结果发送回请求端
perror("send file");
exit(1);
}
pclose(pp);
return count_byte;//返回值为传送字节数
}
*客户端,执行命令,回传执行结果
*By rekken
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define SERVERPORT 3490
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 120
int main()
{
//declare the variable
to be used
FILE *pp;; //used
for file handle, pp used as buf after doing command
char sendout[65535]; //used
for store the data retrived from the file
struct sockaddr_in server_sockaddr,client_sockaddr; //for create socket
int sin_size,recvbytes,sendbytes; //recv
and send used for recv()
and send()
int sockfd,client_fd; //for socket creation
char buf[MAXDATASIZE]; //store the file dir from recv()
char output[MAXDATASIZE];
//creat socket connection
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
//set relevant parameters
in the socketr_in struct
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVERPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
//bind the sockfd
and port
if(bind(sockfd,(struct sockaddr
*)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind success!\n");
//begin
to listen
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
printf("listening....\n");
//call the accept(),wait
for the peer's connecting
if((client_fd=accept(sockfd,(struct
sockaddr *)&client_sockaddr,&sin_size))==-1){
perror("accept");
exit(1);
}
//receive the data from the peer
if((recvbytes=recv(client_fd,buf,sizeof(buf),0))==-1){
perror("recv");
exit(1);
}
//do the received command
if((pp
= popen(buf,
"r"))
==
NULL )
{
printf("popen error!\n");
return 0;
}
while(fgets(output, 255, pp))
{
printf("%s", output);
if((sendbytes=send(client_fd,output,strlen(output),0))==-1){
perror("send file");
exit(1);
}
printf("send data length:%d\n",sendbytes);
}
pclose(pp);
close(sockfd);
return 1;
}
/*
*讲命令执行部分封装
*/
int do_command(int sockfd,char
*command,char
*output)//sockfd套接字用于结果回传,command为待执行命令,output存放执行结果
{
FILE *pp;
int count_byte=0;
if((pp
= popen(command,
"r"))
==
NULL )
{
printf("popen error!\n");
return 0;
}
while(!feof(pp)){//判断文件尾,下两行用于将文件内容保存在output中
output[count_byte]=fgetc(pp);
count_byte++;
}
if((send(sockfd,output,count_byte,0))==-1){//将执行结果发送回请求端
perror("send file");
exit(1);
}
pclose(pp);
return count_byte;//返回值为传送字节数
}
相关文章推荐
- Socket远程执行命令并结果回传(服务端)
- C语言 Socket入门示例2——模拟远程CMD(客户端向服务器发送命令,服务端执行该命令)
- python socket 实现远程执行命令 上传 下载文件
- Python编写的客户端给服务器发送指令执行相应的命令并返回结果
- linux 下远程执行命令 socket实现
- 执行远程server上的命令并返回结果之两各方法
- shell命令 grep不以某字符开头、ssh远程执行命令返回结果、ssh远程执行多个命令输入文件
- SSH+EXPECT远程执行命令及本地保存结果
- Python socket套接字实现C/S模式远程命令执行功能案例
- Python编写的客户端给服务器发送指令执行相应的命令并返回结果
- 基于TCP_socket套接字实现远程执行命令
- 使用ssh2 执行远程机器命令 获取执行结果
- python用socket实现客户端在linux服务器上执行命令
- 利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集
- python 使用ssh远程登录并执行命令返回结果
- linux 下远程执行命令 socket实现
- Python:通过Socket让远程电脑执行某些命令
- 通过python socket远程执行命令 4000 ,并返回值
- python socket c/s远程命令执行案例
- Linux下用socket实现远程执行命令