DESCRIPTION(描述)
services 是一个普通的 ASCII 码文件, 它在 internet 服务的友好原文名以及这些服务预先分配的端口和协议类型之间提供了映射. 每个联网程序必须查找该文件以获取其服务的端口号(和协议). C 库例程 getservent(3), getservbyname(3), getservbyport(3), setservent(3), 和 endservent(3) 支持由程序查询该文件.
端口号由 IANA(Internet Assigned Numbers Authority) 分配, 他们当前的工作是分配端口号时, 指定 TCP 和 UDP 协议. 这样, 大多数记录会包括两条子记录, 即使只是 TCP 的服务也是如此
端口号在 1024 之下的(也称作'低编码'端口)只能由 root (参见 bind(2),tcp(7),和udp(7).) 绑定. 这样连接到低编码端口的客户可信任运行在该端口上的服务是标准的实现, 而不是由某台机器的用户运行的无聊的服务.由 IANA 确定的众所周知的端口号通常只在 root 的控制范围之内
在 services 文件中出现的一条服务记录并不表示该服务当前在机器上运行.参见 inetd.conf(5) 以获知提供的Internet服务的配置.注意不是所有联网服务都由 inetd(8) 启动,因而也不会出现在 inetd.conf(5) 之中. 特别地,news (NNTP)和mail (SMTP)服务程序通常由系统引导脚本初始化.
services 文件所存放的位置由 /usr/include/netdb.h 中的 _PATH_SERVICES 定义. 它通常设为 /etc/services.
每行描述了一个服务,其格式如下:
- 服务名 端口 / 协议 [ 别名 ...] 这里的 服务名
- 是给服务所起的可供查找的友好的名字.它是区分大小写的.通常,客户端程序都以 服务名 命名. 端口
- 为该服务所用的端口号(十进制格式). 协议
- 为所使用的协议类型.该字段应与 protocols(5) 文件中的一条记录相匹配.典型的值包括 tcp 和 udp. 别名
- 可以空缺,或者是以tab分隔的该服务的其他名字的列表(不过请查看下面的BUGS章节).同样, 这些名字也是区分大小写的.
可以使用空格或者tab分隔这些字段.
注释以hash标识(#)开头,一直到该行末结束.空行可跳过.
服务名 必须是该文件的第一列,因为其前面的空格不会删去. 服务名 可以为任何可打印的字符,包括空格和tab,但是,应该使用字符的保守选择来最低限度地减少操作中的问题.例如:a-z,0-9,和连字符(-)看上去就是一个合理的选择.
不匹配该格式的行不应该在该文件中出现.(当前情况下, getservent(3),getservbyname(3),和getservbyport(3) 可以忽略它们.不过,不应该依靠这种方法.)
为了向后兼容,在 端口 号和 协议 名之间的斜杠(/)实际可以为斜杠或者是逗号(,).在现代的安装中使用逗号是落后的.
该文件也可以通过使用网络级命名服务如黄页/NIS(Yellow Pages/NIS)或BIND/Hesiod来在一个网络中发布.
一个 services 的样本文件看上去如下:
-
netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol msp 18/udp # message send protocol chargen 19/tcp ttytst source chargen 19/udp ttytst source ftp 21/tcp # 22 - unassigned telnet 23/tcp
BUGS
最大只能有35个别名,这是由 getservent(3) 代码的写入方式决定的.
比 BUFSIZ (当前为1024)个字符更长的行, getservent(3),getservbyname(3),andgetservbyport(3) 会忽略掉. 不过,这也会导致错过下一行.
FILES(相关文件)
- /etc/services
- Internet网络服务列表 /usr/include/netdb.h
- _PATH_SERVICES 的定义