linux下的超级服务器inetd

inetd服务是linux开机初始化由rc程序启动的一项守护进程,它通过监听端口来启动各项服务,流程 tcp/udp服务---->(5000端口来信)---->inted发现有来信----->启动相应的服务程序, 也就是说inted服务器充当一个功能就是创建socket服务端的前半段,即创建socket---->bind(端口)---->监听---->accept(接受信号),当来一个此端口的请求,他会fork+exec来执行相对应的服务程序.下面通过一个小例子还说明inetd服务的流程:

①. 首先在 /etc/inetd.conf 文件中的最后一行加入

ma streamtcp
nowaitroot
   /home/human/bb   xiao

tip: 这几个参数是用tab键分开的,这个inetd.conf文件是inetd服务器的配置文件,配置好了之后需要重启一下才能生效

首先开机启动的时候,rc启动inetd服务,此服务会读取inetd.conf文件中的每一行来进行监听,比如这一行,他会读取第一个参数 ma,发现是ma服务

然后它会在 /etc/service文件中找 ma服务所对应的端口,所以我们事先也要在/etc/service文件中填入一行 ma    6234/tcp

接着有读取了 第二第三个参数, 之后创建socket,bind,listen, accept,第四个参数的意思就是创建子进程后父进程不用等待直接可以接受此端口接受到的下一个命令

所以 accept 之后就是fork+exec,其中 exec中的启动函数是第五个参数/home/human/bb 名字叫bb的进程,第六个参数xiao不清楚,没有试验出来...

其中程序bb的源码非常简单如下:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{

    FILE *fp;
    system("echo hello >> /home/human/ma.txt");
    return 0;
}

这里就是网文件中打印一句话

之后创建访问程序(tcp)

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>

#define BUFLEN 255
#define SOCKADDR struct sockaddr
#define SERVER_PORT 6234 

int main(int argc, char** argv)
{
      struct sockaddr_in servaddr;
      int sockfd, n, flag;
      int num1, num2;
      char buffer[BUFLEN];
      char errmsg[] = "Server does not function. /n";
      struct hostent *hp;

      if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
      {
          printf("socket creating error!/n");
          exit(1);
      };

      memset(&servaddr, 0, sizeof(struct sockaddr_in));
      servaddr.sin_family = AF_INET;
      servaddr.sin_port = htons(SERVER_PORT);
      servaddr.sin_addr.s_addr=htonl(INADDR_ANY); 

      if(connect(sockfd, (struct sockaddr *)(&servaddr), sizeof(struct sockaddr_in)) <0 )
      {
           printf("Connection Failure!/n");
           exit(3);
      }
}

结束语:顺便提一下为什么会有inetd服务器的原因,因为如果没有的话,假设在系统中有10个请求服务端,然后就会创建10个接受进程来接受服务,这样系统就多了10个进程,那么如果没有请求来的话这10个进程还在挂起状态,严重的浪费了系统的资源, 所以人们就想用一个进程来做监听,所以就出来了个inetd服务器的东西,就是说它读取/etc/inetd.conf文件读取10个进程的服务项,然后创建socket等等,这样系统中只是一个进程在挂起,来请求时,就调用相应的任务进程即可,这样节省了系统的资源

时间: 2024-10-19 22:52:31

linux下的超级服务器inetd的相关文章

Linux下 不同颜色文件所代表的含义

linux 文件颜色的含义 蓝色代表目录 绿色代表可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰色表示其他文件 红色闪烁表示链接的文件有问题了 黄色表示设备文件 蓝色文件----------目录 白色文件----------一般性文件,如文本文件,配置文件,源码文件等 浅蓝色文件----------链接文件,主要是使用ln命令建立的文件 绿色文件----------可执行文件,可执行的程序 红色文件-----------压缩文件或者包文件 Linux下用字符表示的文件类型 -:普通文件 d

在Linux下利用crond实现一个定时任务并完成一个守护(精灵)进程

一.利用crond实现一个定时任务       在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为"crontab",是"cron table"的简写. crontab支持两种状态: a.直接编写计划任务: b.使用目录的方式,放在目录里面的都会定时执行,定时目录可在/etc/crontab中设定. 为当前用户创建cron服

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号.首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word1)ps a 显示现行终端机下的所有程序,包括其他用户的程序.2)ps -A 显示所有程序.3)ps c 列出程序时,显示

Linux下最简单的FTP服务器搭建方法

之前一直在Windows下做开发,当需要向开发板下载firmware时,一般都是开一个TFTPD32,设置好firmware所在的文件夹,一切就OK 了 现在换到Linux下,见识了服务器操作系统在服务配置领域的卓越 前后安装了wu-ftpd,vsftpd,pure-ftpd,tftpd(以及衍生的tftpd-hpa),没一个能让我的板子成功下到firmware的,还浪费了我大量的时间了解各自的配置文件格式.inetd/xinetd配置.syslog配置等等 最后,我想起了那句话"life is

Linux下各种后门和日志工具详解

攻入Linux系统后,很多入侵者往往就开始得意忘形了.这其中还有一个原因,就是技术性也要求更高了.下面,我们来看看一些常用的经典工具. 1.从这里延伸:后门和连接工具 (1)Httptunnel Tunnel的意思是隧道,通常HTTPTunnel被称之为HTTP暗道,它的原理就是将数据伪装成HTTP的数据形式来穿过防火墙,实际上,它是在HTTP请求中创建了一个双向的虚拟数据连接来穿透防火墙.说得简单点,就是说在防火墙两边都设立一个转换程序,将原来需要发送或接受的数据包封装成HTTP请求的格式骗过

Linux下各目录的作用

出自:http://www.linuxidc.com/Linux/2015-04/116032.htm Linux各个目录的作用及内容 一.根目录"/" 根目录位于目录结构的最顶层,用斜线(/)表示,类似于Windows操作系统的"C:\",包含Fedora操作系统中所有的目录和文件. 二./bin 目录又称为二进制目录,包含了那些供系统管理员和普通用户使用的重要linux命令的二进制映像.该目录存放的内容包括各种可执行文件,还有某些可执行文件的符号连接.常用的命令

Linux下WebSphereV8.5.5.0 安装详细过程

Linux下WebSphereV8.5.5.0 安装详细过程 自WAS8以后安装包不再区别OS,一份介质可以安装到多个平台.只针对Installation Manager 进行了操作系统的区分 ,Websphere产品介质必须通过专门的工具Install Managere安装.进入IBM的官网http://www.ibm.com/us/en/进行下载.在云盘http://yun.baidu.com/share/linkshareid=2515770728&uk=4252782771 中是Linu

10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包

- 10.6 监控io性能 - 10.7 free命令 - 10.8 ps命令 - 10.9 查看网络状态 - 10.10 linux下抓包 - 扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.html  - tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html  # 10.6 监控io性能 ![mark](http://oqxf7c508.bkt.clouddn.com/b

Linux下的SVN服务器搭建

鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始*********/ 系统环境:Centos 6.5 第一步:通过yum命令安装svnserve,命令如下: >yum -y install  subversion 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安装位置,可以用以下命令: >rpm -ql subve