日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

服务器apache远程命令,Linux实例:用socket通讯远程执行命令

發布時間:2023/12/15 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务器apache远程命令,Linux实例:用socket通讯远程执行命令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下為引用的內容:

服務器端程序:

/**********************************************************

* server.c

* 服務器端程序

*

*********************************************************/

#include

#include

#include

#include

#include

#include

#include

#include

#define BUFSIZE 8192

#define DEFAULT_PORT 5320

enum{CMD_NAME,SRC_PORT};

int execute(char *command,char *buf,int bufmax);

int main(int argc,char *argv[])

{

struct sockaddr_in server;//服務器地址

struct sockaddr_in client;//客戶機地址

int len;//sockaddr_in的長度

int port;//服務器端口號

int s;//接收報文用描述符

int s0;//接收連接用描述符

int cn;//接收命令的字數

int sn;//發送報文的字節數

int rn;//接收報文的字節數

char cmd1[BUFSIZE];//第一個語句命令

char cmd2[BUFSIZE];//第二個語句命令

char recv_buf[BUFSIZE];//接收緩沖區

char send_buf[BUFSIZE];//發送緩沖區

//實際參數的處理(端口號)

if(argc==2){

if((port=atoi(argv[SRC_PORT]))==0){

struct servent *se;//服務信息

if((se=getservbyname(argv[SRC_PORT],"tcp"))!=NULL)

port=(int) ntohs((u_short)se->s_port);

else{

fprintf(stderr,"getservbyname error");

exit(EXIT_FAILURE);

}

}

}else

port=DEFAULT_PORT;

//使用TCP協議打開一個套接字

if((s0=socket(AF_INET,SOCK_STREAM,0))<0){

perror("socket");

exit(EXIT_FAILURE);

}

//設定服務器地址

memset((char *)&server,0,sizeof(server));

server.sin_family=AF_INET;

server.sin_addr.s_addr=htonl(INADDR_ANY);

server.sin_port=htons(port);

if(bind(s0,(struct sockaddr *)&server,sizeof(server))<0){

perror("bind");

exit(EXIT_FAILURE);

}

//開始接受建立連接請求

listen(s0,5);

//接收連接循環

while(1){

//接收連接處理

len=sizeof(client);

if((s=accept(s0,(struct sockaddr *)&client,&len))<0){

perror("accept");

exit(EXIT_FAILURE);

}

printf("Connected From '%s'",inet_ntoa(client.sin_addr));

#ifdef FORK_SERVER

if(fork()!=0){

close(s);

continue;

}

close(s0);

#endif

//服務器處理的主要子程序

while(1){

int i=0;//接收字符的計數器

sn=sprintf(send_buf,"TCP>");

send(s,send_buf,sn,0);

receive://流型數據的接收處理

if((rn=recv(s,&recv_buf[i],1,0))<0)

break;

//以換行為單位進行接收處理

if(recv_buf[i]!=''){

i++;

if(i

goto receive;

}

recv_buf[i]=' ';

printf("receive '%s'",recv_buf);

//接收命令的處理

if((cn=sscanf(recv_buf,"%s%s",cmd1,cmd2))<=0)

continue;

else if(cn==2 && strcmp(cmd1,"show")==0){

if(strcmp(cmd2,"route")==0)

#ifdef _linux

sn=execute("/usr/bin/netstat -rn",send_buf,BUFSIZE);

#else

sn=execute("/bin/netstat -rn",send_buf,BUFSIZE);

#endif

else if(strcmp(cmd2,"arp")==0)

#ifdef _linux

sn=execute("/usr/sbin/arp -an",send_buf,BUFSIZE);

#else

sn=execute("/sbin/arp -an",send_buf,BUFSIZE);

#endif

else if(strcmp(cmd2,"tcp")==0)

#ifdef _linux

sn=execute("/usr/bin/netstat -tn",send_buf,BUFSIZE);

#else

sn=execute("/bin/netstat -tn",send_buf,BUFSIZE);

#endif

else if(strcmp(cmd2,"nic")==0)

sn=execute("/sbin/ifconfig -a",send_buf,BUFSIZE);

else

sn=sprintf(send_buf,"parameter error '%s'"

"show[route|arp|tcp|nic]",cmd2);

}else if(cn==1){

if(strcmp(cmd1,"quit")==0)

break;

send_buf[0]=' ';

if(strcmp(cmd1,"help")!=0)

sprintf(send_buf,"command error '%s'",cmd1);

strcat(send_buf,"command:"

"show route"

"show arp"

"show tcp"

"show nic"

"quit"

"help");

sn=strlen(send_buf);

}else

sn=sprintf(send_buf,"command error '%s'",cmd1);

if(sn==0)

sn=sprintf(send_buf,"");

if(send(s,send_buf,sn,0)<0)

break;

printf("%s",send_buf);

}

printf("Connection closed.");

close(s);

}

close(s0);

return EXIT_SUCCESS;

}

/*

*int execute(char *command,char *buf,int bufmax);

*

*功能

*執行命令,將結果存儲到緩沖區中

*實際參數

*char *command;所執行的命令

*char *buf;存儲輸出結果的緩沖區

*int bufmax緩沖區的大小

*返回值

*int存儲到緩沖區的字符數

*/

int execute(char *command,char *buf,int bufmax)

{

FILE *fp;//文件指針

int i;//輸入數據的字節數

if((fp=popen(command,"r"))==NULL){

perror(command);

i=sprintf(buf,"server error: '%s' cannot execute.",command);

}else{

i=0;

while((buf[i]=fgetc(fp))!=EOF && i

i++;

pclose(fp);

}

return i;

}

總結

以上是生活随笔為你收集整理的服务器apache远程命令,Linux实例:用socket通讯远程执行命令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。