services − Internet 網路服務列表
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
最大只能有35個別名,這是由 getservent(3) 代碼的寫入方式決定的.
比 BUFSIZ (當前為1024)個字符更長的行, getservent(3),getservbyname(3),andgetservbyport(3) 會忽略掉. 不過,這也會導致錯過下一行.
/etc/services
Internet網路服務列表
/usr/include/netdb.h
_PATH_SERVICES 的定義
getservent(3), getservbyname(3), getservbyport(3), setservent(3), endservent(3), protocols(5), listen(2), inetd.conf(5), inetd(8).
分配號碼RFC,最新的RFC 1700,(AKA STD0002)
黃頁服務的指南
BIND/Hesiod服務的指南
riser <boomer AT ccidnet DOT com>
2000/11/01
http://cmpp.linuxforum.net