Tìm hiểu số cổng mà một tiến trình đang nghe

Tác giả Network Engineer, T.Tư 26, 2022, 09:44:13 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Tìm hiểu số cổng mà một tiến trình đang nghe


Là người dùng Linux, đôi khi chúng ta cần biết số cổng mà một tiến trình cụ thể đang nghe. Tất cả các cổng được liên kết với một ID tiến trình hoặc dịch vụ trong hệ điều hành. Vì vậy, làm thế nào để chúng ta tìm thấy cổng này? Trong bài viết này, mình sẽ trình bày ba phương pháp khác nhau mà bạn có thể sử dụng để tìm ra cổng nào mà tiến trình đang lắng nghe.

Mình đã chạy các lệnh và thủ tục được mô tả trong bài viết này trên hệ thống Ubuntu 22.04 LTS.

Phương pháp 1: Sử dụng lệnh netstat

Netstat, tiện ích thống kê mạng, được sử dụng để hiển thị thông tin về các kết nối mạng. Điều này bao gồm thông tin về thống kê giao diện, bảng định tuyến và hơn thế nữa. Tiện ích này có sẵn trên hầu hết các hệ thống Linux, vì vậy mình sử dụng nó để tìm ra các cổng mà các tiến trình nhất định trên hệ thống đang sử dụng.

Để sử dụng lệnh netstat, bạn phải cài đặt tiện ích net-tools, nếu nó chưa được cài đặt trên hệ thống của bạn, hãy sử dụng lệnh sau:

Mã nguồn [Chọn]
$ sudo apt install net-tools

Sau đó chạy lệnh sau:

Mã nguồn [Chọn]
$ sudo netstat -ltnp

Lệnh trên cung cấp thông tin netstat dựa trên các tính năng sau:

  • l: chỉ hiển thị listening sockets
  • t: hiển thị kết nối tcp
  • n: hiển thị địa chỉ ở dạng số
  • p: hiển thị ID tiến trình / Tên chương trình

Ví dụ, trong đầu ra ở trên của lệnh netstat, chương trình Apache2 với tiến trình ID 950 đang chạy trên cổng số 80.

Bạn cũng có thể lọc số liệu thống kê cho một cổng cụ thể bằng cách kết hợp chức năng grep vào lệnh của bạn.

Ví dụ:

Mã nguồn [Chọn]
$ sudo netstat -ltnp | grep -w ':80'
Lệnh này sẽ cho bạn biết cụ thể quá trình nào đang chạy trên cổng số 80.


Phương pháp 2: Sử dụng lệnh lsof

Tiện ích lsof hoặc List of Open Files giúp liệt kê tất cả các tập tin đang mở trên hệ thống Linux của bạn. Chúng ta có thể sử dụng tiện ích này để xem tất cả các tiến trình đang mở trên một cổng cụ thể.

Để sử dụng lệnh lsof, bạn cần cài đặt tiện ích lsof nếu nó chưa được cài đặt trên hệ thống của bạn thông qua lệnh sau:

Mã nguồn [Chọn]
$ sudo apt install lsof

Hãy để mình sử dụng lsof để xem dịch vụ đang lắng nghe trên một cổng cụ thể.

Ví dụ:

Mã nguồn [Chọn]
$ sudo lsof -i :80
Lệnh này sẽ liệt kê tất cả các quá trình sử dụng cổng TCP số 80.


Phương pháp 3: Sử dụng lệnh fuser

Lệnh fuser hiển thị ID tiến trình nào đang sử dụng các tập tin, ổ cắm hoặc hệ thống tập tin được đặt tên. Chúng ta có thể sử dụng lệnh này để xem các ID tiến trình đang chạy trên một cổng TCP cụ thể.

Để sử dụng lệnh fuser, bạn cần cài đặt tiện ích psmisc nếu nó chưa được cài đặt trên hệ thống của bạn thông qua lệnh sau:

Mã nguồn [Chọn]
$ sudo apt install psmisc

Hãy để mình xem tất cả các ID tiến trình đang chạy trên cổng TCP 3306 thông qua lệnh sau:

Mã nguồn [Chọn]
$ sudo fuser 3306/tcp
Bạn có thể chỉ định bất kỳ số cổng nào trong lệnh này để xem các quá trình lắng nghe của nó.


Trong đầu ra ở trên, bạn có thể thấy rằng tiến trình ID 975 đang lắng nghe trên TCP 3306.

Để xem chương trình này ID tiến trình tương ứng với, hãy chạy lệnh sau:

Cú pháp:

Mã nguồn [Chọn]
$ ps -p [processID] -o comm=
Trong trường hợp của chúng ta:

Mã nguồn [Chọn]
$ ps -p [975] -o comm=

Kết quả đầu ra cho thấy rằng ID tiến trình 975 tương ứng với tên chương trình MySDLd. Do đó, tiến trình ID 975 của chương trình MySQLd đang lắng nghe trên cổng số 3306.

Thông qua ba phương pháp bạn đã học trong bài viết này, bạn có thể dễ dàng xem cổng TCP nào mà một tiến trình cụ thể trên Linux đang lắng nghe.