ترفندهای مفید هنگام کار با نت کت. نمونه های مفید استفاده از ابزار netcat در نمونه های لینوکس Nc

این یادداشت ضبط خواهد شد دستورات مفیدبرای سیستم های مبتنی بر لینوکس که باید با آنها سر و کار داشتیم.

حذف فایل های قدیمی در لینوکس

# find /var/log -mtime +60 -type f -exec rm -rf () \;

که در در این مثالتمام فایل‌های موجود در فهرست /var/log که تاریخ اصلاح آن‌ها قدیمی‌تر از 60 روز است به صورت بازگشتی حذف می‌شوند.

نحوه "تلنت" با استفاده از ابزار netcat (nc).

# nc -v -w 5 10.200.7.2 -z 1414-1420

V: تشخیص اضافی (مختصر)

W 5: تایم اوت (در ثانیه)

10.200.7.2: میزبان

Z 1414-1420: محدوده پورت

# nc -v -w 5 10.200.7.2 -z 1414-1420 nc: اتصال به پورت 10.200.7.2 1414 (tcp) به پایان رسیده است: عملیات اکنون در حال انجام است nc: اتصال به پورت 10.200.7.2 درگاه 1415 (tcp) زمان اتمام اکنون در حال پیشرفت nc: اتصال به پورت 10.200.7.2 1416 (tcp) به پایان رسیده است: عملیات اکنون در حال انجام است اتصال به پورت 10.200.7.2 1417 با موفقیت انجام شد! nc: اتصال به پورت 10.200.7.2 1418 (tcp) به پایان رسیده است: عملیات اکنون در حال انجام است nc: اتصال به پورت 10.200.7.2 1419 (tcp) به پایان رسیده است: عملیات اکنون در حال انجام است nc: اتصال به پورت 10.200.7.2 1420 (tc) timed out: عملیات اکنون در حال انجام است

# nc -v -w 5 10.200.7.2 -z 1414-1420

nc: اتصال به پورت 10.200.7.2 1414 (tcp) تمام شد: عملیات اکنون در حال انجام است

nc: اتصال به پورت 10.200.7.2 1415 (tcp) تمام شد: عملیات اکنون در حال انجام است

nc: اتصال به پورت 10.200.7.2 1416 (tcp) تمام شد: عملیات اکنون در حال انجام است

اتصال به پورت 10.200.7.2 1417 با موفقیت انجام شد!

nc: اتصال به پورت 10.200.7.2 1418 (tcp) تمام شد: عملیات اکنون در حال انجام است

nc: اتصال به پورت 10.200.7.2 1419 (tcp) تمام شد: عملیات اکنون در حال انجام است

nc: اتصال به پورت 10.200.7.2 1420 (tcp) تمام شد: عملیات اکنون در حال انجام است

نحوه تعیین نسخه یک سیستم یونیکس

برای شروع، ما با صدور فرمانی که برای همه سیستم های یونیکس جهانی است، متوجه می شویم که این کلاس چه نوع سیستم عاملی است:

# unname -a

که چیزی شبیه این به ما می دهد:

Linux hostname.com 2.6.18-194.17.4.el5PAE #1 SMP دوشنبه 25 اکتبر 16:35:27 EDT 2010 i686 i686 i386 GNU/Linux

FreeBSD hostname.com 5.5-STABLE FreeBSD 5.5-STABLE #0: چهارشنبه 5 دسامبر 20:00:38 MSK 2007 [ایمیل محافظت شده]:/usr/obj/usr/src/sys/GENERIC i386یا AIX svcas07 3 4 000145364C00

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

# cat /proc/version

نسخه لینوکس 2.6.18-194.17.4.el5PAE ( [ایمیل محافظت شده]) (نسخه gcc 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP دوشنبه 25 اکتبر 16:35:27 EDT 2010

یعنی خانواده لینوکس و نسخه هسته در حال حاضر شناخته شده است.

خانواده Red Hat دستور دقیق تری برای پیدا کردن نسخه لینوکس دارند:

# cat /etc/redhat-release

نسخه 5.6 CentOS (نهایی)

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

# lsb_release -a

نسخه LSB: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarchشناسه توزیع کننده: CentOS توضیحات: نسخه 5.5 CentOS (نهایی)انتشار: 5.5 کد نام: نهایی

گزینه ای دیگر:

# cat ls /etc/*(-,_)(release,version) 2>/dev/null | head -n 1

چگونه ببینیم چه کسی یک دایرکتوری را نگه می دارد

# fuser -uc dir_name

فیوزر- ابزاری که فرآیندهایی را شناسایی می کند که از فایل ها یا سوکت های مشخص شده استفاده می کنند. مشابه گزینه -m و برای سازگاری با POSIX استفاده می شود.

-mنام یک فایل روی یک سیستم فایل نصب شده یا یک دستگاه بلوک ویژه نصب شده است. تمام فرآیندهایی که از فایل‌ها در این سیستم فایل استفاده می‌کنند را فهرست می‌کند. اگر فایل مشخص شده یک دایرکتوری است، نام/ به طور خودکار به نام آن اضافه می شود. و هر فایل سیستم، که می تواند در این دایرکتوری نصب شود.

-uنام مالک فرآیند را به هر PID اضافه می کند.

ما محاسبه می کنیم که یک دایرکتوری چقدر فضای دیسک را اشغال می کند

# du -sh /var

خروجی در مگابایت یا گیگابایت

مشاهده یک فایل با قابلیت اسکرول بالا و پایین

# file.txt کمتر

گرفتن هر تاریخ از سیستم

# date -d "رشته"

که در آن خط می تواند حاوی مقادیر باشد: "1 روز پیش"، "1 هفته پیش"، "1 سال پیش".

مشاهده آخرین n خط از فایل

# دم -n

به عنوان مثال، مشاهده 20 خط آخر: tail -20 access_log

ردیابی فایل

# tail -f access_log

دستور tail با سوئیچ f به شما امکان می دهد یک فایل را نظارت کنید: خطوط جدید (که توسط فرآیند دیگری به انتهای فایل اضافه می شوند) به طور خودکار در زمان واقعی روی صفحه چاپ می شوند. این به ویژه برای پیگیری گزارش ها مفید است.

لیست تمام فرآیندهای جاوا

#ps –ef| grep java

استفاده راحت برای نمایش تمام فرآیندهای سرور برنامه.

کار با access.log سرور HTTP

# head -10 access.2014.08.14.log | cut -d ” ” -f 1,8,10 | مرتب کردن | uniq

10 خط اول را از access.2014.08.14.log، مرتب‌سازی و حذف موارد تکراری، در قالب «client_ip/client_domain_name، URL، کد HTTP» نشان می‌دهد.

# cat access.2014.08.14.log | cut -d ” ” -f 1,8,10 | مرتب کردن | uniq > access_result.txt

همان چیزی است اما با خروجی به فایل C:\access_result.txt.

|

سیستم لینوکسشناخته شده برای این واقعیت است که اکثر توزیع ها تعداد زیادی از ابزارهای مفید خط فرمانبلافاصله با سیستم عامل ارسال می شود. با تجربه مدیران سیستممی تواند اکثر وظایف را با استفاده از ابزارهای داخلی بدون نیاز به نصب نرم افزار اضافی انجام دهد.

این راهنما به عملکرد ابزار اختصاص داده شده است . این "چاقوی ارتش سوئیس" از ابزارهای شبکه می تواند برای نظارت، آزمایش و انتقال داده ها در سراسر اتصالات شبکه مفید باشد.

این راهنما از اوبونتو 12.04 استفاده می کند، اما به طور کلی ابزار netcat تقریباً در هر توزیع مدرن موجود است. اوبونتو یک نسخه BSD از این ابزار دارد که در این مقاله از آن استفاده خواهد شد. نسخه های دیگر ممکن است متفاوت عمل کنند یا گزینه های متفاوتی ارائه دهند.

نحو عمومی

به طور پیش فرض، netcat با راه اندازی یک اتصال TCP به میزبان راه دور کار می کند.

نحو پایه:

پورت میزبان netcat [گزینه ها]

این دستور یک اتصال TCP را به میزبان مشخص شده در پورت مشخص شده آغاز می کند. اساساً عملکردی مشابه با قدیمی دارد تیم لینوکس- شبکه راه دور لطفاً توجه داشته باشید که اتصال شما بدون رمز انجام می شود.

برای ارسال یک بسته UDP به جای برقراری اتصال TCP، از گزینه -u استفاده کنید:

پورت میزبان netcat -u

برای تعیین محدوده ای از پورت ها، اولین و آخرین پورت محدوده را که با یک خط تیره از هم جدا شده اند را مشخص کنید:

میزبان netcat first_port-last_port

معمولا این دستوربا پرچم های اضافی استفاده می شود.

در اکثر سیستم ها می توانید از netcat یا nc استفاده کنید. آنها قابل تعویض هستند زیرا نام مستعار یک فرمان هستند.

استفادهبرای اسکن پورت

اغلب از netcat به عنوان اسکنر پورت استفاده می شود.

اگرچه نت کت احتمالاً بهترین نیست ابزار هوشمندبرای انجام این کار (nmap در بیشتر موارد برای این کار مناسب تر است)، می تواند یک اسکن پورت ساده را برای شناسایی سریع پورت های باز انجام دهد.

برای انجام این کار، محدوده ای از پورت ها را برای اسکن مشخص کنید (همانطور که در بالا نشان داده شده است)، و همچنین از گزینه -z استفاده کنید که به جای برقراری ارتباط، اسکن می کند.

به عنوان مثال، برای اسکن تمام پورت ها تا پورت 1000، اجرا کنید:

netcat -z -v domain.com 1-1000

همانطور که مشاهده می کنید این دستور علاوه بر گزینه -z از گزینه -v استفاده می کند که به لطف آن netcat اطلاعات دقیق تری را نمایش می دهد.

نتیجه به این شکل است:

nc: اتصال به درگاه domain.com 1 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به domain.com پورت 2 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به درگاه domain.com 3 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به درگاه domain.com 4 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به domain.com پورت 5 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به domain.com پورت 6 (tcp) ناموفق بود: اتصال رد شد
nc: اتصال به domain.com پورت 7 (tcp) ناموفق بود: اتصال رد شد
. . .
اتصال به پورت 22 domain.com با موفقیت انجام شد!
. . .

همانطور که می بینید، این دستور یک نتیجه نسبتاً دقیق ایجاد می کند و همچنین به شما می گوید که آیا اسکن هر پورت جداگانه موفقیت آمیز بوده است یا خیر.

این در هنگام استفاده از نام دامنه راحت است.

با این حال، با تعیین آدرس های IP لازم، می توانید سرعت اسکن را به میزان قابل توجهی افزایش دهید. سپس می توانید از پرچم -n برای نشان دادن اینکه آدرس IP نباید با استفاده از DNS حل شود استفاده کنید:

netcat -z -n -v 111.111.111.111 1-1000

پیام های برگشتی به خطای استاندارد ارسال می شوند. پیام های خطای استاندارد را می توان به خروجی استاندارد فرستاد تا نتایج را فیلتر کند.

برای تغییر مسیر خطای استاندارد به خروجی استاندارد، از دستور bash 2 استفاده کنید> نتایج حاصل با استفاده از grep فیلتر می شوند:

netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep موفق شد
اتصال به پورت 111.111.111.111 22 با موفقیت انجام شد!

بنابراین در حال حاضر شما می توانید ببینید که تنها پورت بازدر دستگاه راه دور در محدوده 1-1000 پورت 22، پورت استاندارد SSH است.

ارتباطبا استفاده از netcat

دستور netcat به ارسال بسته های TCP و UDP محدود نمی شود. همچنین می‌تواند در یک پورت برای اتصالات و بسته‌ها گوش دهد و اتصال دو نمونه netcat را در یک رابطه کلاینت و سرور ممکن می‌سازد.

اینکه کدام کامپیوتر سرور و کدام سرویس گیرنده است، تنها در زمان راه اندازی اولیه مهم است. پس از برقراری ارتباط، ارتباط در هر دو جهت یکسان است.

در یک دستگاه باید به netcat بگویید که برای اتصالات، به یک پورت خاص گوش دهد. این کار با استفاده از پارامتر -l و به دنبال آن شماره پورت انجام می شود:

با اجرای این دستور، netcat به اتصالات TCP در پورت 4444 گوش می دهد. اکنون کاربر معمولی(غیر روت) قادر به باز کردن پورت های زیر 1000 (برای امنیت سرور) نخواهد بود.

در سرور دوم باید از طریق پورت مشخص شده به دستگاه اول متصل شوید. این کار به همان روشی که قبلا نشان داده شد انجام می شود:

netcat domain.com 4444

هنگامی که اتصال برقرار شد، ممکن است به نظر برسد که هیچ اتفاقی نیفتاده است. اما اکنون می توانید پیام هایی را در دو طرف اتصال ارسال کنید و در هر دو سرور قابل مشاهده خواهند بود.

پیام خود را تایپ کرده و ENTER را فشار دهید. پیام در هر دو حالت محلی و سرور راه دور. این به صورت معکوس نیز کار می کند.

پس از پایان ارسال پیام، CTRL-D را فشار دهید تا اتصال TCP بسته شود.

اشتراک گذاری فایل ها با استفاده از netcat

پس از آشنایی با عملکردهای اساسی ابزار و تکمیل مثال های قبلی، می توانید به کارهای پیچیده تر بروید.

همانطور که قبلا ذکر شد، ابزار netcat اتصالات TCP را ایجاد می کند که می تواند برای انتقال تقریباً هر نوع اطلاعاتی، نه محدود به پیام های تایپ شده توسط کاربر، استفاده شود. از این دانش می توان برای تبدیل netcat به یک برنامه انتقال فایل استفاده کرد.

مجدداً، باید یک دستگاه را برای گوش دادن به اتصالات انتخاب کنید. با این حال، به جای چاپ اطلاعات روی صفحه (مانند مثال قبلی)، netcat تمام اطلاعات را مستقیماً در یک فایل قرار می دهد:

netcat -l 4444 > receive_file

در رایانه دوم باید یک فایل متنی ساده ایجاد کنید:

echo "سلام، این یک فایل است" > original_file

اکنون می توانید از این فایل به عنوان ورودی برای ایجاد اتصال به رایانه شنود استفاده کنید. فایل دقیقاً همانطور که به صورت تعاملی تایپ شده است منتقل می شود:

netcat domain.com 4444< original_file

همانطور که می بینید، کامپیوتری که منتظر اتصال بود، اکنون این کار را انجام داده است فایل جدیدبا نام "received_file" حاوی داده های وارد شده در رایانه دیگر:

گربه دریافت_فایل
سلام این یک فایل است

همانطور که می بینید، از چنین اتصالاتی می توان به راحتی برای انتقال هر نوع اطلاعاتی استفاده کرد.

به عنوان مثال، می توانید محتویات یک فهرست کامل را انتقال دهید. برای انجام این کار، یک tarball بدون نام ایجاد کنید، آن را به سیستم راه دور منتقل کنید و آن را در فهرست راه دور باز کنید.

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

netcat -l 4444 | tar xzvf -

خط تیره در انتهای فرمان به این معنی است که tarball روی ورودی استاندارد کار می کند، که در حال حاضر در صورت برقراری اتصال از طریق شبکه ارسال می شود.

در سمتی که حاوی دایرکتوری است که می خواهید انتقال دهید، آن دایرکتوری را در یک بایگانی بسته بندی کنید و سپس آن را به آن ارسال کنید کامپیوتر از راه دوربا استفاده از netcat:

tar -czf - * | netcat domain.com 4444

این بار، خط تیره در دستور tar به این معنی است که محتویات دایرکتوری فعلی (همانطور که با علامت * مشخص است) باید فشرده شده و منتقل شود و سپس نتیجه به خروجی استاندارد نوشته شود.

سپس در اتصال TCP نوشته می شود، به طرف دیگر اتصال منتقل می شود و در دایرکتوری فعلی رایانه راه دور باز می شود.

این فقط یک نمونه از انتقال داده های پیچیده تر از یک کامپیوتر به کامپیوتر دیگر است. همچنین معمولاً از دستور dd استفاده می شود که یک تصویر دیسک را در یک طرف ایجاد می کند و آن را به رایانه از راه دور منتقل می کند. با این حال، چنین رویکردی در این راهنما پوشش داده نشده است.

مانند یک وب سرور ساده

ابزار netcat قبلاً برای انتقال پیام ها و فایل ها استفاده شده است. همین رویکرد به شما کمک می کند تا از netcat به عنوان یک وب سرور ساده استفاده کنید. این می تواند برای آزمایش صفحات تمام شده مفید باشد.

ابتدا باید یک فایل HTML روی یک سرور ایجاد کنید:

که در این فایلمی توانید کد ساده زیر را قرار دهید:



صفحه تست


هدر سطح 1


عنوان فرعی


متن عادی اینجاست






ذخیره کنید و فایل را ببندید.

این فایل را نمی‌توان در پورت پیش‌فرض وب سرور (80) بدون حقوق ریشه ارائه کرد. زیرا به عنوان یک کاربر معمولی پورت 8888 را تنظیم کنید.

برای آزمایش یک صفحه و مشاهده نحوه رندر آن، چیزی مانند:

netcat -l 8888< index.html

اکنون با مراجعه به این سایت می‌توانید محتوا را در مرورگر مشاهده کنید:

http://server_IP:8888

این دستور صفحه را چاپ می کند و سپس اتصال netcat بسته می شود. وقتی می خواهید صفحه را به روز کنید، ناپدید می شود.

Netcat ممکن است صفحه را به طور نامحدود ارائه دهد. برای انجام این کار، باید آخرین دستور را با استفاده از خط زیر چرخه ای کنید:

در حالی که درست است؛ nc -l 8888 را انجام دهید< index.html; done

سپس صفحه پس از پایان اولین اتصال به دریافت اتصالات ادامه خواهد داد.

برای متوقف کردن حلقه، CTRL-C را تایپ کنید.

این سرور به شما این امکان را می دهد که ببینید صفحه چگونه در مرورگر رندر می شود، اما عملکرد گسترده تری ارائه نمی دهد. هرگز از چنین وب سروری برای سرویس دادن به سایت های واقعی استفاده نکنید: امن نیست و چیزهای ساده ای مانند پیوندها همیشه به درستی کار نمی کنند.

نتایج

این آموزش ویژگی های اساسی و استفاده از netcat را معرفی می کند. از آنجایی که این ابزار همه کاره است، می توان از آن برای تشخیص مشکلات و آزمایش عملکرد پایه اتصالات TCP/UDP استفاده کرد.

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

برچسب ها: , nc [-46bCDdhklnrStUuvZz] [-I طول] [-من فاصله] [-O طول] [-پ proxy_username] [-پ منبع_پورت] [-ق ثانیه] [-s منبع] [-T کلمه کلیدی] [-V rtable] [-w تایم اوت] [-ایکس پروکسی_پروتکل] [-ایکس آدرس_پروکسی[:بندر]] [مقصد] [بندر]

گزینه ها

-4 نیروها ncفقط از آدرس های IPv4 استفاده کنید.
-6 نیروها ncفقط از آدرس های IPv6 استفاده کنید.
اجازه پخش.
-سی ارسال به عنوان پایان خط.
-دی اشکال زدایی را در سوکت فعال کنید.
سعی نکنید از stdin بخوانید.
-h کمک nc را چاپ می کند.
-من طول اندازه بافر دریافت TCP را مشخص می کند.
-من فاصله فاصله زمانی تاخیر بین خطوط متن ارسالی و دریافتی را مشخص می کند. همچنین باعث تاخیر بین اتصالات به چندین پورت می شود.
-k نیروها ncبرای ادامه گوش دادن به اتصال دیگر پس از اتمام اتصال فعلی آن. استفاده از این گزینه بدون استفاده از این یک خطا است گزینه.
برای مشخص کردن آن استفاده می شود ncباید به جای شروع اتصال به یک میزبان راه دور، به یک اتصال ورودی گوش دهد. استفاده از این گزینه همراه با خطا است , -s، یا -zگزینه ها. علاوه بر این، هر مهلت زمانی مشخص شده با -wگزینه نادیده گرفته می شود.
-n هیچ گونه جستجوی DNS یا سرویسی را در هیچ آدرس، نام میزبان یا پورت مشخصی انجام ندهید.
-O طول اندازه بافر ارسال TCP را مشخص می کند.
proxy_username یک نام کاربری برای ارائه به سرور پراکسی که نیاز به احراز هویت دارد را مشخص می کند. اگر نام کاربری مشخص نشده باشد، احراز هویت انجام نخواهد شد. احراز هویت پروکسی در حال حاضر فقط برای پراکسی های HTTP CONNECT پشتیبانی می شود.
منبع_پورت پورت منبعی را که nc باید استفاده کند، مشروط به محدودیت‌های امتیاز و در دسترس بودن، مشخص می‌کند.
-q ثانیه پس از EOF در stdin، تعداد ثانیه مشخص شده صبر کنید و سپس خارج شوید. اگر ثانیه ها منفی است، برای همیشه صبر کنید.
-r مشخص می‌کند که پورت‌های مبدا یا مقصد باید به‌جای متوالی در یک محدوده یا به ترتیبی که سیستم به آنها اختصاص می‌دهد، به‌طور تصادفی انتخاب شوند.
گزینه امضای RFC 2385 TCP MD5 را فعال می کند.
-s منبع رابطی که برای ارسال بسته ها استفاده می شود را مشخص می کند. برای سوکت های دیتاگرام دامنه یونیکس، فایل سوکت موقت محلی را برای ایجاد و استفاده برای دریافت دیتاگرام مشخص می کند. استفاده از این گزینه همراه با خطا است گزینه.
-تی کلمه کلیدی مقدار IPv4 TOS را تغییر دهید. کلمه کلیدیممکن است یکی از بحرانی, کنترل ناپذیر, کم هزینه, تاخیر کم, نت کنترل, توان عملیاتی, قابلیت اطمینان، یا یکی از نقاط کد DiffServ: ef, af11 ... af43, cs0 ... cs7; یا عددی به صورت هگز یا اعشاری .
-t علل ncبرای ارسال پاسخ های RFC 854 DON"T و WON"T به درخواست های RFC 854 DO و WILL. این امکان استفاده از nc به اسکریپت جلسات telnet را فراهم می کند.
-U استفاده از سوکت های دامنه یونیکس را مشخص می کند.
-u به جای گزینه پیش فرض TCP از UDP استفاده کنید. برای سوکت های دامنه یونیکس، به جای سوکت جریان، از سوکت دیتاگرام استفاده کنید. اگر از یک سوکت دامنه یونیکس استفاده شود، یک سوکت دریافت موقت در /tmp ایجاد می شود، مگر اینکه -sپرچم داده شده است.
-V rtable جدول مسیریابی را برای استفاده تنظیم کنید. پیش فرض 0 است.
-v دارند ncخروجی پرمخاطب تری بدهد.
-w تایم اوت اتصالاتی که نمی توانند برقرار شوند یا پس از چند ثانیه در حالت بیکار هستند. این -wپرچم هیچ تاثیری روی گزینه، یعنی nc برای همیشه به یک اتصال، با یا بدون آن گوش می دهد -wپرچم. پیش فرض بدون مهلت است.
-ایکس پروکسی_پروتکل درخواست می کند که nc هنگام صحبت با سرور پراکسی از پروتکل مشخص شده استفاده کند. پروتکل های پشتیبانی شده عبارتند از " 4 " (SOCKS v.4)" 5 " (SOCKS v.5) و " متصل شود" (پراکسی HTTPS). اگر پروتکل مشخص نشده باشد، SOCKS نسخه 5 استفاده می شود.
-ایکس آدرس_پروکسی[:port] درخواست می کند که ncباید با استفاده از پروکسی در به مقصد متصل شود آدرس_پروکسیو بندر. اگر بندرمشخص نشده است، پورت معروف برای پروتکل پروکسی استفاده می شود (1080 برای SOCKS، 3128 برای HTTPS).
-Z حالت DCCP
-z مشخص می کند که nc فقط باید برای دیمون های شنیداری اسکن کند، بدون اینکه هیچ داده ای برای آنها ارسال کند. استفاده از این گزینه همراه با خطا است گزینه.

مقصدمی تواند یک آدرس IP عددی یا یک نام میزبان نمادین باشد (مگر اینکه -nگزینه داده شده است). به طور کلی، یک مقصد باید مشخص شود، مگر اینکه گزینه داده شده است (در این صورت از میزبان محلی استفاده می شود). برای سوکت های دامنه یونیکس، یک مقصد مورد نیاز است و مسیر سوکت برای اتصال به آن است (یا گوش دادن به آن اگر گزینه داده شده است).

پورت می تواند یک عدد صحیح یا یک محدوده از پورت ها باشد. محدوده ها به شکل هستند nn-mm. به طور کلی، یک پورت مقصد باید مشخص شود، مگر اینکه -Uگزینه داده شده است.

مدل مشتری/سرور

ساخت یک مدل کلاینت/سرور بسیار ساده با استفاده از آن بسیار ساده است nc. در یک کنسول، شروع کنید ncگوش دادن در یک پورت خاص برای اتصال. مثلا:

Nc -l 1234

nc اکنون در پورت گوش می دهد 1234 برای یک اتصال در کنسول دوم (یا ماشین دوم)، به دستگاه و پورتی که به آن گوش داده می شود متصل شوید:

Nc 127.0.0.1 1234

اکنون باید یک اتصال بین پورت ها وجود داشته باشد. هر چیزی که در کنسول دوم تایپ شود به کنسول اول متصل می شود و بالعکس. پس از تنظیم اتصال، ncواقعاً اهمیتی ندارد که کدام طرف به عنوان "سرور" و کدام طرف به عنوان "کلینت" استفاده می شود. اتصال ممکن است با استفاده از EOF خاتمه یابد (' ^D’).

وجود ندارد یا -eگزینه ای در نت کت مدرن است، اما همچنان می توانید پس از برقراری ارتباط با تغییر مسیر توصیف کننده های فایل، دستوری را اجرا کنید. در اینجا محتاط باشید زیرا باز کردن یک پورت و اجازه دادن به هر کسی که متصل است دستور دلخواه را در سایت شما اجرا کند خطرناک است. اگر واقعاً نیاز به انجام این کار دارید، در اینجا یک مثال آورده شده است:

در سمت "سرور":

Rm -f /tmp/f; mkfifo /tmp/f cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

در سمت "مشتری":

Nc host.example.com 1234

(اعلام پوسته از host.example.com)

با استفاده شروع کنید ncبرای گوش دادن در یک پورت خاص، با خروجی ضبط شده در یک فایل:

Nc -l 1234 > filename.out

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

Nc host.example.com 1234< filename.in

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

صحبت با سرورها

گاهی اوقات صحبت با سرورها "به صورت دستی" به جای رابط کاربری مفید است. این می تواند به عیب یابی کمک کند، زمانی که ممکن است لازم باشد تا بررسی شود که سرور چه داده هایی را در پاسخ به دستورات صادر شده توسط مشتری ارسال می کند. به عنوان مثال، برای بازیابی صفحه اصلی یک وب سایت:

Printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

توجه داشته باشید که این هدرهای ارسال شده توسط را نیز نمایش می دهد وب سرور. آنها را می توان با استفاده از ابزاری مانند فیلتر کرد sed، در صورت لزوم

زمانی که کاربر فرمت درخواست های مورد نیاز سرور را بداند، می توان نمونه های پیچیده تری ایجاد کرد. به عنوان مثال دیگر، ممکن است یک ایمیل با استفاده از:

NC [-C] localhost 25<< EOF HELO host.example.com MAIL FROM:< >RCPT به:< >DATA بدنه ایمیل. . ترک EOF

اسکن پورت

ممکن است دانستن اینکه کدام پورت ها باز هستند و سرویس ها را روی ماشین مورد نظر اجرا می کنند مفید باشد. این -zپرچم را می توان برای گفتن استفاده کرد ncبرای گزارش پورت های باز، به جای شروع اتصال. معمولاً با استفاده از این گزینه همراه با -vگزینه.

Nc -zv host.example.com 20-30 اتصال به host.example.com پورت 22 با موفقیت انجام شد! اتصال به پورت 25 host.example.com با موفقیت انجام شد!

محدوده پورت برای محدود کردن جستجو به پورت ها مشخص شد 20 - 30 ، و با افزایش ترتیب اسکن می شود.

همچنین می توانید لیستی از پورت ها را برای اسکن مشخص کنید، به عنوان مثال:

Nc -zv host.example.com 80 20 22 nc: اتصال به host.example.com 80 (tcp) ناموفق بود: اتصال رد شد nc: اتصال به host.example.com 20 (tcp) ناموفق بود: اتصال رد شد اتصال به host.example پورت .com موفق شد!

پورت ها با سفارشی که شما داده اید اسکن می شوند.

از طرف دیگر، ممکن است دانستن اینکه کدام نرم افزار سرور در حال اجرا است و کدام نسخه مفید است. این اطلاعات اغلب در بنرهای تبریک وجود دارد. برای بازیابی اینها ابتدا باید یک اتصال برقرار کرد و بعد از بازیابی بنر اتصال را قطع کرد. این را می توان با تعیین یک بازه زمانی کوچک با استفاده از -wپرچم گذاری کنید، یا شاید با صدور فرمان "QUIT" به سرور:

Echo "QUIT" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 عدم تطابق پروتکل. 220 host.example.com گیرنده SMTP IMS نسخه 0.84 آماده

مثال ها

nc -p 31337 -w 5 host.example.com 42

اتصال TCP به پورت را باز می کند 42 از host.example.comبا استفاده از پورت 31337 به عنوان پورت منبع، با مهلت زمانی 5 ثانیه

Nc -u host.example.com 53 nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

مانند مثال بالا، اما این بار احراز هویت پروکسی را با نام کاربری فعال می کند. کاربر"اگر پروکسی به آن نیاز داشته باشد.

دستورات مرتبط

ifconfig- پیکربندی رابط های شبکه را مشاهده یا تغییر دهید.

در این مقاله به ابزار محبوب شبکه netcat و ترفندهای مفید هنگام کار با آن نگاه می کنم.


Netcat یک ابزار یونیکس است که به شما امکان می دهد اتصالات TCP و UDP را برقرار کنید، داده ها را از آنجا دریافت کنید و آن را انتقال دهید. با وجود سودمندی و سادگی آن، بسیاری نمی دانند چگونه از آن استفاده کنند و به ناحق آن را دور می زنند.


با استفاده از این ابزار، می توانید برخی از مراحل را هنگام انجام تست نفوذ انجام دهید. این می تواند زمانی مفید باشد که دستگاه مورد حمله بسته های نصب شده نداشته باشد (یا جلب توجه کند)، محدودیت هایی وجود داشته باشد (به عنوان مثال، دستگاه های IoT/Embedded) و غیره.


کارهایی که می توانید با netcat انجام دهید:

  • اسکن پورت ها؛
  • پورت های فوروارد؛
  • جمع آوری بنرهای خدماتی؛
  • گوش دادن به پورت (پیوند برای اتصال معکوس)؛
  • دانلود و آپلود فایل ها؛
  • خروجی محتوای خام HTTP.
  • یک مینی چت ایجاد کنید.

به طور کلی، با کمک netcat می توانید برخی از ابزارهای یونیکس را جایگزین کنید، بنابراین این ابزار را می توان نوعی ترکیب برای انجام کارهای خاص در نظر گرفت.

مثال های کاربردی

در بسیاری از موارد، در صورت نیاز به بررسی یک هاست خاص، از telnet یا خدمات سرویس خود برای شناسایی هاست یا بنر استفاده می کنند. چگونه netcat می تواند به ما کمک کند:

در حال بررسی برای باز بودن پورت TCP 12345

$ nc -vn 192.168.1.100 12345
nc: اتصال به 192.168.1.100 12345 (tcp) ناموفق بود: اتصال رد شد

$ nc -v 192.168.1.100 22
اتصال به پورت 192.168.1.100 22 با موفقیت انجام شد!
SSH-2.0-OpenSSH

اسکن پورت های TCP با netcat:

$ nc -vnz 192.168.1.100 20-24

با چنین اسکنی هیچ اتصالی به پورت وجود نخواهد داشت، بلکه تنها خروجی یک اتصال موفق خواهد بود:


nc: Connectx به 192.168.1.100 پورت 20 (tcp) ناموفق بود: اتصال رد شد
nc: Connectx به 192.168.1.100 پورت 21 (tcp) ناموفق بود: اتصال رد شد
0 انجمن پیدا شد
1 اتصال پیدا شد:
1: پرچم = 82
outif en0
src 192.168.1.100 پورت 50168
dst 192.168.1.100 پورت 22
اطلاعات رتبه در دسترس نیست
اطلاعات TCP aux موجود است
اتصال به پورت 22 192.168.1.100 با موفقیت انجام شد!
nc: Connectx به 192.168.1.100 پورت 23 (tcp) ناموفق بود: اتصال رد شد
nc: Connectx to 192.168.1.100 پورت 24 (tcp) ناموفق بود: اتصال رد شد

اسکن پورت های UDP

برای اسکن پورت‌های UDP با nmap، به حقوق ریشه نیاز دارید. اگر آنها آنجا نیستند، در این مورد ابزار netcat نیز می تواند به ما کمک کند:


$ nc -vnzu 192.168.1.100 5550-5560
اتصال به پورت 5555 192.168.1.100 با موفقیت انجام شد!

ارسال بسته UDP

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

این می تواند هنگام تعامل با دستگاه های شبکه مفید باشد.

دریافت اطلاعات روی پورت UDP و خروجی داده های دریافتی

$ nc -u localhost 7777

پس از اولین پیام، خروجی متوقف خواهد شد. اگر نیاز به پذیرش چندین پیام دارید، باید در حالی که درست است استفاده کنید:


$ در حالی که درست است. nc -u localhost 7777 را انجام دهید. انجام شده

انتقال فایل. با استفاده از netcat می توانید هم فایل ها را دریافت کنید و هم آنها را به یک میزبان راه دور انتقال دهید:


nc 192.168.1.100 5555< 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact به عنوان یک وب سرور ساده.

Netcat می تواند به عنوان یک وب سرور ساده برای نمایش صفحات HTML عمل کند.


$ در حالی که درست است. nc -lp 8888 را انجام دهید< index.html; done

با استفاده از مرورگر در: http://netcat host:8888/index.html. برای استفاده از پورت استاندارد وب سرور شماره 80، باید nc را با حقوق ریشه اجرا کنید:


$ در حالی که درست است. sudo nc -lp 80 را انجام دهید< test.html; done

چت بین گره ها

در گره اول (192.168.1.100):


$nc -lp 9000

در گره دوم:


$nc 192.168.1.100 9000

پس از اجرای دستورات، تمام کاراکترهای وارد شده به پنجره ترمینال در هر گره در پنجره ترمینال گره دیگر ظاهر می شوند.

پوسته معکوس

با استفاده از netcat می توانید یک پوسته معکوس راحت سازماندهی کنید:


nc -e /bin/bash -lp 4444

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


$nc 192.168.1.100 4444

اگر ابزار خاصی ندارید، که اغلب بسیار دست و پا گیر است، نباید تسلیم شوید؛ گاهی اوقات می توان مشکل را با وسایل بداهه حل کرد.

در این مقاله به ابزار محبوب شبکه netcat و ترفندهای مفید هنگام کار با آن نگاه می کنم.


Netcat یک ابزار یونیکس است که به شما امکان می دهد اتصالات TCP و UDP را برقرار کنید، داده ها را از آنجا دریافت کنید و آن را انتقال دهید. با وجود سودمندی و سادگی آن، بسیاری نمی دانند چگونه از آن استفاده کنند و به ناحق آن را دور می زنند.


با استفاده از این ابزار، می توانید برخی از مراحل را هنگام انجام تست نفوذ انجام دهید. این می تواند زمانی مفید باشد که دستگاه مورد حمله بسته های نصب شده نداشته باشد (یا جلب توجه کند)، محدودیت هایی وجود داشته باشد (به عنوان مثال، دستگاه های IoT/Embedded) و غیره.


کارهایی که می توانید با netcat انجام دهید:

  • اسکن پورت ها؛
  • پورت های فوروارد؛
  • جمع آوری بنرهای خدماتی؛
  • گوش دادن به پورت (پیوند برای اتصال معکوس)؛
  • دانلود و آپلود فایل ها؛
  • خروجی محتوای خام HTTP.
  • یک مینی چت ایجاد کنید.

به طور کلی، با کمک netcat می توانید برخی از ابزارهای یونیکس را جایگزین کنید، بنابراین این ابزار را می توان نوعی ترکیب برای انجام کارهای خاص در نظر گرفت.

مثال های کاربردی

در بسیاری از موارد، در صورت نیاز به بررسی یک هاست خاص، از telnet یا خدمات سرویس خود برای شناسایی هاست یا بنر استفاده می کنند. چگونه netcat می تواند به ما کمک کند:

در حال بررسی برای باز بودن پورت TCP 12345

$ nc -vn 192.168.1.100 12345
nc: اتصال به 192.168.1.100 12345 (tcp) ناموفق بود: اتصال رد شد

$ nc -v 192.168.1.100 22
اتصال به پورت 192.168.1.100 22 با موفقیت انجام شد!
SSH-2.0-OpenSSH

اسکن پورت های TCP با netcat:

$ nc -vnz 192.168.1.100 20-24

با چنین اسکنی هیچ اتصالی به پورت وجود نخواهد داشت، بلکه تنها خروجی یک اتصال موفق خواهد بود:


nc: Connectx به 192.168.1.100 پورت 20 (tcp) ناموفق بود: اتصال رد شد
nc: Connectx به 192.168.1.100 پورت 21 (tcp) ناموفق بود: اتصال رد شد
0 انجمن پیدا شد
1 اتصال پیدا شد:
1: پرچم = 82
outif en0
src 192.168.1.100 پورت 50168
dst 192.168.1.100 پورت 22
اطلاعات رتبه در دسترس نیست
اطلاعات TCP aux موجود است
اتصال به پورت 22 192.168.1.100 با موفقیت انجام شد!
nc: Connectx به 192.168.1.100 پورت 23 (tcp) ناموفق بود: اتصال رد شد
nc: Connectx to 192.168.1.100 پورت 24 (tcp) ناموفق بود: اتصال رد شد

اسکن پورت های UDP

برای اسکن پورت‌های UDP با nmap، به حقوق ریشه نیاز دارید. اگر آنها آنجا نیستند، در این مورد ابزار netcat نیز می تواند به ما کمک کند:


$ nc -vnzu 192.168.1.100 5550-5560
اتصال به پورت 5555 192.168.1.100 با موفقیت انجام شد!

ارسال بسته UDP

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

این می تواند هنگام تعامل با دستگاه های شبکه مفید باشد.

دریافت اطلاعات روی پورت UDP و خروجی داده های دریافتی

$ nc -u localhost 7777

پس از اولین پیام، خروجی متوقف خواهد شد. اگر نیاز به پذیرش چندین پیام دارید، باید در حالی که درست است استفاده کنید:


$ در حالی که درست است. nc -u localhost 7777 را انجام دهید. انجام شده

انتقال فایل. با استفاده از netcat می توانید هم فایل ها را دریافت کنید و هم آنها را به یک میزبان راه دور انتقال دهید:


nc 192.168.1.100 5555< 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact به عنوان یک وب سرور ساده.

Netcat می تواند به عنوان یک وب سرور ساده برای نمایش صفحات HTML عمل کند.


$ در حالی که درست است. nc -lp 8888 را انجام دهید< index.html; done

با استفاده از مرورگر در: http://netcat host:8888/index.html. برای استفاده از پورت استاندارد وب سرور شماره 80، باید nc را با حقوق ریشه اجرا کنید:


$ در حالی که درست است. sudo nc -lp 80 را انجام دهید< test.html; done

چت بین گره ها

در گره اول (192.168.1.100):


$nc -lp 9000

در گره دوم:


$nc 192.168.1.100 9000

پس از اجرای دستورات، تمام کاراکترهای وارد شده به پنجره ترمینال در هر گره در پنجره ترمینال گره دیگر ظاهر می شوند.

پوسته معکوس

با استفاده از netcat می توانید یک پوسته معکوس راحت سازماندهی کنید:


nc -e /bin/bash -lp 4444

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


$nc 192.168.1.100 4444

اگر ابزار خاصی ندارید، که اغلب بسیار دست و پا گیر است، نباید تسلیم شوید؛ گاهی اوقات می توان مشکل را با وسایل بداهه حل کرد.