免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1111 | 回复: 0
打印 上一主题 下一主题

Linux下用socket通讯,实现远程执行命令! [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之上海
日期:2016-05-05 09:45:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-19 22:52 |只看该作者 |倒序浏览
服务器端程序:
/**********************************************************
* 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\n");
        exit(EXIT_FAILURE);
      }
    }
  }else
    port=DEFAULT_PORT;
      
    //使用TCP协议打开一个套接字
  if((s0=socket(AF_INET,SOCK_STREAM,0))");
      send(s,send_buf,sn,0);
   
      receive:        //流型数据的接收处理
      if((rn=recv(s,&recv_buf,1,0))
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 8192
#define DEFAULT_PORT 5320
enum {SMD_NAME,DST_IP,DST_PORT};
int main(int argc,char *argv[])
{
  struct sockaddr_in server;    //服务器地址
  unsigned long dst_ip;         //服务器IP地址
  int port;     //端口号
  int s;        //套接字的描述符
  int n;        //输入数据的字节数
  char buf[BUFSIZE];    //接收缓
  char cmd[BUFSIZE];    //发送缓
  struct timeval tv;    //select超时时间
  fd_set readfd;        //使用select检索出的描述符
  //实际参数的检查
  if(argc!=2 && argc!=3){
    fprintf(stderr,"Usage: %s hostname[port]\n",argv[0]);
    exit(EXIT_FAILURE);
  }
  
  //检索服务器的ip地址
  if((dst_ip=inet_addr(argv[DST_IP]))==INADDR_NONE){
    struct hostent *he;                //主机信息
           
    if((he=gethostbyname(argv[DST_IP]))==NULL){
      fprintf(stderr,"gethostbyname error\n");
      exit(EXIT_FAILURE);
    }
    memcpy((char *)&dst_ip,(char *)he->h_addr,sizeof(he->h_addr));
  }
  //检索服务器的端口号
  if(argc==3){
    if((port=atoi(argv[DST_PORT]))==0){
      struct servent * se;        //服务信息
      
      if((se=getservbyname(argv[DST_PORT],"tcp"))!=NULL)
        port=(int) ntohs((u_short)se->s_port);
      else{
        fprintf(stderr,"getservbyname error\n");
        exit(EXIT_FAILURE);
      }
    }
  }else
    port=DEFAULT_PORT;
  
  //使用TCP协议打开一个套接字
  if((s=socket(AF_INET,SOCK_STREAM,0))

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/249/showart_1730409.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP