دستورات ترمینال لینوکس
نحوه استفاده از دستور netstat در لینوکس – قسمت اول

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

پورت ها ، پردازش ها و پروتکل ها

سوکت های شبکه می توانند به یکدیگر متصل شده یا منتظر یک اتصال باشند. این اتصالات از پروتکل های شبکه ای مانند پروتکل کنترل حمل و نقل (TCP)، یا پروتکل اطلاعات کاربر کاربر UDP استفاده می کنند. سوکت ها از آدرس های پروتکل اینترنت و درگاه های شبکه برای ایجاد اتصالات استفاده می کنند.

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

سوکت ها دو حالت اصلی دارند: سوکت ها به هم متصل هستند و یک ارتباط شبکه در حال انجام را تسهیل می کنند، یا منتظر یک اتصال ورودی برای اتصال به آنها هستند. حالات دیگری وجود دارد، مانند زمانی که یک سوکت در وسط راه اندازی اتصال به یک دستگاه از راه دور است، اما با قرار دادن حالت های گذرا، می توانید فکر کنید یک سوکت را به عنوان اتصال یا در حال انتظار (که اغلب به آن گوش دادن “listening socket” گفته می شود) قرار می دهد.

سوکت گوش دادن “listening socket” سرور نامیده می شود و سوکتی که درخواست اتصال با سوکت گوش دادن را دارد، کلاینت نامیده می شود. این اسم ها هیچ ارتباطی با نقش سخت افزاری یا کامپیوتری ندارند. آنها به سادگی نقش هر سوکت را در هر پایان اتصال تعریف می کنند.

دستور netstat به شما امکان می دهد دریابید که کدام سوکت وصل شده و کدام سوکت ها گوش می دهند. به این معنا که، به شما می گوید که درگاه ها در چه مرحله ای استفاده می شوند و از چه فرآیندی استفاده می کنند. این می تواند جداول مسیریابی و آماری در مورد اینترفیس های شبکه و اتصالات multicast را به شما نشان دهد.

عملکرد netstat با گذشت زمان در ابزارهای مختلف لینوکس مانند IP و ss تکرار شده است. هنوز هم باید ارزش این پدربزرگ 🙂 را از همه دستورات تجزیه و تحلیل شبکه بیشتر بدانید، زیرا در همه سیستم عامل های لینوکس و یونیکس و حتی در ویندوز و مک نیز در دسترس است.

در اینجا نحوه استفاده از آن ، با نمونه دستورات را با هم تمرین میکنیم.

لیست تمام سوکت ها

گزینه -a (all) باعث می شود netstat تمام سوکت های متصل و انتظار را نشان دهد. این دستور می تواند یک لیست طولانی تولید کند ، بنابراین ما آن را خلاصه میکنیم در less.

netstat -a | less
netstat -a | less in a terminal window

این لیست شامل سوکت های TCP (IP) ، TCP6 (IPv6) و UDP است.

Output from netstat -a | less in a terminal window

بسته بودن یا پیچ و تاب در پنجره ترمینال ، دیدن آنچه در جریان است را کمی دشوار می کند. در اینجا چند بخش از لیست آمده است:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 noreplay-geek:41288     darkbowser.canoni:https ESTABLISHED
tcp        0      0 noreplay-geek:35152     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:35142     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:35154     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:35146     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:41286     darkbowser.canoni:https ESTABLISHED
tcp        0      0 noreplay-geek:35150     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:41290     darkbowser.canoni:https ESTABLISHED
tcp        0      0 noreplay-geek:35144     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:35156     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:46184     canonical:https         ESTABLISHED
tcp        0      0 noreplay-geek:42592     canonical:https         ESTABLISHED
tcp        0      0 noreplay-geek:35148     api.snapcraft.io:https  ESTABLISHED
tcp        0      0 noreplay-geek:42590     canonical:https         ESTABLISHED
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
udp        0      0 0.0.0.0:mdns            0.0.0.0:*                          
udp        0      0 localhost:domain        0.0.0.0:*                          
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*                          
udp        0      0 0.0.0.0:45239           0.0.0.0:*                          
:
.
.
udp        0      0 noreplay-geek:58290     _gateway:domain         ESTABLISHED
udp6       0      0 [::]:52302              [::]:*                             
udp6       0      0 [::]:mdns               [::]:*                             
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     23218    /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     23223    /run/systemd/fsck.progress
unix  2      [ ]         DGRAM                    39929    /run/user/1000/systemd/notify
unix  2      [ ]         DGRAM                    35821    /run/user/121/systemd/notify
unix  2      [ ACC ]     SEQPACKET  LISTENING     23246    /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     39932    /run/user/1000/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     35824    /run/user/121/systemd/private
unix  23     [ ]         DGRAM                    23225    /run/systemd/journal/dev-log
unix  2      [ ACC ]     STREAM     LISTENING     41643    @/tmp/.ICE-unix/1882
unix  2      [ ACC ]     STREAM     LISTENING     39936    /run/user/1000/snapd-session-agent.socket
:

در بخش “اینترنت فعال” اتصالات خارجی متصل و سوکت های محلی که به درخواست های اتصال از راه دور گوش می دهند، لیست می کند. یعنی لیست اتصالات شبکه ای را که برای دستگاه های خارجی برقرار شده است (یا خواهد شد) لیست می کند.

در بخش “دامنه یونیکس” اتصالات داخلی متصل گوش داده می شود. به عبارت دیگر ، اتصالات موجود در کامپیوتر شما بین برنامه های مختلف ، فرآیندها و عناصر سیستم عامل برقرار شده است.

ستون های “اینترنت فعال” عبارتند از:

  • Proto: پروتکل مورد استفاده این سوکت (به عنوان مثال TCP یا UDP).
  • Recv-Q: صف دریافت. این بایت های دریافتی است که دریافت و بافر شده است ، منتظر روند محلی هستند که از این اتصال استفاده می کنند تا آنها را بخواند و مصرف کند.
  • Send-Q: صف ارسال. این بایت های آماده ارسال از صف ارسال را نشان می دهد.
  • Local Address: جزئیات آدرس انتهای محلی اتصال. پیش فرض برای netstat نشان دادن نام میزبان محلی برای آدرس ، و نام سرویس برای درگاه است.
  • Foreign Address: آدرس و شماره پورت انتهای راه دور اتصال.
  • State: وضعیت سوکت محلی. برای سوکت های UDP ، این معمولاً خالی است. جدول حالت را در زیر مشاهده کنید.

برای اتصالات TCP ، مقدار state می تواند یکی از موارد زیر باشد:

  • LISTEN: فقط سمت سرور. سوکت منتظر درخواست اتصال است.
  • SYN-SENT: فقط سمت مشتری. این سوکت درخواست اتصال ایجاد کرده است و منتظر است که ببیند آیا پذیرفته خواهد شد یا خیر.
  • SYN-RECEIVED: فقط سمت سرور. این سوکت پس از پذیرش درخواست اتصال منتظر تأیید اتصال است.
  • ESTABLISHED: سرور و مشتری. یک ارتباط کاری بین سرور و مشتری ایجاد شده است که امکان انتقال داده ها بین این دو را فراهم می کند.
  • FIN-WAIT-1: سرور و مشتری. این سوکت منتظر درخواست خاتمه اتصال از سوکت از راه دور یا تأیید درخواست خاتمه اتصال است که قبلاً از این سوکت ارسال شده بود.
  • FIN-WAIT-2: سرور و مشتری. این سوکت منتظر درخواست خاتمه اتصال از سوکت از راه دور است.
  • CLOSE-WAIT: سرور و مشتری. این سوکت منتظر درخواست خاتمه اتصال کاربر محلی است.
  • CLOSING: سرور و مشتری. این سوکت منتظر تأیید درخواست خاتمه اتصال از سوکت از راه دور است.
  • LAST-ACK: سرور و مشتری. این سوکت منتظر تأیید درخواست خاتمه اتصال ارسال شده به سوکت از راه دور است.
  • TIME-WAIT: سرور و مشتری. این سوکت تصدیق را به سوکت از راه دور ارسال کرد تا به او اطلاع دهد که درخواست خاتمه سوکت از راه دور را دریافت کرده است. اکنون منتظر است تا اطمینان حاصل کند که تأییدیه دریافت شده است.
  • CLOSED: اتصال وجود ندارد ، بنابراین سوکت خاتمه یافته است.

ستون “دامنه یونیکس” عبارتند از:

  • Proto: پروتکل مورد استفاده این سوکت. این “یونیکس” خواهد بود.
  • RefCnt: تعداد مرجع. تعداد فرآیندهای متصل به این سوکت متصل است.
  • Flags: این معمولاً روی ACC تنظیم شده است ، این نماینده SO_ACCEPTON است ، به این معنی که سوکت منتظر درخواست اتصال است. SO_WAITDATA ، به عنوان W نشان داده شده است ، به این معنی است که داده هایی در انتظار خواندن هستند. SO_NOSPACE ، به عنوان N نشان داده شده است ، به این معنی است که هیچ مکانی برای نوشتن داده به سوکت وجود ندارد (به عنوان مثال ، بافر ارسال کامل است).
  • Type: نوع سوکت. جدول نوع زیر را ببینید.
  • State: وضعیت سوکت. جدول حالت زیر را مشاهده کنید.
  • I-Node: سیستم فایل مربوط به این سوکت است.
  • Path: مسیر سیستم فایل به سوکت.

نوع سوکت دامنه یونیکس می تواند یکی از موارد زیر باشد:

  • DGRAM: این سوکت در حالت دیتاگرام با استفاده از پیام هایی با طول ثابت استفاده می شود. دیتاگرامها نه به عنوان قابل اطمینان ، توالی و نه کپی تضمین می شوند.
  • STREAM: این سوکت یک سوکت جریان است. این نوع متداول اتصال معمولی “سوکت” است. این پریزها به گونه ای طراحی شده اند که بسته های توالی قابل اطمینان (به ترتیب) را ارائه دهند.
  • RAW: این سوکت به عنوان سوکت خام مورد استفاده قرار می گیرد. سوکت های خام در سطح شبکه مدل OSI کار می کنند و هدرهای TCP و UDP را از سطح حمل و نقل مرجع نمی کنند.
  • RDM: این سوکت در یک انتهای یک اتصال پیام قابل اعتماد قرار دارد.
  • SEQPACKET: این سوکت به عنوان یک سوکت بسته های متوالی کار می کند ، که وسیله دیگری برای تهیه بسته قابل اعتماد ، توالی و بدون استفاده است.
  • PACKET: سوکت دسترسی رابط خام. از پریزهای بسته برای دریافت یا ارسال بسته های خام در درایور دستگاه (یعنی لایه پیوند داده) سطح مدل OSI استفاده می شود.

وضعیت سوکت دامنه یونیکس می تواند یکی از موارد زیر باشد:

  • FREE: این سوکت بدون جابجایی است.
  • LISTENING: این سوکت در حال گوش دادن به درخواست های اتصال ورودی است.
  • CONNECTING: این سوکت در حال اتصال است.
  • CONNECTED: اتصال ایجاد شده است و سوکت قادر به دریافت و انتقال داده است.
  • DISCONNECTING: اتصال در حال خاتمه است.

واووو ، این وضعیت ها خیلی شد نه! 🙂 بسیاری از گزینه های netstat نتایج را به یک روش دیگر تصحیح می کنند ، اما آنها محتوای وضعیت را زیاد تغییر نمی دهند. بیایید یک نگاهی بیندازیم 😉 .

لیست کردن سوکت ها بر اساس نوع آن

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

netstat -at | less
netstat -at | less in a terminal window

نمایشگر بسیار خلاصه شده است. تعداد کمی از سوکت هایی که ذکر شده است ، همه سوکت های TCP هستند.

Output from netstat -at | less in a terminal window

گزینه های -u (UDP) و -x (UNIX) به گونه ای به صورت مشابه رفتار می کنند و نتایج را به نوع سوکت مشخص شده در خط فرمان محدود می کنند. در اینجا گزینه -u (UDP) استفاده شده است:

netstat -au | less
netstat -au | less in a terminal window

فقط سوکت های UDP لیست شده اند.

Output from netstat -au | less in a terminal window

لیست کردن سوکت ها توسط وضعیت

برای دیدن سوکت های موجود در حالت گوش دادن یا انتظار ، از گزینه -l (گوش دادن) استفاده کنید.

netstat -l | less
netstat -l | less in a terminal window

سوکت هایی که لیست شده اند مواردی هستند که در حالت گوش کردن قرار دارند.

Output of netstat -l | less in a terminal window

این می تواند با گزینه های -t (TCP ، -u (UDP) و -x (UNIX) ترکیب شود تا بتوانید سوکت های مورد علاقه خود را در آنجا قرار دهید.

netstat -lt | less
netstat -lt | less in a terminal window

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

output from netstat -lt | less in a terminal window

آمار شبکه با پروتکل

برای دیدن آمار یک پروتکل ، از گزینه -s (statistics) استفاده کرده و گزینه های -t (TCP) ، -u (UDP) یا -x (UNIX) را وارد کنید. اگر به تنهایی از گزینه -s (statistics) استفاده می کنید ، آماری را برای همه پروتکل ها مشاهده خواهید کرد. بیایید آمار پروتکل TCP را بررسی کنیم.

netstat -st | less
netstat -st | less in a terminal window

مجموعه ای از آمار برای اتصالات TCP که خلاصه نمایش داده می شود.

Output from netstat -st | less in a terminal window

نمایش اسامی پردازش ها و PID ها

می توان شناسه پردازش (PID) را با استفاده از سوکت به همراه نام آن فرآیند ، مفید دانست. گزینه -p (برنامه) همین کار را انجام می دهد. بیایید ببینیم PID ها و نام پردازش برای فرآیندهای با استفاده از سوکت TCP که در حالت گوش دادن قرار دارد چیست. ما از sudo استفاده می کنیم تا مطمئن شویم که تمام اطلاعات موجود را دریافت می کنیم ، از جمله اطلاعاتی که معمولاً به مجوزهای ریشه ای نیاز داشته باشد.

sudo netstat -p -at
sudo netstat -p -at  in a terminal window

در اینجا خروجی قالب بندی شده را در جدول می بینیم:

root@noreplay-geek:~# sudo netstat -p -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN      534/systemd-resolve 
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN      2775/cupsd          
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      2775/cupsd 

ما یک ستون اضافی با نام “PID/program name” دریافت کرده ایم. در این ستون PID و نام فرآیند با استفاده از هر یک از سوکت ها ذکر شده است.


ادامه پست در قسمت بعد…

اشتراک گذاری: