مقدمه
لینوکس بهصورت پیشفرض مجموعهای گسترده از ابزارهای خط فرمان قدرتمند را در اختیار کاربران قرار میدهد. یکی از کاربردیترین این ابزارها Netcat است؛ یک ابزار شبکهای سبک اما بسیار انعطافپذیر که امکان برقراری ارتباط مستقیم با سیستمهای دیگر از طریق پروتکلهای TCP و UDP را فراهم میکند.
مدیران سیستم، توسعهدهندگان و متخصصان شبکه میتوانند از Netcat برای اسکن پورتها، تست سرویسها، انتقال فایل، عیبیابی مشکلات شبکه و حتی شبیهسازی رفتار کلاینتها استفاده کنند. در این راهنمای جامع از سایت دیدگاه، یاد میگیریم چگونه بهصورت عملی از Netcat برای ایجاد و تست ارتباطات TCP و UDP استفاده کنیم.
در طول این آموزش، با موارد زیر آشنا خواهید شد:
-
ارسال و دریافت داده با Netcat
-
اسکن پورتها و بررسی وضعیت سرویسها
-
راهاندازی ارتباط کلاینت–سرور ساده
-
تفاوت نسخههای مختلف Netcat (nc، ncat، netcat-openbsd)
-
دیباگ سرویسها بهصورت Real-Time
-
تفسیر خروجیهای خاموش بهخصوص در UDP
-
مقایسه Netcat با ابزارهایی مثل telnet و socat
نکات کلیدی (Key Takeaways)
-
Netcat یک ابزار همهکاره برای ایجاد ارتباط TCP و UDP است و در تست، دیباگ و انتقال داده کاربرد زیادی دارد.
-
استفادههای پایه شامل اتصال به پورتها، اسکن محدوده پورتها و ارسال داده خام است.
-
Netcat میتواند هم بهعنوان کلاینت و هم بهعنوان سرور عمل کند.
-
نسخههای مختلف Netcat رفتار متفاوتی دارند و شناخت نسخه مورد استفاده بسیار مهم است.
-
برای UDP معمولاً بازخوردی دریافت نمیشود و باید از ابزارهای مکمل مانند tcpdump استفاده کرد.
-
Netcat همیشه بهترین انتخاب نیست؛ ابزارهایی مثل socat امکانات پیشرفتهتری ارائه میدهند.
سینتکس عمومی Netcat
بهصورت پیشفرض، Netcat یک اتصال TCP به میزبان مقصد برقرار میکند:
netcat [options] host portاین دستور مشابه telnet عمل میکند، با این تفاوت که اتصال کاملاً رمزنگارینشده است.
برای ارسال بسته UDP از گزینه -u استفاده میشود:
netcat -u host portبرای اسکن یک بازه از پورتها:
netcat host startport-endportدر بسیاری از سیستمها، دستور nc در واقع یک لینک به یکی از نسخههای Netcat است و رفتار آن ممکن است متفاوت باشد.
تفاوت nc ، ncat و netcat-openbsd چیست؟
netcat-openbsd
نسخه پیشفرض در توزیعهای مبتنی بر Debian مانند Ubuntu است و امکانات زیر را دارد:
-
تعیین Timeout با
-w -
اسکن بدون ارسال داده با
-z -
غیرفعالسازی DNS با
-n -
پشتیبانی از UDP و IPv6
نصب:
sudo apt install netcat-openbsdnc
یک دستور مستقل نیست، بلکه لینک یا Alias به یکی از نسخههای Netcat است. برای بررسی نسخه واقعی:
which nc
ls -l $(which nc)ncat
نسخه بازنویسیشده توسط پروژه Nmap که در CentOS و RHEL استفاده میشود و امکاناتی مثل:
-
رمزنگاری SSL
-
پشتیبانی از Proxy
-
Broker Connection
مثال:
ncat --ssl -l 4444اسکن پورت با Netcat
برای اسکن پورتها از گزینه -z استفاده میشود:
اگر پورتی باز نبود، ممکن است لازم باشد قوانین فایروال iptables را نیز بررسی کنید.
netcat -z -v domain.com 1-1000اگر IP را میدانید، برای سرعت بیشتر از -n استفاده کنید:
netcat -z -n -v 198.51.100.0 1-1000فیلتر خروجی پورتهای باز:
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeededبرقراری ارتباط دوطرفه با Netcat
روی سیستم اول (سرور):
برای برقراری اتصال امنتر بین سرورها میتوانید از SSH Port Forwarding نیز استفاده کنید.
netcat -l 4444روی سیستم دوم (کلاینت):
netcat domain.com 4444پس از اتصال، هر متنی که تایپ شود در هر دو سمت نمایش داده میشود. برای خروج:
CTRL + Dاستفاده از Netcat برای دیباگ Real-Time
مشاهده Banner سرویسها
مثلاً برای SMTP:
nc mail.example.com 25خروجی:
220 mail.example.com ESMTP Postfixتست دستی HTTP
printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80این روش برای بررسی هدرها، وضعیت HTTP و رفتار Reverse Proxy بسیار مفید است.
ارسال فایل با Netcat
دریافتکننده:
nc -l 4444 > received_fileفرستنده:
nc domain.com 4444 < original_fileانتقال کل دایرکتوری:
# Receiver
nc -l 4444 | tar xzvf -
# Sender
tar -czf - * | nc domain.com 4444راهاندازی وبسرور بسیار ساده با Netcat
اجرای یکبار:
(echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"; cat index.html) | nc -l 8888اجرای دائمی:
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | nc -l 8888; done⚠️ فقط برای تست. نه امنیت دارد، نه مناسب استفاده واقعی است.
تفسیر خروجیهای خاموش (بهخصوص در UDP)
-
در TCP سکوت معمولاً یعنی اتصال برقرار شده ولی سرویس منتظر ورودی است.
-
در UDP سکوت کاملاً طبیعی است و هیچ تضمینی برای دریافت پاسخ وجود ندارد.
راهکارها:
-
استفاده از
-v -
بررسی ترافیک با tcpdump یا Wireshark
-
استفاده از ابزارهای تخصصیتر مثل dig یا iperf
مقایسه Netcat با Telnet و Socat
| ویژگی | Telnet | Netcat |
|---|---|---|
| TCP | دارد | دارد |
| UDP | ندارد | دارد |
| اسکریپتپذیری | محدود | بالا |
| وضعیت | منسوخ | فعال |
socat امکانات حرفهایتری مثل SSL، ارتباط Full-Duplex و اتصال Streamهای مختلف دارد اما یادگیری آن سختتر است.
جمعبندی
Netcat یکی از ابزارهای کلاسیک اما همچنان ضروری دنیای لینوکس و شبکه است. این ابزار به شما اجازه میدهد ارتباطات سطح پایین شبکه را بهصورت شفاف، سریع و قابل اسکریپت مدیریت کنید.
در این راهنمای جامع از دیدگاه، با کاربردهای عملی Netcat از اسکن پورت گرفته تا انتقال فایل، دیباگ سرویسها، راهاندازی سرور ساده و مقایسه با ابزارهای دیگر آشنا شدیم.
اگرچه Netcat برای محیطهای Production امن نیست، اما برای تست، عیبیابی و یادگیری شبکه، هنوز هم یکی از بهترین انتخابهاست.
برای برقراری ارتباط امن و رمزنگاریشده با سرورها، مطالعه آموزش اتصال به سرور ریموت با SSH نیز توصیه میشود.
