دستور Netcat یا nc، یک ابزار خط فرمان قدرتمند برای مدیران شبکه است که با استفاده از پروتکل‌های TCP یا UDP، داده‌ها را در اتصالات شبکه می‌خواند و یا می‌نویسد. در این مقاله، به شرح این دستور و کاربردهای آن به همراه مثال پرداخته شده است.

 

Netcat مستقل از پلتفرم است و برای Linux ،macOS ،Windows و BSD در دسترس است. شما می‌توانید از Netcat به منظور اشکال‌زدایی و نظارت بر اتصالات شبکه، اسکن پورت‌های باز، انتقال داده‌ها، به عنوان یک پروکسی و موارد دیگر استفاده کنید.

بسته Netcat از قبل روی macOS و توزیع‌های محبوب لینوکس مانند Ubuntu ،Debian یا CentOS نصب شده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: نحوه استفاده از دستور SFTP لینوکس برای انتقال فایل ها

 

ساختار Netcat

ابتدایی‌ترین ساختار ابزار Netcat به شکل زیر است:

nc [options] host port

در اوبونتو شما می‌توانید از netcat یا nc استفاده کنید. هر دوی آن‌ها یک symlinks به نسخه openBSD Netcat هستند.

به‌طور پیش‌فرض، Netcat تلاش می‌کند تا اتصال TCP را برروی میزبان و پورت مشخص‌شده راه‌اندازی کند. چنانچه بخواهید یک اتصال UDP ایجاد کنید، از گزینه -u استفاده نمایید:

nc -u host port

 

اسکن کردن پورت

اسکن کردن پورت، یکی از رایج‌ترین کاربردهای Netcat است. شما می‌توانید یک پورت یا یک محدوده پورت را با استفاده از ابزار Netcat اسکن کنید.

به عنوان مثال، برای اسکن پورت‌های باز در محدوده 20-80 می‌توانید از دستور زیر استفاده نمایید:

nc -z -v 10.10.8.8 20-80

گزینه z- به nc می‌گوید که تنها پورت‌های باز را (بدون ارسال هیچ داده‌ای به آن‌ها) اسکن کند، و گزینه v- اطلاعات مفیدی را در زمینه اجرای فرآیند ارائه می‌دهد.

خروجی این دستور، مشابه زیر خواهد بود:

output:
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

در صورتی که می‌خواهید تنها خطوط با پورت‌های باز را چاپ کنید، شما می‌توانید نتایج را با دستور grep فیلتر نمایید.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
output:
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

 

شما همچنین می‌توانید از Netcat به منظور یافتن نرم افزار سرور و نسخه آن استفاده نمایید. به عنوان مثال، اگر یک دستور "EXIT" به سرور برروی پورت SSH پیش فرض 22 ارسال کنید:

echo "EXIT" | nc 10.10.8.8 22

خروجی مشابه زیر خواهد بود:

output:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

برای اسکن پورت‌های UDP کافی است گزینه u- را مطابق شکل زیر به دستور اضافه نمایید:

nc -z -v -u 10.10.8.8 20-80

به طور معمول، Nmap نسبت به Netcat برای اسکن‌های پیچیده پورت مناسب‌تر است.

 

این مطلب نیز ممکن است برای شما مفید باشد: انتقال فایل از ویندوز 10 به لینوکس از طریق SSH

 

ارسال فایل از طریق Netcat

با ایجاد یک مدل اصلی کلاینت/سرور از Netcat می‌توان برای انتقال داده‌ها از یک میزبان به میزبان دیگر استفاده کرد.

این کار با تنظیم Netcat برای شنود برروی یک پورت خاص (با استفاده از گزینه l-) در میزبان دریافت کننده و سپس ایجاد یک اتصال TCP معمولی از میزبان دیگر و ارسال فایل روی آن صورت می‌گیرد.

بدین منظور، در گیرنده دستور زیر را اجرا کنید که پورت 5555 را برای اتصال ورودی باز می‌کند و خروجی را به فایل هدایت می‌نماید:

nc -l 5555 > file_name

سپس از میزبان فرستنده به میزبان گیرنده متصل شوید و فایل را ارسال نمایید:

nc receiving.host.com 5555 < file_name

 

به منظور انتقال دایرکتوری می‌توانید از tar برای بایگانی دایرکتوری در میزبان مبدا و استخراج آرشیو در میزبان مقصد استفاده کنید.

در میزبان دریافت کننده، ابزار Netcat را برای شنود اتصال ورودی برروی پورت 5555 تنظیم نمایید.

nc -l 5555 | tar xzvf -

در میزبان ارسال کننده، دایرکتوری را بسته بندی کرده و با اتصال به پورت شنودگر فرآیند nc در میزبان دریافت کننده، داده‌ها را ارسال نمایید:

tar czvf - /path/to/dir | nc receiving.host.com 5555

شما می‌توانید فرآیند پیشرفت انتقال را از هر دو طرف مشاهده کنید. پس از تکمیل، CTRL+C را بزنید تا اتصال بسته شود.

 

ایجاد یک سرور چت ساده

روش ایجاد یک چت آنلاین بین دو یا چند میزبان مشابه روش انتقال فایل است.

بدین معنی که در اولین میزبان یک فرآیند Netcat را برای شنود برروی پورت 5555 راه‌اندازی نمایید:

nc -l 5555

از میزبان دوم، دستور زیر را برای اتصال به پورت شنود اجرا کنید:

nc first.host.com 5555

اکنون، اگر پیامی را تایپ کرده و ENTER را فشار دهید، در هر دو میزبان نمایش داده می‌شود.

در آخر، به منظور بستن اتصال، CTRL+C را کلیک نمایید.

 

انجام درخواست HTTP

اگرچه ابزارهای بسیار بهتری برای درخواست‌های HTTP (مانند curl) وجود دارد؛ اما شما می‌توانید از Netcat نیز به منظور ارسال درخواست‌های مختلف به سرورهای ریموت استفاده کنید.

به عنوان مثال، به منظور بازیابی صفحه Netcat man از وب سایت OpenBSD، باید دستور زیر را تایپ نمایید:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

پاسخ کامل (شامل هدرهای HTTP و کد HTML) در ترمینال چاپ خواهد شد.

 

 

 

منبع:

linuxize