栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

linux FTP云盘项目 ls ifconfig get out 指令实现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux FTP云盘项目 ls ifconfig get out 指令实现

目录
  • 一 FTP 云盘
  • 二 服务器和客户端基本框架
  • 三 服务器 代码
  • 四 客户端代码
  • 五 指令实现思路
  • 六 ls ifconfig get out效果

一 FTP 云盘


总得来说

1 服务器作为中转站 返回客户端写的数据 (过滤的情况)
2 客户端在读的时候  服务器必定是在写数据  (不过滤的情况)
3 但是都是在客户端完成  效果是在各自中呈现。
二 服务器和客户端基本框架


补充函数

strcmp :字符串对比函数 

strcmp函数用法

三 服务器 代码
#include
#include
#include
#include
#include
#include
#include
#include

 int  chance(char cmd[128]) 
 {
   if(strcmp("ls",cmd)==0)
   {  
     return 1;
   }
 else    if(strcmp("ifconfig",cmd)==0)
   {  
     return 2;
   }
    else  if(strcmp("get out",cmd)==0)
   {  
     return 3;
   }
else
{
 return 0 ;
}

}

void choosecmd(char cmd[128],int c_fd)
{
    int ret=chance(cmd);
    FILE *c_ls;
    char *r_p=(char *)malloc(5000);
    char *g_p=(char *)malloc(5000);
   
    switch(ret)
    {
        case 1:c_ls=popen("ls","r");;//服务器作为过滤的情况 
                read(c_fd,r_p,sizeof(r_p));  
                write(c_fd,r_p,sizeof(r_p));
                memset(&r_p,0,sizeof(r_p));
                printf("OKn"); break;
                
        case 3 : printf("socket is stop work......");;//服务器作为过滤的情况 
                read(c_fd,g_p,sizeof(g_p));  
                write(c_fd,g_p,sizeof(g_p));
                memset(&g_p,0,sizeof(g_p));
                
         case 2:system("ifconfig")  break;//服务器作为不过滤的情况 
              
  }

}


int  main(int argc,char **argv)
{
    if(argc!=3)
    {
      perror("argc");
        exit(1);
   }
      
      int s_fd =-1;
       int c_fd =-1;
      struct sockaddr_in  sin;
      struct sockaddr_in  cin;
      
      s_fd=socket(AF_INET,SOCK_STREAM,0);
    
      if(fd==-1)
      {
         perror("socket");
        exit(1);
      }
      
      memset(&sin,0,sizeof(sin));
      
      sin.sin_family=AF_INET;
      sin.sin_port=htons(atoi(argv[1]));
     sin.sin_addr.s_addr=inet_addr(argv[2]);
    
      if(bind(s_fd,(struct sockaddr *)&sin,sizeof(sin))<0)
     {
              perror("bind");
               exit(1);
     }
     
      listen(s_fd,5)
    
     char readbuf[1024];
     socklen len=sizeof(cin);
      pid_t pid;
      
    while(1)
   {
     c_fd=accept(fd,(struct sockaddr* )&cin,&len);//&ci哪里都存有端口号和 i 地址了但是现在为网络字节       序 需要转为主机字节序
    
     if(c_fd==-1)
     {
            perror("accept");
               exit(1);
     }
    
   printf("IPV4=====%sn,ntohs(cin.sin_port));
                      //ntohs函数网络字节序转为主机字节序
     pid=fork();

   if(pid==0)
   {
       while(1)
       {  
            read(c_fd,readbuff,1024);
            choosecmd(readbuff,c_fd);
             memset(&readbuff,0,strlen(readbuff));
                   
       }
   }

}                              
      
        return 0;
}


四 客户端代码
#include
#include
#include
#include
#include
#include
#include



 int  chance(char cmd[128]) 
 {
   if(strcmp("ls",cmd)==0)
   {  
     return 1;
   }
 else    if(strcmp("ifconfig",cmd)==0)
   {  
     return 2;
   }
    else  if(strcmp("get out",cmd)==0)
   {  
     return 3;
   }
else
{
 return 0 ;
}

}

void choosecmd(char cmd[128],int c_fd)
{
    int ret=chance(cmd);
    
    char *r_p=(char *)malloc(5000);
 
    switch(ret)
    {
         case 1::system("ls") ; break;
         
         case 2:  read(c_fd,r_p,sizeof(r_p)); 
                   printf("%sn",r_p);  
                   memset(r_p,0,sizeof(r_p));   
            break;
         case 3 :system("get out") ; break;      
                         
  }

}

int  main(int argc,char **argv)
{

  if(argc!=3)
    {
      perror("argc");
        exit(1);
   }
      int c_fd=-1;
      struct sockaddr_in  sin;   
      fd=socket(AF_INET,SOCK_STREAM,0);
     
      if(fd<0)
      {
         perror("socket");
        exit(1);
      }
      
      memset(&sin,0,sizeof(sin));
      
      sin.sin_family=AF_INET;
      sin.sin_port=htons(atoi(argv[2]));
      sin.sin_addr.s_addr=inet_addr(argv[1]);
      
     if(connect(c_fd,(struct sockaddr*)&sin,sizeof(sin))<0)
     {
           perror("connect");
            exit(1);
     }
     char buf[1024];
    
     while(1)
     {
            gets(buf);
            
            write(c_fd,buf,sizeof(buf));
             
             printf("cmd :%sn",buf);
             
              choosecmd(buf,c_fd);
             
              printf("***********cmd************n");
             
             memset(buf,0,strlen(buf));
              
    }

   
     return 0;
}

五 指令实现思路
没啥花里胡哨的思路 就是这么简单。

ifconfig 因为服务器只能过滤 不可写  只能重定向 为客户端 才行 
六 ls ifconfig get out效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号