كيفية مراقبة منافذ TCP و UDP في الوقت الفعلي netstat

كيفية مراقبة منافذ TCP و UDP في الوقت الفعلي (netstat & watch ss)

كيفية مراقبة منافذ TCP و UDP في الوقت الفعلي

كيف يمكنني تحديد ما إذا كان المنفذ قيد الاستخدام في نظام Linux أو نظام مشابه لـ Unix؟ كيف يمكنني التحقق من المنافذ التي تستمع على خادم Linux؟ كيف يمكنني التحقق مما إذا كان المنفذ قيد الاستخدام على نظام التشغيل Linux باستخدام CLI؟

من المهم التحقق من المنافذ التي تستمع على واجهات شبكة الخادم. تحتاج إلى الانتباه إلى فتح المنافذ لاكتشاف الاختراق. بصرف النظر عن التطفل ، لأغراض استكشاف الأخطاء وإصلاحها ، قد يكون من الضروري التحقق مما إذا كان المنفذ قيد الاستخدام بالفعل بواسطة تطبيق مختلف على خوادمك. على سبيل المثال ، يمكنك تثبيت خادم Apache و Nginx على نفس النظام. لذلك من الضروري معرفة ما إذا كان Apache أو Nginx يستخدمان منفذ TCP رقم 80/443. 

في مجال الشبكات ، وخاصة على مستوى نظام التشغيل لينكس، يعد المنفذ بنية منطقية تحدد عملية / تطبيقًا معينًا أو نوعًا من خدمة الشبكة وكل خدمة شبكة تعمل على نظام Linux تستخدم بروتوكولًا معينًا (الأكثر شيوعًا هو TCP ( بروتوكول التحكم في الإرسال ) و UDP ( بروتوكول مخطط بيانات المستخدم )) ورقم منفذ للتواصل مع العمليات أو الخدمات الأخرى.

netstat (نت ستات وتعني إحصائيات الشبكة) هي أداة سطر أوامر تعرض اتصالات الشبكة (الواردة والصادرة على حد سواء) وجداول التوجيه وعدد من إحصائيات واجهة الشبكة. 

وهي متوفرة على أنظمة تشغيل Linux و Unix-like و Windows. يعد netstat أداة قوية ويمكن أن يكون أداة مفيدة لاستكشاف المشكلات المتعلقة بالشبكة وإصلاحها والتحقق من إحصائيات الاتصال. 

في هذه المقالة القصيرة ، سنوضح لك كيفية سرد ومراقبة تشغيل منافذ TCP و UDP في الوقت الفعلي مع ملخص مقبس على نظام Linux.

لإدراج جميع المنافذ المفتوحة Open Ports على نظام لينكس ، يمكنك استخدام الأمر netstat أو SS على النحو التالي.

إذا قمت بكتابة netstat -help ، فستحصل على إرشادات الاستخدام التالية.

أوامر Netstat

[root@wikikali~]# netstat -help
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route              display routing table
        -I, --interfaces=<Iface> display interface table for <Iface>
        -i, --interfaces         display interface table
        -g, --groups             display multicast group memberships
        -s, --statistics         display networking statistics (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -W, --wide               don't truncate IP addresses
        -n, --numeric            don't resolve names
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           resolve hardware names
        -e, --extend             display other/more information
        -p, --programs           display PID/Program name for sockets
        -o, --timers             display timers
        -c, --continuous         continuous listing

        -l, --listening          display listening server sockets
        -a, --all                display all sockets (default: connected)
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB
        -Z, --context            display SELinux security context for sockets

  <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 
[root@wikikali~]#

باستخدام اداة netstat

sudo netstat -tulpn
يمكن كتابة الامر نفسه لكن بشكل اخر 
sudo netstat -t -u -l -p -n
او
sudo netstat --tcp --udp --listening --program --numeric

باستخدام اداة SS

sudo ss -tulpn
شاهد Open Ports في الوقت الفعلي في Linux
سرد المنافذ المفتوحة في لينكس
من إخراج الأمر أعلاه، يظهر عمود ما إذا كان المنفذ في حالة الاستماع ( LISTEN ) أم لا.

شرح بارامترات الأمر أعلاه :

-t - يتيح سرد منافذ TCP.
-u - يتيح سرد منافذ UDP.
-l - يطبع مآخذ الاستماع فقط. listening sockets.
-n - يظهر رقم المنفذ.
-p - إظهار العملية واسم البرنامج.
الرموز مستوحات من الوظيفة
t: tcp
u: udp
l: listening ports
p: process
n: network

راقب البورتات المفتوحة TCP و UDP في الوقت الحقيقي

لمشاهدة منافذ TCP و UDP في الوقت الفعلي ، يمكنك تشغيل أداة netstat أو ss باستخدام الأداة المساعدة watch كما هو موضح.

من المهم أيضًا الإشارة إلى أن الأمر netstat قد تم إهماله وبدلاً من ذلك أخذ الأمر ss مكانه في عرض إحصائيات أكثر تفصيلاً للشبكة.

باستخدام اداة netstat و watch 

sudo watch netstat -tulpn

أو باستخدام اداة SS و watch 

sudo watch ss -tulpn
راقب البورتات المفتوحة TCP و UDP في الوقت الحقيقي netstat
لاغلاق العملية اضغط على Ctrl+C.

يمكن أيضا استخدام امر التصفية Grep كفلتر لاظهار نتائج وتفاصيل اكثردقة 

اتصال مؤسس Established Connection

إذا كنت تبحث عن جميع الاتصالات التي تم إنشاؤها من الخادم.
[root@wikikali~]# netstat -natu | grep 'ESTABLISHED'
tcp        0     21 68.183.37.102:22        222.186.31.135:21714    ESTABLISHED
tcp        0     36 68.183.37.102:22        52.148.155.182:49859    ESTABLISHED
tcp        0      0 68.183.37.102:22        61.177.142.158:55481    ESTABLISHED

إذا كان لديك العديد من الاتصالات الجارية وكنت مهتمًا بالبحث عن أحد عناوين IP ، فيمكنك استخدام grep آخر.
[root@wikikali~]# netstat -natu | grep 'ESTABLISHED' | grep 61.177.142.158
tcp        0   1280 68.183.37.102:22        61.177.142.158:33932    ESTABLISHED

انتظار الاتصال Listening Connection

لنفترض أنك بدأت بعض الخدمات ، ومن المفترض أن تستمع إلى عنوان IP معين: المنفذ ، سيكون هذا مفيدًا للتحقق.
[root@wikikali~]# netstat -an | grep 'LISTEN'
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
أو يمكنك استخدام البراماتر -l (حرف L صغير) لإظهار كل مآخذ الاستماع.
[root@wikikali~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
tcp6       0      0 [::]:webcache           [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
udp        0      0 0.0.0.0:805             0.0.0.0:*                          
udp        0      0 0.0.0.0:sunrpc          0.0.0.0:*                          
udp        0      0 localhost:323           0.0.0.0:*                          
udp6       0      0 [::]:805                [::]:*                             
udp6       0      0 [::]:sunrpc             [::]:*                             
udp6       0      0 ip6-localhost:323       [::]:*                             
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     15108    /run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     8202     /run/systemd/journal/stdout
unix  2      [ ACC ]     SEQPACKET  LISTENING     12813    /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     17542    public/pickup
unix  2      [ ACC ]     STREAM     LISTENING     15165    /var/run/rpcbind.sock
unix  2      [ ACC ]     STREAM     LISTENING     17546    public/cleanup
unix  2      [ ACC ]     STREAM     LISTENING     15605    /var/lib/gssproxy/default.sock
unix  2      [ ACC ]     STREAM     LISTENING     12706    /run/systemd/private
unix  2      [ ACC ]     STREAM     LISTENING     17549    public/qmgr
unix  2      [ ACC ]     STREAM     LISTENING     17571    public/flush
unix  2      [ ACC ]     STREAM     LISTENING     17553    private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     17586    public/showq
unix  2      [ ACC ]     STREAM     LISTENING     17556    private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     17559    private/bounce
unix  2      [ ACC ]     STREAM     LISTENING     17562    private/defer
unix  2      [ ACC ]     STREAM     LISTENING     17565    private/trace
unix  2      [ ACC ]     STREAM     LISTENING     17568    private/verify
unix  2      [ ACC ]     STREAM     LISTENING     17574    private/proxymap
unix  2      [ ACC ]     STREAM     LISTENING     17577    private/proxywrite
unix  2      [ ACC ]     STREAM     LISTENING     17580    private/smtp
unix  2      [ ACC ]     STREAM     LISTENING     17583    private/relay
unix  2      [ ACC ]     STREAM     LISTENING     17589    private/error
unix  2      [ ACC ]     STREAM     LISTENING     17592    private/retry
unix  2      [ ACC ]     STREAM     LISTENING     17595    private/discard
unix  2      [ ACC ]     STREAM     LISTENING     17598    private/local
unix  2      [ ACC ]     STREAM     LISTENING     17601    private/virtual
unix  2      [ ACC ]     STREAM     LISTENING     17604    private/lmtp
unix  2      [ ACC ]     STREAM     LISTENING     17607    private/anvil
unix  2      [ ACC ]     STREAM     LISTENING     17610    private/scache
unix  2      [ ACC ]     STREAM     LISTENING     15606    /run/gssproxy.sock
استفد من grep لتصفية النتائج.

رقم المنفذ المستخدم بواسطة PID

أنت تعلم أن التطبيق الخاص بك بدأ وله مقبض PID (معرف العملية) ولكنك غير متأكد من رقم المنفذ الذي يستخدمه. 
المثال أدناه هو لـ PID 3937
[root@wikikali~]# netstat -anlp | grep 3937
tcp6       0      0 :::80                   :::*                    LISTEN      3937/httpd          
unix  3      [ ]         STREAM     CONNECTED     2442387  3937/httpd           
كما ترى ، يتم استخدام المنفذ 80 لـ PID 3937.

كافة إحصائيات البروتوكولات

هل تواجه حالات انقطاع متكررة بسبب تجاهل الحزمة؟ -s ستظهر لك الوسيطة الإحصائيات العامة حيث يمكنك الانتباه إلى حزم الرسائل المهملة.
[root@wikikali ~]# netstat -s
Ip:
    731422 total packets received
    0 forwarded
    0 incoming packets discarded
    731399 incoming packets delivered
    787732 requests sent out
    16 dropped because of missing route
Icmp:
    5277 ICMP messages received
    120 input ICMP message failed.
    InCsumErrors: 6
    ICMP input histogram:
        destination unreachable: 193
        timeout in transit: 16
        echo requests: 5060
        echo replies: 2
    9355 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 4295
        echo replies: 5060
IcmpMsg:
        InType0: 2
        InType3: 193
        InType8: 5060
        InType11: 16
        OutType0: 5060
        OutType3: 4295
Tcp:
    42 active connections openings
    35226 passive connection openings
    1693 failed connection attempts
    645 connection resets received
    2 connections established
    646705 segments received
    648037 segments send out
    99463 segments retransmited
    27377 bad segments received.
    150893 resets sent
    InCsumErrors: 27377
Udp:
    74547 packets received
    4814 packets to unknown port received.
    56 packet receive errors
    74584 packets sent
    0 receive buffer errors
    0 send buffer errors
    InCsumErrors: 56
UdpLite:
TcpExt:
    177 invalid SYN cookies received
    1693 resets received for embryonic SYN_RECV sockets
    316 TCP sockets finished time wait in fast timer
    3 packets rejects in established connections because of timestamp
    70248 delayed acks sent
    6 delayed acks further delayed because of locked socket
    Quick ack mode was activated 3082 times
    17 SYNs to LISTEN sockets dropped
    28179 packets directly queued to recvmsg prequeue.
    9802 bytes directly received in process context from prequeue
    72106 packet headers predicted
    94182 acknowledgments not containing data payload received
    40094 predicted acknowledgments
    332 times recovered from packet loss by selective acknowledgements
    8 congestion windows recovered without slow start by DSACK
    1173 congestion windows recovered without slow start after partial ack
    1029 timeouts after SACK recovery
    8 timeouts in loss state
    329 fast retransmits
    3 forward retransmits
    32 retransmits in slow start
    44785 other TCP timeouts
    TCPLossProbes: 9763
    TCPLossProbeRecovery: 1732
    54 SACK retransmits failed
    3144 DSACKs sent for old packets
    4 DSACKs sent for out of order packets
    695 DSACKs received
    1 DSACKs for out of order packets received
    44 connections reset due to unexpected data
    76 connections reset due to early user close
    6079 connections aborted due to timeout
    TCPDSACKIgnoredNoUndo: 448
    TCPSpuriousRTOs: 5
    TCPSackShiftFallback: 465
    IPReversePathFilter: 11
    TCPRcvCoalesce: 32369
    TCPOFOQueue: 4313
    TCPOFOMerge: 4
    TCPChallengeACK: 2
    TCPSynRetrans: 43670
    TCPOrigDataSent: 208010
    TCPACKSkippedSeq: 12
IpExt:
    InNoRoutes: 12
    InOctets: 133789295
    OutOctets: 151093769
    InNoECTPkts: 731338
    InECT1Pkts: 3
    InECT0Pkts: 1568
    InCEPkts: 108

معلومات توجيه Kernel

هل تواجه مشكلة في التوجيه؟ أو الاتصال لا يعمل كما هو متوقع بسبب اتصال ينتقل عبر مسار مختلف؟
تحقق بسرعة من جدول التوجيه routing table.
[root@wikikali ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
10.16.0.0       0.0.0.0         255.255.0.0     U         0 0          0 eth0
68.183.32.0     0.0.0.0         255.255.240.0   U         0 0          0 eth0
link-local      0.0.0.0         255.255.0.0     U         0 0          0 eth0
استخدام PID بواسطة رقم المنفذ
سهل جدا لاستكشاف مشكلة تعارض المنفذ. لنفترض أنك تحاول بدء تشغيل خادم Apache أو Nginx ، والذي يستمع إلى المنفذ 80 ولكن لا يمكنه ذلك لأن بعض العمليات الأخرى تستخدم المنفذ 80 بالفعل.
[root@wikikali ~]# netstat -anlp | grep 80 | grep LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN      3937/httpd          
ويمكنك أن ترى أن PID 3937 يستخدم هذا المنفذ.
إذا كنت تستخدم AIX ، إذن
netstat -Aan | grep $portnumber
سيعرض هذا عنوان كتلة التحكم في البروتوكول بالنظام الست عشري hexadecimal
بمجرد الحصول على hexadecimal ، يمكنك تنفيذ ما يلي للحصول على العملية التي تحتفظ برقم المنفذ.
rmsock $address_of_pcb tcpcb

قائمة واجهات الشبكة Network Interfaces

هل لديك واجهات إيثرنت متعددة؟ أو لست متأكدًا وتريد معرفة ذلك؟
[root@wikikali ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0             1500   793026      0      0 0        849443      0      0      0 BMRU
lo              65536        6      0      0 0             6      0      0      0 LRU

الانصات المستمر Continuous Listening

خيار ممتاز عند استكشاف الأخطاء وإصلاحها او تعطل الخدمات ذات الصلة. لنفترض أن أحد التطبيقات يتعطل بشكل عشوائي كل بضع دقائق. لكن ، لست متأكدا متى بالضبط. يمكنك استخدام البارامتر -c التي ستظهر النتائج باستمرار.

[root@wikikali ~]# netstat -anlpcgrep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      11766/httpd         
tcp6       0      0 :::8080                 :::*                    LISTEN      11766/httpd         
tcp6       0      0 :::8080                 :::*                    LISTEN      11766/httpd         
tcp6       0      0 :::8080                 :::*                    LISTEN      11766/httpd
عندما يتوقف عن التحديث ، فأعلم أنه قد تعطل.

يعد netstat أحد الأوامر المستخدمة على نطاق واسع بواسطة مسؤول النظام وآمل أن تعطيك الأمثلة المذكورة أعلاه فكرة عما يمكنك فعله به. 

إذا كنت تتطلع إلى معرفة المزيد عن أوامر Linux ، فراجع هذه المقالة.