استفاده از Telnet در ویندوز

دستور telnet را در Command Prompt ویندوز اجرا می‌کنید و به‌جای اجرا شدن، پیام 'telnet' is not recognized as an internal or external command را می‌بینید. مشکل از ویندوز شما نیست: در ویندوز ۷ و همه نسخه‌های جدیدتر، Telnet Client به‌صورت پیش‌فرض نصب نیست و باید آن را دستی فعال کنید. در ادامه، هم روش‌های فعال‌سازی Telnet Client را می‌بینید و هم نحوه تلنت کردن به یک IP یا دامنه برای بررسی باز بودن پورت‌ها و تفسیر درست نتیجه‌ای که می‌گیرید.

Telnet چیست؟

Telnet که مخفف teletype network است، یک پروتکل شبکه برای برقراری ارتباط دوطرفه مبتنی بر متن از طریق رابط خط فرمان (CLI) محسوب می‌شود و امکان دسترسی از راه دور به سیستم‌ها را فراهم می‌کند.

Telnet یک پروتکل کلاینت–سرور است که قدمتی بیشتر از پروتکل TCP دارد. این پروتکل به کاربر اجازه می‌دهد از طریق یک اتصال TCP/IP به کامپیوتر دیگری در همان شبکه یا روی اینترنت وارد شود. سیستمی که نرم‌افزار Telnet Client را اجرا می‌کند، به خط فرمان یک دستگاه راه‌دور متصل می‌شود که معمولاً یک پلتفرم اختصاصی است.

هشدار امنیتی: Telnet رمزنگاری ندارد

Telnet در مقایسه با پروتکل مدرن‌تر SSH فاقد هرگونه رمزنگاری است. نام کاربری، رمز عبور و تمام داده‌ها به‌صورت متن ساده روی شبکه منتقل می‌شوند و هرکسی که در مسیر ترافیک قرار داشته باشد می‌تواند آن‌ها را بخواند. به همین دلیل، استفاده از Telnet برای ورود به سرور یا هر کاری که شامل انتقال اطلاعات حساس است توصیه نمی‌شود؛ برای دسترسی راه‌دور از SSH استفاده کنید.

با این حال، Telnet سبک و سریع است و در چند مورد مشخص همچنان کاربردی باقی مانده است:

  • تست باز بودن یا استفاده شدن پورت‌ها
  • عیب‌یابی سرورهای ایمیل و وب (مثلاً گفت‌وگوی دستی با SMTP)
  • بررسی درست کار کردن پیکربندی Port Forwarding
  • پیکربندی اولیه تجهیزات شبکه
  • دسترسی راه‌دور به شبکه‌های داخلی و قابل‌اعتماد

پیش‌نیازها

  • سیستم‌عامل ویندوز با دسترسی ادمین (Administrator Privileges) — فعال‌سازی Telnet Client بدون دسترسی ادمین ممکن نیست.
  • دسترسی به Command Prompt یا PowerShell
  • یک آدرس (نام دامنه یا IP) و یک شماره پورت برای انجام تست اتصال

Telnet چگونه کار می‌کند؟

پروتکل Telnet یک مسیر ارتباطی از طریق اتصال ترمینال مجازی ایجاد می‌کند. داده‌ها همراه با اطلاعات کنترلی Telnet در بستر پروتکل TCP منتقل می‌شوند. پورت پیش‌فرض سرویس Telnet پورت ۲۳ است؛ وقتی به یک سرویس واقعی Telnet روی این پورت متصل شوید، یک صفحه ورود (Login Screen) می‌بینید و می‌توانید با نام کاربری واقعی دستگاه راه‌دور وارد شوید. این نوع دسترسی، کنترل مستقیم و تمام امتیازات آن حساب کاربری را در اختیارتان می‌گذارد — و دقیقاً به همین دلیل است که فرستادن رمز عبور روی یک کانال رمزنگاری‌نشده خطرناک است.

نکته مهم این است که کلاینت Telnet را می‌توان روی هر پورت TCP اجرا کرد، نه فقط پورت ۲۳. همین ویژگی است که آن را به یک ابزار ساده برای تست باز بودن پورت‌ها تبدیل کرده است. دستور telnet علاوه بر ویندوز، روی توزیع‌های لینوکس هم در دسترس است (معمولاً باید بسته‌ای مانند telnet یا inetutils-telnet را نصب کنید). درباره macOS توجه داشته باشید که اپل از نسخه High Sierra به بعد باینری telnet را از سیستم‌عامل حذف کرده و روی مک‌های امروزی این دستور از پیش وجود ندارد؛ برای داشتن آن باید آن را جداگانه (مثلاً با Homebrew) نصب کنید.

توجه داشته باشید که نسخه‌های امروزی ویندوز فقط Telnet Client را ارائه می‌دهند؛ یعنی می‌توانید با ویندوز به یک سرویس Telnet وصل شوید، اما نمی‌توانید ویندوز را به یک سرور Telnet تبدیل کنید.

فعال‌سازی Telnet Client در ویندوز

اگر دستور telnet در Command Prompt شناسایی نشد، یعنی این قابلیت هنوز نصب نشده است. سه راه برای فعال کردن آن وجود دارد.

روش اول: فعال‌سازی از طریق رابط گرافیکی (Windows Features)

۱. وارد Control Panel شوید و بخش Programs and Features را باز کنید. در ویندوز ۷ این گزینه با عنوان Uninstall a program نمایش داده می‌شود؛ همان بخش است.

۲. در ستون سمت چپ روی Turn Windows features on or off کلیک کنید.

۳. در فهرست باز شده، گزینه Telnet Client را پیدا کنید (در برخی نسخه‌ها به‌صورت TelnetClient نوشته شده است)، تیک آن را بزنید و روی OK کلیک کنید.

۴. ویندوز فایل‌های موردنیاز را نصب می‌کند؛ این فرایند ممکن است کمی زمان ببرد. پس از پایان کار، روی Close کلیک کنید.

۵. یک پنجره جدید Command Prompt باز کنید (پنجره‌های از قبل باز شده مسیر به‌روزشده را نمی‌شناسند) و دستور telnet را اجرا کنید تا Microsoft Telnet Client باز شود.

در این مرحله باید خط فرمان Microsoft Telnet> را ببینید. برای خروج، دستور quit را اجرا کنید.

روش دوم: فعال‌سازی با Command Prompt و DISM

Command Prompt را با دسترسی Administrator باز کنید (روی آن راست‌کلیک و Run as administrator) و این دستور را اجرا کنید:

dism /online /Enable-Feature /FeatureName:TelnetClient

این روش روی ویندوز ۷ و همه نسخه‌های بعدی ویندوز کار می‌کند. سپس یک پنجره جدید Command Prompt باز کنید و telnet را اجرا کنید تا Microsoft Telnet Client بالا بیاید؛ برای خروج هم quit را وارد کنید.

دستور قدیمی pkgmgr دیگر کار نمی‌کند. در آموزش‌های قدیمی‌تر معمولاً این دستور را می‌بینید:

pkgmgr /iu:"TelnetClient"

ابزار pkgmgr از ویندوز ۷ منسوخ اعلام شد و در نسخه‌های بعدی ویندوز حذف شده است. اگر آن را اجرا کنید یا با خطای «شناخته نشد» روبه‌رو می‌شوید یا با هشدار منسوخ بودن. جایگزین درست آن همان dism بالا است.

روش سوم: PowerShell (و ویندوز سرور)

روی نسخه‌های دسکتاپ ویندوز، PowerShell را با دسترسی Administrator باز کنید و اجرا کنید:

Enable-WindowsOptionalFeature -Online -FeatureName TelnetClient

روی Windows Server، همین قابلیت با این دستور نصب می‌شود:

Install-WindowsFeature -Name Telnet-Client

برای بررسی وضعیت فعلی قابلیت (بدون تغییر دادن آن) می‌توانید در همان PowerShell ادمین از این دستور استفاده کنید:

Get-WindowsOptionalFeature -Online -FeatureName TelnetClient

یک نکته مهم: دستورهای Enable-WindowsOptionalFeature و Get-WindowsOptionalFeature به ماژول DISM در PowerShell نیاز دارند که از ویندوز ۸ و ویندوز سرور ۲۰۱۲ به بعد ارائه شده است. روی ویندوز ۷ این دستورها را در اختیار ندارید و باید از روش اول (رابط گرافیکی) یا روش دوم (dism) استفاده کنید.

نحوه Telnet کردن به یک IP یا دامنه

دو راه برای برقراری اتصال وجود دارد و نتیجه هر دو یکی است.

راه اول: دستور یک‌خطی

قالب دستور به این شکل است:

telnet <address> <port number>

این دستور هم آدرس‌های نمادین (Symbolic) و هم آدرس‌های عددی (Numeric) را می‌پذیرد. برای مثال:

telnet example.com 80
telnet 127.0.0.1 80
telnet 192.168.1.1 23

اگر شماره پورت را ننویسید، ویندوز به‌صورت پیش‌فرض پورت ۲۳ را امتحان می‌کند.

راه دوم: از داخل خود Telnet Client

اگر ابتدا فقط telnet را اجرا کرده باشید و خط فرمان Microsoft Telnet> را ببینید، می‌توانید از دستور open استفاده کنید. حرف o میان‌بر همین دستور است:

Microsoft Telnet> o example.com 80

اگر فقط o را بزنید و Enter کنید، خود کلاینت آدرس میزبان را از شما می‌پرسد و بعد می‌توانید نام سایت یا IP را همراه با پورت وارد کنید. این همان روشی است که در آموزش‌های قدیمی با عنوان «کلید O را بزنید» توضیح داده می‌شد.

یک نکته درباره باز کردن خط فرمان: در ویندوزهای امروزی مسیر Start > Run از منوی استارت حذف شده است. به‌جای آن کلیدهای Win + R را بزنید، عبارت cmd را تایپ کنید و Enter بزنید. اجرای cmd.exe از کادر جست‌وجوی منوی استارت هم همان نتیجه را می‌دهد.

تفسیر نتیجه: پورت باز است یا بسته؟

بعد از اجرای دستور، یکی از سه حالت زیر رخ می‌دهد:

۱. خطا می‌گیرید. پیامی مشابه Could not open connection to the host, on port 80: Connect failed نمایش داده می‌شود، یعنی اتصال TCP برقرار نشد.

سرعت خطا خودش یک سرنخ است: اگر خطا بلافاصله ظاهر شود، معمولاً یعنی سرور در دسترس است اما هیچ سرویسی روی آن پورت گوش نمی‌دهد (اتصال Reject شده). اگر دستور مدتی معطل بماند و بعد خطا بدهد، معمولاً یعنی بسته‌ها توسط یک فایروال بین راه بی‌صدا دور ریخته می‌شوند (Drop).

۲. صفحه خالی می‌شود. اگر صفحه پاک شود و مکان‌نما در گوشه بالا سمت چپ چشمک بزند، یعنی اتصال TCP برقرار شده و پورت باز است. این حالت «موفقیت» است، هرچند در نگاه اول شبیه هنگ کردن به نظر می‌رسد.

۳. خود سرویس پاسخ می‌دهد. بعضی سرویس‌ها به‌محض اتصال یک پیام خوش‌آمد (Banner) می‌فرستند؛ مثلاً اتصال به یک میزبان Telnet روی پورت ۲۳ صفحه ورود آن میزبان را نشان می‌دهد یا سرور SMTP روی پورت ۲۵ خطی مانند 220 mail.example.com ESMTP برمی‌گرداند. این واضح‌ترین تأییدِ برقرار شدن اتصال است.

دو نکته که معمولاً باعث نتیجه‌گیری اشتباه می‌شود:

  • اگر می‌خواهید بدانید فایروال یا شبکه، پورت را از بیرون باز گذاشته یا نه، تست را حتماً از یک شبکه بیرونی انجام دهید. تلنت زدن به 127.0.0.1 از روی خود سرور فقط نشان می‌دهد سرویس بالا است، نه اینکه از اینترنت قابل دسترسی است.
  • میزبان‌های نمایشی قدیمی مانند towel.blinkenlights.nl که در آموزش‌های قبلی زیاد به آن‌ها ارجاع داده می‌شد، همیشه در دسترس نیستند. اگر اتصال به آن‌ها برقرار نشد، لزوماً مشکل از سمت شما نیست؛ برای تست، سراغ میزبانی بروید که خودتان در اختیار دارید.

خروج از اتصال

وقتی هنوز در خط فرمان Microsoft Telnet> هستید، دستور quit کافی است. اما اگر اتصال برقرار شده و صفحه در اختیار سرویس راه‌دور است، اول کلیدهای Ctrl + ] را بزنید تا به خط فرمان Telnet برگردید و بعد quit را وارد کنید.

نکته دیگر برای عیب‌یابی دستی سرویس‌هایی مثل SMTP یا HTTP: کلاینت Telnet ویندوز به‌صورت پیش‌فرض کاراکترهایی را که تایپ می‌کنید نمایش نمی‌دهد. برای روشن کردن نمایش، پیش از برقراری اتصال در خط فرمان Telnet این دستور را اجرا کنید:

Microsoft Telnet> set localecho

محدودیت‌های Telnet و جایگزین امروزی

Telnet فقط می‌تواند بگوید اتصال TCP برقرار شد یا نه. چند محدودیت را در نظر داشته باشید:

  • برای پورت‌های UDP (مانند DNS روی ۵۳ یا OpenVPN روی ۱۱۹۴) اصلاً کار نمی‌کند، چون Telnet روی TCP کار می‌کند.
  • برای پورت‌های رمزنگاری‌شده مانند ۴۴۳ (HTTPS) یا ۹۹۳ (IMAPS) اتصال برقرار می‌شود، اما چون Telnet زبان TLS را نمی‌داند نمی‌توانید گفت‌وگوی معناداری داشته باشید. برای بررسی گواهی و Handshake از openssl s_client استفاده کنید.
  • خروجی آن برای اسکریپت‌نویسی مناسب نیست.

روی ویندوزهای امروزی، اگر فقط می‌خواهید باز بودن یک پورت را بررسی کنید، PowerShell ابزار بهتری در اختیارتان می‌گذارد که نیازی به نصب هیچ قابلیتی هم ندارد:

Test-NetConnection -ComputerName example.com -Port 80

این دستور به‌جای صفحه خالی، خروجی خوانا و مشخصی مانند TcpTestSucceeded : True برمی‌گرداند و در اسکریپت هم قابل استفاده است. توجه داشته باشید که Test-NetConnection از ویندوز ۸ و ویندوز سرور ۲۰۱۲ به بعد به‌صورت داخلی وجود دارد و روی ویندوز ۷ در دسترس نیست. با این حال Telnet هنوز برای گفت‌وگوی دستی با سرویس‌های متنی (مثل SMTP) جای خود را دارد.

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

جمع‌بندی

پروتکل Telnet راهی ساده برای برقراری اتصال مستقیم با یک میزبان راه‌دور فراهم می‌کند. در ویندوز باید Telnet Client را ابتدا از Windows Features، DISM یا PowerShell فعال کنید، سپس با telnet <address> <port> یا دستور o در داخل کلاینت به مقصد وصل شوید و نتیجه را از روی خطا، صفحه خالی یا بنر سرویس تفسیر کنید. برای دسترسی راه‌دور واقعی سراغ SSH بروید و برای تست‌های سریع پورت، Test-NetConnection گزینه دقیق‌تری است؛ اما به‌عنوان یک ابزار عیب‌یابی سبک، Telnet همچنان کارش را انجام می‌دهد.

ارسال نظر