当前位置: 首页 > 工具软件 > xinetd > 使用案例 >

04.配置unp.h头文件出现开启 xinetd daytime 服务时 /etc/xinetd.d下 没有daytime 文件的解决办法

柴赞
2023-12-01

一、引言

最近在学习 《Unix网络编程 卷1:套接字联网 API》。在编译其第一份代码 daytimetcpcli.c 的时候,发现作者使用到了 daytime 服务。比如下面这行代码:

servaddr.sin_port   = htons(13);    /* daytime server */

根据网上搜索相关信息得知,13 就是 xinet 内置的 daytime 服务的运行端口,其作用是,当有客户端请求 13 端口,daytime 服务则返回一串表示系统时间的字符串,比如:

25 JUN 2019 05:30:36 CST

因为我自己电脑上使用的是 Manjaro 系统(同 ArchLinux),因此在开启 xinetd daytime 服务上遇到了一些与其他系统(Ubuntu、Centos)不同的问题,比如说:

> 我安装完 xinetd 之后,在 /etc/xinetd.d 目录下根本就没有 daytime 文件。

接下来,我就把我解决这个问题的方法记录下来,以供网友们参考。

二、解决

根据网上的教程,安装完 xinetd 之后,到 /etc/xinetd.d 文件夹下编辑下 daytime 文件内容,将 disable 设置为 no 即可。

但是,等我安装完之后,根本就没发现有 daytime 文件。

不过天无绝人之路,我在另一个虚拟机 Ubuntu 环境下安装了 xinetd,然后在 /etc/xinetd.d 中找到 daytime 文件,然后将其复制到 Manjaro 的对应韦志中,新建一个 daytime 文件,修改了下 disable 的值为 no,重启了下 xinetd 服务,竟然就成功了!

这里我说的有点快,我简单总结下步骤:

1. 安装 xinetd

$ sudo pacman -S xinetd

2. 编辑 daytime

$ cd /etc/xinetd.d
$ sudo vim daytime

粘贴以下内容:

# description: An internal xinetd service which gets the current system time
# then prints it out in a format like this: "Wed Nov 13 22:30:27 EST 2002".
# This is the tcp version.
service daytime
{
        disable         = no
        type            = INTERNAL
        id              = daytime-stream
        socket_type     = stream
        protocol        = tcp
        user            = root
        wait            = no
}
# This is the udp version.
service daytime
{
        disable         = no
        type            = INTERNAL
        id              = daytime-dgram
        socket_type     = dgram
        protocol        = udp
        user            = root
        wait            = yes
}

3. 重启 xinetd.service

$ systemctl enable xinetd.service
$ systemctl restart xinetd.service

可以通过下面这个命令来查看是否开启 xinetd 服务

$ systemctl list-unit-files

4. 验证 daytime 服务
这样,运行《Unix网络编程 卷1:套接字联网 API》的 daytimetcpcli.c 代码,即可看到运行结果:

$ ./daytimetcpcli 127.0.0.1
25 JUN 2019 05:30:36 CST

至此,这个问题算是解决了:)

希望这篇博客能够给你带来一些帮助。

 类似资料: