services(5) File Formats Manual services(5)

services - فهرست سرویسهای شبکه اینترنت و پورتهای متناظر

services یک فایل متنی ساده (ASCII) است که نگاشتی میان نام‌های متنی و کاربرپسند سرویس‌های اینترنتی و شماره پورت‌های اختصاص‌یافته و انواع پروتکل متناظر آن‌ها فراهم می‌کند. هر برنامه شبکه باید برای به دست آوردن شماره پورت (و پروتکل) سرویس خود به این فایل مراجعه کند. توابع کتابخانه C شامل getservent(3)، getservbyname(3)، getservbyport(3)، setservent(3) و endservent(3) از جستجو و پرس‌وجوی این فایل توسط برنامه‌ها پشتیبانی می‌کنند.

شماره پورت‌ها توسط سازمان IANA (سازمان تخصیص‌دهنده شماره‌های اینترنتی) تعیین و واگذار می‌شوند؛ و سیاست فعلی آن‌ها این است که در زمان تخصیص یک شماره پورت، هر دو پروتکل TCP و UDP را به آن اختصاص دهند. از این رو، اکثر مدخل‌ها دارای دو ردیف خواهند بود، حتی برای سرویس‌هایی که فقط از پروتکل TCP استفاده می‌کنند.

شماره پورت‌های کمتر از ۱۰۲۴ (اصطلاحاً پورت‌های «شماره‌پایین») فقط توسط کاربر ارشد (ریشه یا root) قابل اتصال و رزرو هستند (ببینید bind(2)، tcp(7) و udp(7)). این سازوکار باعث می‌شود کلاینت‌هایی که به پورت‌های شماره‌پایین متصل می‌شوند مطمئن باشند سرویسی که روی آن پورت در حال اجراست، پیاده‌سازی رسمی و استاندارد آن سرویس است، نه یک سرویس مخرب یا جعلی که توسط یکی از کاربران عادی ماشین اجرا شده باشد. پورت‌های شناخته‌شده (Well-known ports) که توسط IANA مشخص شده‌اند، معمولاً در همین محدوده اختصاصی کاربر ریشه قرار دارند.

وجود یک مدخل برای یک سرویس در فایل services لزوماً به این معنی نیست که آن سرویس در حال حاضر روی سیستم اجرا می‌شود. برای پیکربندی سرویس‌های اینترنتی ارائه‌شده، به inetd.conf(5) مراجعه کنید. توجه داشته باشید که همه سرویس‌های شبکه توسط inetd(8) راه‌اندازی نمی‌شوند و بنابراین در inetd.conf(5) ظاهر نخواهند شد. به‌ویژه، کارگزارهای اخبار (NNTP) و ایمیل (SMTP) معمولاً از طریق اسکریپت‌های راه‌اندازی و بوت سیستم آغاز به کار می‌کنند.

مکان فایل services توسط _PATH_SERVICES در <netdb.h> مشخص می‌شود. این مسیر معمولاً روی /etc/services تنظیم شده است.

هر خط یک سرویس را توصیف می‌کند و ساختاری به شکل زیر دارد:

service-name   port/protocol   [aliases ...]
که در آن:
نام خوانا و شناخته‌شده سرویس است که جستجو بر اساس آن انجام می‌شود. این نام به بزرگ و کوچک بودن حروف حساس است (case-sensitive). اغلب، برنامه کلاینت هم‌نام با service-name نام‌گذاری می‌شود.
شماره پورت (در مبنای ده‌دهی) مورد استفاده برای این سرویس است.
نوع پروتکل مورد استفاده است. این فیلد باید با مدخلی در فایل protocols(5) همخوانی داشته باشد. مقادیر معمول آن شامل tcp و udp است.
فهرستی اختیاری از نام‌های مستعار دیگر برای این سرویس است که با فاصله (space) یا تب (tab) از هم جدا می‌شوند. این نام‌ها نیز به بزرگ و کوچک بودن حروف حساس هستند.

برای جداسازی فیلدها می‌توان از فاصله (space) یا نویسه تب (tab) استفاده کرد.

توضیحات (کامنت‌ها) با علامت هش (#) شروع شده و تا انتهای خط ادامه می‌یابند. خطوط خالی نادیده گرفته می‌شوند.

نام سرویس (service-name) باید از ستون اول فایل آغاز شود، زیرا فاصله‌های ابتدای خط حذف نمی‌شوند. service-name می‌تواند شامل هر کاراکتر قابل چاپی به جز فاصله و تب باشد. با این حال، برای به حداقل رساندن مشکلات سازگاری باید از کاراکترهای استاندارد و محتاطانه استفاده شود. به عنوان مثال، استفاده از a-z، 0-9 و خط پیوند (-) گزینه‌ای منطقی و ایمن به نظر می‌رسد.

خطوطی که با این قالب سازگار نیستند نباید در فایل وجود داشته باشند. (در حال حاضر، این خطوط بدون اعلام خطا توسط getservent(3)، getservbyname(3) و getservbyport(3) نادیده گرفته می‌شوند؛ با این حال، نباید به این رفتار تکیه کرد.)

این فایل ممکن است در سراسر یک شبکه با استفاده از یک سرویس نام‌گذاری شبکه‌ای مانند NIS/Yellow Pages یا Hesiod/BIND توزیع شود.

یک نمونه از فایل 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

/etc/services
فهرست سرویس‌های شبکه اینترنت
<netdb.h>
محل تعریف _PATH_SERVICES

listen(2), endservent(3), getservbyname(3), getservbyport(3), getservent(3), setservent(3), inetd.conf(5), protocols(5), inetd(8)

استاندارد RFC شماره‌های اختصاص‌یافته (Assigned Numbers RFC)، آخرین ویرایش RFC 1700 (یا STD0002).

2024-05-02 Linux man-pages 6.9.1