فایل ⁦hosts⁩ چیست؟ محل و ویرایش آن در ویندوز، مک و لینوکس

تاریخ انتشار:

15 دقیقه مطالعه

Acar Diveroli
نویسنده: Acar Diveroli
سطرهای کم‌رنگ فایل hosts دور فایلی با لبه ضخیم می‌شکنند؛ درونش سطری آبی ⁦203.0.113.10⁩ را به ⁦test.example.com⁩ نسبت می‌دهد

وب‌سایت شما به سرور تازه‌ای منتقل شده است و می‌خواهید پیش از بقیه دنیا آن را روی سرور جدید ببینید. یا یک راهنمای نصب از شما می‌خواهد «یک سطر به فایل hosts اضافه کنید» و شما فایل را پیدا نمی‌کنید، یا Notepad اجازه ذخیره آن را نمی‌دهد. هر سه ماجرا به یک فایل متنی کوچک می‌رسد که روی هر کامپیوتر ویندوز، مک و لینوکس وجود دارد.

این نوشته نشان می‌دهد فایل کجاست، کامپیوتر شما چگونه از آن استفاده می‌کند و چگونه آن را در ویندوز 11 و 10، macOS و لینوکس ویرایش کنید؛ سپس به قالب سطرها، بدافزارها، گام‌های بازنشانی مایکروسافت و دلیل بی‌اثر بودن فایل در ترافیکی که از پروکسی می‌گذرد می‌پردازد.

فایل hosts چیست؟

فایل hosts یک جدول جست‌وجوی محلی است: هر سطر آن می‌گوید «این نام در این آدرس آی‌پی است» و کامپیوتر شما بی‌آنکه از کس دیگری بپرسد آن را باور می‌کند. آدرس آی‌پی عددی است که کامپیوترها با آن یکدیگر را پیدا می‌کنند، مثل 203.0.113.10.

در حالت عادی این کار بر عهده DNS (Domain Name System، سامانه نام دامنه) است؛ سرویس راهنمای اینترنت که نام‌هایی مثل example.com را به آدرس تبدیل می‌کند. کل فرایند پرس‌وجو را در نوشته DNS چیست؟ توضیح داده‌ایم. فایل hosts از DNS قدیمی‌تر است: سند ⁦RFC 1034⁩، استاندارد DNS از سال 1987، یادآوری می‌کند که هر کامپیوتر در شبکه اولیه یک فهرست مشترک از نام‌ها به نام HOSTS.TXT را دریافت می‌کرد و این فهرست با بزرگ شدن شبکه از پس کار برنمی‌آمد. فایل hosts امروزی به همان شکل کار می‌کند، با این تفاوت که فهرست مال خود شماست و فقط کامپیوتر شما آن را می‌خواند.

فایل hosts کجاست؟

مسیر این فایل در هر سیستم‌عامل دسکتاپ ثابت است و فایل طوری محافظت می‌شود که فقط مدیر سیستم بتواند آن را تغییر دهد.

سیستممحلچه کسی می‌تواند آن را تغییر دهد
ویندوز 11 و 10C:\Windows\System32\drivers\etc\hostsمدیر سیستم
macOS/etc/hostsمدیر سیستم، با sudo
لینوکس/etc/hostsکاربر root، با sudo
اندرویدپارتیشن سیستمی فقط‌خواندنیهیچ‌کس، مگر اینکه گوشی روت شده باشد

مایکروسافت پوشه ویندوز را به شکل %WinDir%\System32\drivers\etc می‌نویسد؛ این شکل وقتی ویندوز روی درایو دیگری نصب شده باشد هم کار می‌کند و اگر آن را در کادر جست‌وجوی منوی Start تایپ کنید، پوشه باز می‌شود. نام فایل hosts است و هیچ پسوندی ندارد. در مک، فایل پیش‌فرض از قبل سطرهای localhost را دارد که نسخه اپل می‌گوید تغییرشان ندهید؛ پس سطرهای خودتان را زیر آن‌ها اضافه کنید.

کامپیوتر شما چگونه از فایل hosts استفاده می‌کند؟

هر وقت برنامه‌ای به آدرس یک نام نیاز دارد، سیستم‌عامل منبع‌هایش را به ترتیب بررسی می‌کند و با اولین پاسخ متوقف می‌شود:

  1. برنامه‌ای یک نام را می‌پرسد؛ مثلاً مرورگر آدرس test.example.com را می‌خواهد.
  2. فایل hosts بررسی می‌شود. ویندوز سطرهای آن را از پیش در کش کلاینت DNS بارگذاری می‌کند، همان‌طور که مستندات ipconfig مایکروسافت توضیح می‌دهد.
  3. پاسخ‌های اخیر DNS در کش بررسی می‌شوند؛ پس نامی که یک دقیقه پیش جست‌وجو شده به پرسش تازه‌ای نیاز ندارد.
  4. از سرور DNS پرسیده می‌شود؛ معمولاً از روتر شما یا از حل‌کننده DNS ارائه‌دهنده اینترنت‌تان.
  5. اولین پاسخ برنده است. اگر فایل hosts برای یک نام سطری داشته باشد، گام‌های 3 و 4 برای آن نام هرگز انجام نمی‌شوند.

در لینوکس، سطر hosts: در فایل /etc/nsswitch.conf این ترتیب را تعیین می‌کند و files در آنجا یعنی فایل hosts. DNS امن مرورگر هم فایل را نادیده نمی‌گیرد: Chromium، موتور کروم و اج، پیش از پرس‌وجوی رمزگذاری‌شده‌اش فایل hosts را بررسی می‌کند و طبق مستندات فایرفاکس، نام‌هایی که در این فایل آمده‌اند هرگز به حل‌کننده DNS over HTTPS آن فرستاده نمی‌شوند.

فایل hosts را در ویندوز 11 و 10 چگونه ویرایش کنیم؟

از Notepad استفاده کنید که با دسترسی مدیر باز شده باشد؛ بدون این گام، ویندوز اجازه ذخیره نمی‌دهد. گام‌ها در ویندوز 11 و 10 یکسان‌اند:

  1. منوی Start را باز کنید، Notepad را تایپ کنید، در نتایج روی Notepad (دفترچه یادداشت) راست‌کلیک کنید و Run as administrator (اجرا به‌عنوان مدیر) را انتخاب کنید.
  2. پنجره User Account Control (کنترل حساب کاربری) را که می‌پرسد آیا این برنامه اجازه دارد در دستگاه شما تغییر ایجاد کند، تأیید کنید.
  3. در Notepad کلیدهای Ctrl+O را بزنید، مسیر C:\Windows\System32\drivers\etc\hosts را در کادر File name (نام فایل) بچسبانید و Enter را بزنید. اگر به‌جای آن تا پوشه پیش می‌روید، فهرست نوع فایل را روی ⁦All files (*.*)⁩ (همه فایل‌ها) بگذارید؛ فایل hosts میان سندهای متنی نشان داده نمی‌شود، چون پسوند .txt ندارد.
  4. به انتهای فایل بروید و سطر خود را اضافه کنید؛ برای نمونه 203.0.113.10 test.example.com.
  5. با Ctrl+S فایل را با همان نام ذخیره کنید، سپس مرورگر را ببندید و دوباره باز کنید.

اگر Notepad می‌گوید اجازه این کار را ندارید یا پیشنهاد می‌کند نسخه‌ای را جای دیگری ذخیره کنید، با دسترسی مدیر باز نشده است. آن را ببندید و از گام 1 دوباره شروع کنید: نسخه‌ای که در پوشه Documents یا روی دسکتاپ ذخیره شود هرگز خوانده نمی‌شود.

گزینه گرافیکی: Hosts File Editor در PowerToys

مجموعه رایگان PowerToys مایکروسافت ابزاری به نام Hosts File Editor دارد که فایل را به شکل یک فهرست نشان می‌دهد. آن را از نماد PowerToys در سینی سیستم (system tray) باز کنید، New entry (ورودی جدید) را انتخاب کنید و آدرس، نام میزبان و در صورت تمایل یک توضیح را وارد کنید؛ کلید Active (فعال) هر ورودی را روشن یا خاموش می‌کند. این ابزار به‌طور پیش‌فرض با دسترسی مدیر اجرا می‌شود و پیش از ویرایش، یک نسخه پشتیبان تاریخ‌دار ذخیره می‌کند.

فایل hosts را در مک چگونه ویرایش کنیم؟

در macOS فایل را در ترمینال و با sudo ویرایش می‌کنید؛ sudo یک فرمان را با دسترسی مدیر اجرا می‌کند:

  1. Terminal (ترمینال) را باز کنید: در نوار منو روی Spotlight کلیک کنید و Terminal را تایپ کنید، یا در Finder پوشه ⁦/Applications/Utilities⁩ را باز کنید و روی Terminal دوبار کلیک کنید.
  2. sudo nano /etc/hosts را تایپ کنید و Return را بزنید.
  3. رمز ورود مک خود را وارد کنید. هنگام تایپ چیزی روی صفحه نمایش داده نمی‌شود؛ این عادی است.
  4. با کلیدهای جهت‌نما زیر سطرهای موجود بروید و ورودی خود را بنویسید.
  5. برای ذخیره Control-O و سپس Return را بزنید و برای خروج از ویرایشگر Control-X را.

اگر مرورگر همچنان از آدرس قدیمی استفاده می‌کند، فرمان sudo killall -HUP mDNSResponder را اجرا کنید؛ این فرمانی است که مقاله پشتیبانی بایگانی‌شده اپل برای پاک کردن کش DNS در ⁦OS X 10.10.4⁩ و نسخه‌های بعدی می‌دهد. سپس مرورگر را دوباره باز کنید. راه‌اندازی دوباره مک هم کش را پاک می‌کند.

فایل hosts را در لینوکس چگونه ویرایش کنیم؟

گام‌ها مثل مک است: یک ترمینال باز کنید، sudo nano /etc/hosts را اجرا کنید، سطر را اضافه کنید، با Ctrl+O ذخیره کنید و با Ctrl+X خارج شوید. سطرهایی را که توزیع لینوکس شما ساخته است، مثل سطرهای مربوط به localhost، نگه دارید و هر برنامه‌ای را که هنوز از آدرس قدیمی استفاده می‌کند دوباره راه‌اندازی کنید.

ورودی فایل hosts را چگونه بنویسیم؟

هر سطر فعال یک آدرس آی‌پی است، سپس دست‌کم یک فاصله یا تب، و سپس یک یا چند نام. صفحه راهنمای ⁦hosts(5)⁩ لینوکس قالب را به شکل IP_address canonical_hostname [aliases...] می‌دهد و هر چیزی را از # تا انتهای سطر توضیح به شمار می‌آورد؛ ویندوز هم همین قالب را می‌خواند. نمونه‌ای با آدرس‌ها و نام‌هایی که برای مستندسازی رزرو شده‌اند:

text
# Staging copy of the shop, remove after launch
203.0.113.10    test.example.com    shop.example.com

# Local project
127.0.0.1       myapp.test

# Switched off
# 198.51.100.7  old.example.com

ورودی اول دو نام را به یک سرور می‌فرستد و ورودی آخر هیچ کاری نمی‌کند، چون # آن را خاموش کرده است. 127.0.0.1 آدرس loopback است که همیشه به معنای «همین کامپیوتر» است؛ اینکه چه چیزی روی آن اجرا می‌شود را در نوشته localhost چیست؟ توضیح داده‌ایم.

سه محدودیت اغلب غافلگیرکننده است. نام‌ها باید دقیقاً یکسان باشند؛ پس سطری برای example.com نام www.example.com را پوشش نمی‌دهد و نویسه‌های عام (wildcard) مثل *.example.com کار نمی‌کنند. این فایل فقط آدرس نگه می‌دارد: نه http://، نه مسیر و نه شماره پورت. و هر سطر فقط یک آدرس می‌گیرد؛ پس نامی که هم آدرس IPv4 دارد و هم IPv6 به دو سطر نیاز دارد.

تغییر چگونه اعمال می‌شود؟

فایل را ذخیره کنید و سپس مرورگر را، که کش کوتاه‌مدت خودش را دارد، ببندید و دوباره باز کنید. اگر آدرس قدیمی همچنان پاسخ می‌دهد، کش DNS ویندوز را پاک کنید: در کادر جست‌وجوی منوی Start عبارت cmd را تایپ کنید، روی Command Prompt (خط فرمان) راست‌کلیک کنید، Run as administrator را انتخاب کنید و این فرمان را اجرا کنید:

bash
ipconfig /flushdns

از پنجره‌ای استفاده کنید که با دسترسی مدیر باز شده است. روی کامپیوتر ویندوز 11 (نسخه ⁦25H2⁩) که آزمایش کردیم، یک Command Prompt معمولی فرمان را با پیام نیاز به ارتقای دسترسی (elevation) رد کرد؛ این پیام در ویندوز انگلیسی چنین است: The requested operation requires elevation. مایکروسافت /flushdns را فرمانی توصیف می‌کند که پاسخ‌هایی را که ویندوز از DNS جمع کرده، از جمله پرس‌وجوهای ناموفق، پاک می‌کند؛ این فرمان به خود فایل hosts دست نمی‌زند.

فایل hosts به چه کاری می‌آید؟

  • آزمایش یک وب‌سایت روی سرور تازه پیش از آنکه رکوردهای DNS دامنه تغییر کنند؛ موردی که مستندات PowerToys مایکروسافت هم نام می‌برد.
  • دادن نام‌های کوتاهی مثل myapp.test به پروژه‌های توسعه محلی که به کامپیوتر خودتان اشاره می‌کنند.
  • مسدود کردن دامنه‌های تبلیغاتی و ردیاب روی کامپیوتر خودتان، با فرستادن آن‌ها به آدرسی که هیچ چیزی در آن پاسخ نمی‌دهد.

آیا بدافزار می‌تواند فایل hosts را تغییر دهد؟

بله، و به همین دلیل این فایل محافظت می‌شود. چون این فایل بر DNS مقدم است، یک سطر پنهان می‌تواند نام بانک شما را به آدرس یک مهاجم بفرستد، در حالی که نوار نشانی همچنان نام درست را نشان می‌دهد. Microsoft Defender ممکن است فایل ویرایش‌شده را با نام SettingsModifier:Win32/PossibleHostsFileHijack علامت‌گذاری کند و مایکروسافت دلیلش را صریح می‌گوید: بدافزارها اغلب این فایل را تغییر می‌دهند تا کاربران را به سایت‌های مخرب هدایت کنند.

HTTPS آسیب را محدود می‌کند: یک سرور جعلی معمولاً نمی‌تواند برای نام واقعی گواهی معتبر نشان دهد، پس مرورگر به شما هشدار می‌دهد. برای بررسی فایل، آن را در Notepad باز کنید (خواندن به دسترسی مدیر نیاز ندارد) و دنبال سطرهایی بگردید که با # شروع نمی‌شوند. فایل پیش‌فرض ویندوز 10 یا 11 چنین سطری ندارد؛ فایل روی کامپیوتر آزمایشی ویندوز 11 ما 22 سطر داشت که همه توضیح بودند. اگر ورودی‌هایی پیدا کردید که خودتان اضافه نکرده‌اید، با نرم‌افزار امنیتی‌تان یک اسکن کامل انجام دهید و سپس فایل را بازنشانی کنید.

فایل hosts را چگونه به حالت پیش‌فرض بازنشانی کنیم؟

راهنمای بازنشانی مایکروسافت برای ویندوز 11 و 10 فایل را با یک فایل تازه جایگزین می‌کند و فایل قدیمی را به‌عنوان نسخه پشتیبان نگه می‌دارد:

  1. Notepad را باز کنید و متن پیش‌فرض را از صفحه مایکروسافت در آن بچسبانید.
  2. ⁦File > Save as⁩ (فایل > ذخیره به‌عنوان) را انتخاب کنید، در File name عبارت "hosts" را همراه با علامت‌های نقل‌قول تایپ کنید، Save as type (نوع فایل) را روی ⁦All files (*.*)⁩ بگذارید و فایل را روی دسکتاپ ذخیره کنید.
  3. پوشه %WinDir%\System32\drivers\etc را باز کنید، روی فایل hosts فعلی راست‌کلیک کنید، Rename (تغییر نام) را انتخاب کنید و نام آن را hosts.old بگذارید.
  4. فایل تازه را از دسکتاپ به این پوشه منتقل کنید و اگر ویندوز اجازه مدیر خواست، Continue (ادامه) را انتخاب کنید.

در این متن پیش‌فرض حتی سطرهای localhost هم توضیح هستند، چون ویندوز خودش localhost را مدیریت می‌کند. در مک یا لینوکس، بازنشانی یعنی پاک کردن سطرهایی که خودتان اضافه کرده‌اید و نگه داشتن سطرهای اصلی localhost.

چرا فایل hosts هنگام استفاده از پروکسی اعمال نمی‌شود؟

فایل hosts فقط وقتی کار می‌کند که کامپیوتر خودتان نام را جست‌وجو کند و هنگام استفاده از پروکسی اغلب این کار را نمی‌کند. پروکسی سروری است که به‌جای شما به سایت‌ها وصل می‌شود؛ پس سایت آدرس آی‌پی پروکسی را می‌بیند، نه آدرس شما را.

با پروکسی HTTP یا HTTPS، مرورگر نام سایت را به پروکسی می‌دهد (برای سایت‌های HTTPS در درخواستی مثل CONNECT test.example.com:443) و پروکسی آن را با DNS خودش جست‌وجو می‌کند. در SOCKS5 به برنامه بستگی دارد: راهنمای curl می‌گوید --socks5 (یا socks5://) نام را به‌صورت محلی حل می‌کند، در حالی که --socks5-hostname (یا socks5h://) حل نام را به پروکسی می‌سپارد. این را با ⁦curl 8.22⁩ و یک پروکسی آزمایشی محلی بررسی کردیم: با socks5h:// خود نام به پروکسی رسید، و با socks5:// ابتدا curl نام را جست‌وجو کرد و با خطای curl: (6) Could not resolve host: test.example.com متوقف شد.

پس وقتی تغییری در فایل hosts اثری ندارد، دنبال یک پروکسی یا VPN فعال بگردید؛ برای آزمودن سایت روی سرور تازه، آن را خاموش کنید یا نام را به فهرست استثنای پروکسی اضافه کنید. همین حل نام از راه دور مانع می‌شود که پرس‌وجوهای DNS بیرون از اتصال پروکسی فرستاده شوند، همان‌طور که در نوشته نشت WebRTC و DNS آمده است.

برای برنامه‌هایی جز مرورگر، سرویس پروکسی SOCKS5 ما از حل نام از راه دور پشتیبانی می‌کند؛ پس جست‌وجوی نام در نقطه خروج انجام می‌شود.

یک پروکسی مسکونی با کشور و شهری که خودتان انتخاب می‌کنید هم نام‌ها را در خروجی خودش حل می‌کند؛ پس سروری که یک سایت برای شما برمی‌گزیند با همان موقعیت جور است.

اشتباه‌های رایج

  • ذخیره فایل با نام hosts.txt. در File Explorer ویندوز، گزینه ⁦View > Show > File name extensions⁩ (نمایش > نشان دادن > پسوندهای نام فایل) را روشن کنید تا نام واقعی را ببینید، سپس .txt را حذف کنید.
  • ویرایش بدون دسترسی مدیر و ذخیره نسخه‌ای در پوشه‌ای دیگر که ویندوز هرگز آن را نمی‌خواند.
  • نوشتن http://، مسیر یا پورت در سطر، یا انتظار اینکه example.com نام www.example.com را هم پوشش دهد.
  • فراموش کردن یک سطر آزمایشی؛ چند هفته بعد سایت فقط روی همان یک کامپیوتر خراب به نظر می‌رسد.
  • دانلود یک فایل hosts آماده از سایتی ناشناس. این فایل تعیین می‌کند کامپیوتر شما هر نامی را که در آن فهرست شده، از جمله نام بانک‌ها، به کجا بفرستد.

راهنمای انتخاب

نیاز شماچه کنید
دیدن سایت روی سرور تازه پیش از تغییر DNSسطری با آی‌پی و نام اضافه کنید، آزمایش کنید و سپس پاکش کنید
یک نام محلی کوتاه برای یک پروژهیک نام با پسوند .test را به 127.0.0.1 نسبت دهید
Notepad فایل را ذخیره نمی‌کندNotepad را دوباره با Run as administrator باز کنید
تغییر اثری نداردنام و پسوند را بررسی کنید، مرورگر را دوباره باز کنید، کش DNS را پاک کنید و پروکسی یا VPN را خاموش کنید
سطرهایی که خودتان اضافه نکرده‌ایداسکن بدافزار و سپس بازنشانی با گام‌های مایکروسافت
مسدود کردن تبلیغات روی همه دستگاه‌های خانهیک حل‌کننده DNS مسدودکننده تبلیغات روی روتر

پرسش‌های متداول

فایل hosts در ویندوز 11 کجاست؟

مسیر آن C:\Windows\System32\drivers\etc\hosts است، همان جایی که در ویندوز 10 بود. تایپ %WinDir%\System32\drivers\etc در کادر جست‌وجوی منوی Start پوشه را روی هر درایوی که باشد باز می‌کند.

چرا فایل hosts من کار نمی‌کند؟

معمولاً فایل با نام hosts.txt یا در پوشه اشتباه ذخیره شده است، نام دقیقاً یکسان نیست (از جمله www)، مرورگر یا ویندوز هنوز پاسخ قدیمی را نگه داشته‌اند، یا یک پروکسی یا VPN نام‌ها را به‌جای شما حل می‌کند. آن‌ها را به همین ترتیب بررسی کنید.

چرا نمی‌توانم فایل hosts را ذخیره کنم؟

چون فقط مدیر سیستم اجازه تغییر آن را دارد. Notepad را ببندید، آن را دوباره با Run as administrator اجرا کنید و فایل را از داخل خود Notepad باز کنید. اگر نرم‌افزار امنیتی جلوی تغییر را می‌گیرد، مطمئن شوید آن سطر را خودتان اضافه کرده‌اید.

پسوند فایل hosts چیست؟

هیچ پسوندی ندارد. نام فایل hosts است و افزودن .txt آن را به فایل دیگری تبدیل می‌کند که ویندوز نادیده‌اش می‌گیرد.

آیا می‌توان با فایل hosts سایت‌ها را مسدود کرد؟

روی کامپیوتر خودتان بله: نام‌های سایت را به آدرسی بفرستید که هیچ چیزی در آن پاسخ نمی‌دهد. این کار به‌راحتی برگشت‌پذیر است، فقط نام‌های دقیقاً یکسان را روی همان یک کامپیوتر پوشش می‌دهد و هر وقت یک پروکسی یا VPN نام‌ها را حل کند از کار می‌افتد؛ پس ابزار کنترل والدین یا ابزار اعمال سیاست نیست.

آیا می‌توان فایل hosts را در اندروید ویرایش کرد؟

روی یک گوشی معمولی نه. اندروید این فایل را روی پارتیشن سیستمی نگه می‌دارد که فقط‌خواندنی است و Verified Boot (بوت تأییدشده) آن را بررسی می‌کند؛ پس تغییر آن به روت کردن گوشی نیاز دارد. برای مسدود کردن دامنه‌های تبلیغاتی یا ردیاب، به‌جای آن از ساناد خصوصی (Private DNS) با ارائه‌دهنده‌ای استفاده کنید که این دامنه‌ها را مسدود می‌کند.

خلاصه

فایل hosts فهرست محلی کوتاهی از نام‌ها و آدرس‌های آی‌پی است که کامپیوتر شما پیش از پرسیدن از سرور DNS می‌خواند. این فایل در ویندوز در C:\Windows\System32\drivers\etc\hosts و در macOS و لینوکس در /etc/hosts قرار دارد، پسوند ندارد و ویرایش آن به دسترسی مدیر نیاز دارد. در هر سطر یک آدرس و نام‌های آن را بنویسید، پس از هر تغییر مرورگر را دوباره باز کنید یا کش DNS را پاک کنید و هر از گاهی فایل را برای سطرهایی که خودتان اضافه نکرده‌اید بررسی کنید. پروکسی نام‌ها را خودش حل می‌کند، پس ورودی‌های شما روی ترافیکی که از پروکسی می‌گذرد اعمال نمی‌شوند؛ اگر کارتان به اتصال از کشورها و شبکه‌های دیگر نیاز دارد، گزینه‌ها را در صفحه محصولات پروکسی ما مقایسه کنید.

پرسش از ChatGPTپرسش از Claude