نحوه استفاده از Netcat برای ایجاد و تست اتصالات TCP و UDP در یک VPS
مقدمه
لینوکس به دلیل داشتن تعداد زیادی از کاربردهای دستوری مفید در اکثر بخش ها، مشهور است. کاربران ماهر سیستم می توانند بخش اعظم کار خود را با استفاده از ابزارهای داخلی بدون نیاز به نصب نرم افزار اضافی انجام دهند.
در این راهنما ، ما در مورد چگونگی استفاده از ابزار netcat بحث خواهیم کرد. این دستور چند منظوره که اغلب به عنوان یک چاقوی نظامی سوئیسی در بین ابزارهای شبکه نامیده می شود ، می تواند در نظارت ، آزمایش و ارسال اطلاعات از طریق اتصالات شبکه به شما کمک کند.
ما در حال بررسی این موضوع در Ubuntu 12.04 VPS هستیم ، اما netcat تقریباً باید در هر توزیع مدرن لینوکس موجود باشد. Ubuntu با متغیر BSD در netcat ارسال می شود و این همان چیزی است که ما در این راهنما استفاده خواهیم کرد. سایر نسخه ها ممکن است متفاوت عمل کنند یا امکانات دیگری را ارائه دهند.
ترکیب عمومی
به طور پیش فرض ، netcat با ایجاد اتصال TCP به هاستئ از راه دور کار می کند.
ابتدایی ترین روش:
netcat [options] host port
با این کار می توانید TCP را در هاست تعریف شده روی شماره پورت مشخص آغاز کنید. این در واقع عملکردهایی مشابه دستور قدیمی telnet لینوکس دارد. به خاطر داشته باشید که اتصال شما کاملاً غیرقابل رمزگذاری است.
اگر می خواهید به جای شروع اتصال TCP ، یک بسته UDP ارسال کنید ، می توانید از گزینه -u استفاده کنید:
netcat -u host port
شما می توانید با قرار دادن خط فاصله بین اول و آخر، طیف وسیعی از پورت ها را مشخص کنید:
netcat host startport-endport
این به طور کلی با برخی پرچم های اضافی استفاده می شود.
در اکثر سیستم ها ، ما می توانیم از netcat یا nc به صورت یکسان استفاده کنیم. آنها نامهای مستعار برای همین دستور هستند.
نحوه استفاده از Netcat برای اسکن پورت
یکی از رایج ترین کاربردهای netcat به عنوان اسکنر پورت میباشد.
اگرچه احتمالاً 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) انجام نشد: اتصال قطع
اتصال به domain.com پورت 22 [tcp / ssh] موفق شد!
همانطور که مشاهده می کنید ، این کار اطلاعات زیادی را در اختیار شما قرار می دهد و برای هر پورت به شما می گوید که آیا یک اسکن موفقیت آمیز بوده یا خیر.
اگر در واقع از یک نام دامنه استفاده می کنید ، این شکلی است که باید استفاده کنید.
با این وجود ، اگر آدرس IP موردنیاز خود را بدانید ، اسکن شما بسیار سریعتر انجام خواهد شد. سپس می توانید از پرچم -n استفاده کنید تا مشخص کنید که نیازی به resolve آدرس IP با استفاده از DNS نمی باشد:
netcat -z -n -v 198.51.100.0 1-1000
پیام های برگشت یافته در واقع به خطای استاندارد ارسال می شوند (برای اطلاعات بیشتر به مقاله تغییر مسیر I / O مراجعه کنید). ما می توانیم پیام های خطای استاندارد را ارسال کنیم که به ما امکان می دهد نتایج را راحت تر فیلتر کنیم.
ما خطای استاندارد را با استفاده از syntax 2> & 1 bash به خروجی استاندارد هدایت می کنیم. سپس نتایج را با grep فیلتر خواهیم کرد:
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded
خروجی
Connection to 198.51.100.0 22 port [tcp/*] succeeded!
در اینجا ، ما می توانیم ببینیم که تنها پورت باز شده در محدوده 1 تا 1000 روی رایانه از راه دور ، پورت 22 ، یعنی پورت قدیمی SSH است.
چگونه از طریق Netcat ارتباط برقرار کنیم
Netcat محدود به ارسال بسته های TCP و UDP نمی شود. همچنین می تواند به دنبال اتصالات و بسته ها در یک پورت باشد. این امر به ما فرصت می دهد تا دو نمونه از netcat را در یک ارتباط مشتری-سرور مجازی متصل کنیم.
اینکه کدام کامپیوتر سرور مجازی و کدام مشتری است، فقط یک وجه متمایز در تنظیمات اولیه میباشد. پس از برقراری اتصال ، ارتباط دقیقاً در هر دو جهت یکسان است.
در یک دستگاه ، می توانید به netcat بگویید که به یک پورت خاص برای اتصالات گوش دهد. ما می توانیم با تهیه پارامتر -l و انتخاب پورت این کار را انجام دهیم:
netcat -l 4444
با این کار به netcat میگویید که به اتصالات TCP در پورت 4444 گوش دهد. به عنوان یک کاربر معمولی (غیر root) ، شما نمی توانید به خاطر مسئله امنیتی ، هیچ پورت زیر 1000 را باز کنید.
در سرور مجازی دوم ، می توانیم به اولین دستگاه روی شماره پورتی که انتخاب می کنیم متصل شویم. ما این کار را به همان روشی که قبلاً اتصال را برقرار کرده ایم انجام می دهیم:
netcat domain.com 4444
انگار هیچ اتفاقی نیفتاده است. با این حال ، اکنون می توانید پیام های خود را از هر طرف اتصال ارسال کنید و در هر دو طرف دیده می شوند.
پیامی را تایپ کنید و ENTER را فشار دهید. در هر دو صفحه محلی و راه دور ظاهر می شود. این نیز در جهت مخالف کار می کند.
پس از اتمام ارسال پیام ، می توانید CTRL-D را فشار دهید تا اتصال TCP بسته شود.
نحوه ارسال فایل ها از طریق Netcat
با استفاده از مثال قبلی ، می توانیم کارهای مفیدتری را انجام دهیم.
از آنجا که ما در حال برقراری یک اتصال معمولی TCP هستیم ، می توانیم تقریباً هر نوع اطلاعات را از طریق آن ارتباط منتقل کنیم. این فقط به پیام های چت که توسط کاربر تایپ می شوند محدود نمی شود. ما می توانیم از این علم برای تبدیل netcat به یک برنامه انتقال فایل استفاده کنیم.
این بار هم برای گوش دادن به اتصالات ، باید یک انتهای اتصال را انتخاب کنیم. اما، به جای چاپ اطلاعات بر روی صفحه نمایش ، همانطور که در مثال آخر انجام دادیم ، تمام اطلاعات را مستقیماً در یک فایل قرار خواهیم داد:
netcat -l 4444 > received_file
در رایانه دوم ، با تایپ کردن echo “Hello, this is a file” > original_file یک فایل متنی ساده ایجاد کنید
اکنون می توانیم از این فایل به عنوان ورودی برای اتصال netcat در رایانه مورد شنود استفاده کنیم. فایل دقیقاً مثل اینکه ما آن را به صورت تعاملی تایپ کرده ایم ، منتقل می شود:
netcat domain.com 4444 < original_file
در رایانه ای که منتظر اتصال است ، می توانیم ببینیم که اکنون یک فایل جدید داریم با نام “received_file” با محتویات فایلی که در رایانه دیگر تایپ کرده ایم:
cat received_file
خروجی
Hello, this is a file
همانطور که مشاهده می کنید ، با اتصال، می توانیم به راحتی از این اتصال برای انتقال انواع فایل ها استفاده کنیم.
به عنوان مثال ، می توانیم با ایجاد یک تاربال بدون نام کل محتوای دایرکتوری را منتقل کنیم ، آن را به سیستم از راه دور انتقال داده و در دایرکتوری راه دور باز کنیم.
در پایان دریافت ، می توانیم فایلی را انتظار داشته باشیم که باید با تایپ متن زیر آنزیپ و اکسترکت شود:
netcat -l 4444 | tar xzvf –
خط پایان (-) به این معنی است که تار در ورودی استاندارد کار می کند ، که هنگام ایجاد اتصال از netcat در سراسر شبکه منتقل می شود.
در سمتی که میخواهیم محتوی دایرکتوری را انتقال دهیم ، می توانیم آنها را درون یک تاربال جمع کرده و سپس آنها را از طریق netcat به رایانه راه دور ارسال کنیم:
tar -czf – * | netcat domain.com 4444
این بار ، dash در دستور tar به معنی زیپ کردن محتویات فهرست فعلی (همانطور که توسط * wildcard مشخص شده است) می باشد ، و نتیجه را به خروجی استاندارد می نویسد.
سپس این مستقیماً به اتصال TCP نوشته می شود ، که در انتهای دیگر دریافت می شود و در فهرست فعلی رایانه از راه دور فشرده می شود.
این فقط یک نمونه از انتقال داده های پیچیده تر از یک کامپیوتر به کامپیوتر دیگر است. ایده مشترک دیگر استفاده از دستور dd برای تصویربرداری از دیسک از یک طرف و انتقال آن به کامپیوتر از راه دور است. ما این مطلب را در اینجا پوشش نمی دهیم.
نحوه استفاده از Netcat به عنوان یک وب سرور ساده
ما به منظور برقراری ارتباط و انتقال فایل ها ، netcat را برای گوش دادن به اتصالات پیکربندی کرده ایم. ما می توانیم از همین مفهوم برای عملکرد netcat به عنوان یک سرور وب بسیار ساده استفاده کنیم. این می تواند برای تست صفحاتی که ایجاد می کنید مفید باشد.
ابتدا ، بیایید یک فایل HTML ساده را در یک سرور مجازی بسازیم:
nano index.html
در اینجا HTML ساده ای وجود دارد که می توانید در فایل خود استفاده کنید:
index.html
<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Level 1 header</h1>
<h2>Subheading</h2>
<p>Normal text here</p>
</body>
</html>
ذخیره کنید و فایل را ببندید.
بدون امتیازات کاربر اصلی ، شما نمی توانید این فایل را در پورت پیش فرض وب ، پورت 80 ارائه دهید. ما می توانیم پورت 8888 را به عنوان یک کاربر معمولی انتخاب کنیم.
اگر فقط می خواهید یک بار به این صفحه سرویس دهید تا نحوه ارائه آن را بررسی کنید ، می توانید دستور زیر را اجرا کنید:
printf ‘HTTP/1.1 200 OK\n\n%s’ “$(cat index.html)” | netcat -l 8888
اکنون در مرورگر خود با مراجعه به آدرس زیر می توانید به محتوا دسترسی پیدا کنید:
http: // server_IP: 8888
این آدرس صفحه را باز می کند ، و سپس اتصال netcat بسته می شود. اگر سعی کنید صفحه را ریفرش کنید ، از دست میرود.
می توانیم با رپ کردن آخرین دستور در یک حلقه بی نهایت مانند زیر، کاری کنیم ne0tcat صفحه را به طور نامحدود ارائه دهد:
while true; do printf ‘HTTP/1.1 200 OK\n\n%s’ “$(cat index.html)” | netcat -l 8888; done
این کار باعث میشود بعد از بسته شدن اولین اتصال ، همچنان به دریافت اتصالات ادامه دهید.
با تایپ کردن CTRL-C روی سرور می توانیم حلقه را متوقف کنیم.
این کار به شما امکان می دهد ببینید که چگونه یک صفحه در مرورگر ارائه می شود ، اما عملکرد بیشتری را ارائه نمی دهد. شما هرگز نباید از این امکان برای سرویس دادن به وب سایتهای واقعی استفاده کنید. هیچ امنیتی وجود ندارد و موارد ساده مانند پیوندها حتی به درستی کار نمی کنند.
نتیجه
اکنون باید فهمیده باشید که Netcat برای چه مواردی قابل استفاده است. درواقع یک ابزار همه کاره است که می تواند برای تشخیص مشکلات مفید باشد و تأیید کند که عملکرد سطح پایه به طور صحیح با اتصالات TCP / UDP کار می کند یا خیر.
با استفاده از netcat ، شما می توانید برای تعامل سریع بین کامپیوترهای مختلف ارتباط برقرار کنید. Netcat با در نظر گرفتن پیچیدگی در ایجاد اتصالات ، سعی در ایجاد تعامل شبکه بین رایانه ها دارد.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد
نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04
نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7
بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04
نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04
نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04
چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظیم كرد (شروع سریع)
چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی خود استفاده کرد
نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04
نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero
نحوه نصب و استفاده از PostgreSQL در CentOS 7
چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد
نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10
چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد
نحوه نصب Apache Kafka در Debian 10
نحوه نصب وردپرس با OpenLiteSpeed در اوبونتو 18.04
چگونه پیکربندی SSH Daemon خود را بر روی یک VPS لینوکس تنظیم کنید
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/