آموزش چک کردن پورت های فعال در لینوکس
هنگام عیب یابی اتصال به شبکه یا موارد خاص برنامه ، اولین مواردی که باید بررسی کنید این است که در واقع چه پورت هایی در سیستم شما استفاده می شوند و کدام برنامه از یک پورت خاص استفاده می کند.
در این مقاله چگونگی پیدا کردن پورت های مورد استفاده در هر نرم افزار با استفاده از دستورات netstat
، ss
و lsof
را آموزش می دهیم. این دستورالعمل ها برای همه سیستم عامل های مبتنی بر لینوکس و یونیکس مانند macOS قابل اجرا است.
فراخوانی پورت چیست؟
پورت شبکه و تعداد آن ، آدرس IP همراه و نوع پروتکل ارتباطی مانند TCP یا UDP مشخص می شود.
فراخوانی پورت یک درگاه شبکه است که یک برنامه یا فرآیند در آن فراخوانی می شود و به عنوان یک نقطه پایانی ارتباطات عمل می کند.
هر فراخوانی پورت با استفاده از دیوار آتش می تواند باز یا بسته (فیلتر شده) باشد. به طور کلی ، یک درگاه باز یک درگاه شبکه است که بسته های ورودی را از مکان های از راه دور می پذیرد.
شما نمی توانید دو سرویس در گوش دادن به یک درگاه در همان آدرس IP داشته باشید.
به عنوان مثال ، اگر سرور وب Apache را اجرا می کنید که از درگاه های 80
و 443
استفاده میکند و بعد از آن سعی می کنید Nginx را نصب کنید ، بعداز نصب فعال نمیشود زیرا پورت های HTTP و HTTPS در حال استفاده هستند.
چک کردن پورت های فراخوانی شده با netstat
netstat
ابزاری برای خط فرمان است که می تواند اطلاعات مربوط به اتصالات شبکه را ارائه دهد.
برای لیست کردن کلیه پورت های TCP یا UDP که در آن فراخوانی می شود ، از جمله خدمات با استفاده از پورت ها و وضعیت سوکت ، از دستور زیر استفاده می کنید:
sudo netstat -tunlp
گزینه های استفاده شده در این دستور به معنی زیر است:
-
-t
– نمایش پورت های TCP. -
-u
– نمایش پورت های UDP. -
-n
– نمایش آدرسهای عددی به جای حل کردن میزبان ها. -
-l
– فقط پورت های فراخوانی شده را نمایش دهید. -
-p
– PID و نام فرآیند شنونده را نشان دهید. این اطلاعات فقط در صورت اجرای دستور به عنوان کاربر root یا sudo نشان داده می شود.
خروجی چیزی شبیه به این خواهد بود:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 929/master
tcp6 0 0 :::3306 :::* LISTEN 534/mysqld
tcp6 0 0 :::80 :::* LISTEN 515/apache2
tcp6 0 0 :::22 :::* LISTEN 445/sshd
tcp6 0 0 :::25 :::* LISTEN 929/master
tcp6 0 0 :::33060 :::* LISTEN 534/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 966/dhclient
ستون های مهم در پرونده ما عبارتند از:
-
Proto
– پروتکل مورد استفاده توسط سوکت. -
Local Address
–Local Address
آدرس IP و شماره پورت که فرآیند آن را فراخوانی میکند. -
PID/Program name
– PID و نام فرآیند.
اگر می خواهید نتایج را فیلتر کنید از دستور grep استفاده کنید . به عنوان مثال ، برای یافتن آنچه در پورت TCP 22 فراخوانی میشود:
sudo netstat -tnlp | grep :22
خروجی نشان می دهد که پورت 22 توسط سرور SSH استفاده شده است:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0 :::22 :::* LISTEN 445/sshd
اگر خروجی خالی باشد به این معنی است که هیچ چیزی پورت را استفاده نمیکند.
همچنین می توانید لیست را بر اساس معیارها ، به عنوان مثال ، PID ، پروتکل ، حالت و غیره فیلتر کنید.
netstat
منسوخ شده است و با ss
و ip
جایگزین شده است ، اما هنوز هم یکی از پرکاربردترین دستورات برای بررسی اتصالات شبکه است.
چک کردن پورت های فراخوانی شده با ss
ss
netstat
جدید است. فاقد برخی از ویژگی های netstat
است ، اما حالات TCP بیشتری را در معرض دید شما قرار می دهد و کمی سریع تر است. گزینه های فرمان اکثراً یکسان هستند بنابراین انتقال از netstat
به ss
دشوار نیست.
برای تهیه لیستی از تمام پورت های فراخوانی شده با ss
:
sudo ss -tunlp
خروجی تقریباً مشابه بازده گزارش شده توسط netstat
:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
چک کردن پورت های فراخوانی شده با lsof
lsof
یک ابزار قدرتمند در خط فرمان است که اطلاعات مربوط به پرونده هایی را که توسط فرآیندها باز شده اند فراهم می کند.
در لینوکس ، همه چیز یک پرونده است. شما می توانید به عنوان پرونده ای که برای شبکه می نویسد ، به یک سوکت فکر کنید.
برای به دست آوردن لیستی از تمام درگاه های TCP فراخوانی شده با نوع lsof
از دستور زیر استفاده کنید:
sudo lsof -nP -iTCP -sTCP:LISTEN
گزینه های استفاده شده به شرح زیر است:
-
-n
– شماره پورت ها را به نام پورت تبدیل نکنید. -
-p
– نامهای میزبان را برطرف نکنید ، آدرسهای عددی را نشان دهید. -
-iTCP -sTCP:LISTEN
– فقط پرونده های شبکه را با لیست TCP فراخوانی کنید.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
اکثر نامهای ستونهای خروجی کاملاً توضیحی هستند:
-
COMMAND
،PID
،USER
– نام ، PID و کاربری که برنامه مربوط به پورت را اجرا می کند. -
NAME
– شماره پورت.
برای پیدا کردن این که چه فرایندی از یک پورت خاص استفاده میکند ، به عنوان مثال از پورت 3306
استفاده می کند:
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
خروجی نشان می دهد که پورت 3306
توسط سرور MySQL استفاده می شود:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
برای اطلاعات بیشتر به صفحه lsof man مراجعه کرده و درباره سایر گزینه های قدرتمند این ابزار مطالعه کنید.
نتیجه
ما چندین دستور به شما نشان داده ایم كه می توانید از آنها استفاده كنید تا بررسی كنید كه چه پورت هایی در سیستم شما استفاده می شود و همچنین نحوه پیدا کردن فرایند هایی که از یک پورت خاص استفاده می کنند را به شما آموزش دادیم.
با ثبت نظرات و سوالات خود به ما انرژی دهید.
اولین نفری باشید که از آموزشها و تخفیفهای ویژه با خبر میشوید 😉
با عضویت در خبرنامه از 80 درصد تخفیف بهره مند شوید
اولین نفر باشید که نظر ارسال میکنید