Port không phải mang ý nghĩa là một cổng vào ra mà là một số hiệu ID cho một application nào đó, Đơn giản là nếu cùng truy cập vào một server với các ứng dụng khác nhau như Email, File tranfer,… thì tất cả các dữ liệu bạn gửi đều được đóng gói vào packet và chuyển đến cho server, nếu không có các port thì server không thể hiểu các packet đó thuộc ứng dụng nào để có thể xử lý
do đó trong mỗi packet đều phải có cả IP và port tạo thành các socket.

Trong bài viết này, chúng ta sẽ đi tìm các cách khác nhau để tìm ra process/service đang lắng nghe trên một port  trong linux..

I. Sử dụng netstat command

Netstat (Network statistics ) command thường được sử dụng để hiển thị thông tin liên quan tới các kết nối mạng, bảng định tuyến…  Nó có sẵn trên tất cả các hệ thống unix như linux, hay cả như windows. Trong trường hợp bạn không cài đặt nó theo mặc định, bạn có thể cài đặt bằng câu lệnh sau:

$ sudo yum install net-tools	#RHEL/CentOS 
$ sudo apt install net-tools	#Debian/Ubuntu
$ sudo dnf install net-tools	#Fedora 22+

Sau khi cài đặt, bạn có thể sử dụng lệnh này với `Grep command` để tìm ra tiến trình nào đăng lắng nghe ở một port cụ thể trên linux như sau:

$ netstat -ltnp | grep -w 80 

Giải thích các tiền tố đi kèm lệnh phía trên:

l Chỉ hiện thỉ các socket đang lắng nghe.
t Hiển thị các kết nối TCP.
n Hiển thị số địa chỉ.
p Kích hoạt hiển thị ID tiến trình và tên tiến trình.
grep -w Hiển thị khớp chính xác với từ khóa

II. Sử dụng lsof Command

lsof command (LiSt Open Files) được sử dụng để thống kê toàn bộ  các files được mở trong hệ thống linux.  Có thể cài đặt bằng lệnh phía dưới:

$ sudo yum install lsof	        #RHEL/CentOS 
$ sudo apt install lsof		#Debian/Ubuntu
$ sudo dnf install lsof		#Fedora 22+

Để tìm ra  tiến trình / dịch vụ  lắng nghe trên một port cụ thể , sử dụng lệnh sau:

$ lsof -i :80

III. Sử dụng fuser Command

Fuser command hiển thị các PIDS thuộc tiến trình sử dụng tập tin chỉ định hay tập tin hệ thống trong linux.

bạn có thể cài đặt theo lệnh:

$ sudo yum install psmisc	#RHEL/CentOS 
$ sudo apt install psmisc	#Debian/Ubuntu
$ sudo dnf install psmisc	#Fedora 22+

Để tìm tiến trình/dịch vụ  lắng nghe trên port nào đó, sử dụng lệnh sau:

  • Tìm PID sử dụng cổng 80/tcp:
   $ fuser 80/tcp
  • Tìm tên dịch vụ với số PID sử dụng lệnh ps command như sau:
$ ps -p 7823 -o comm=
$ ps -p 7824 -o comm=
$ ps -p 7825 -o comm=
$ ps -p 7826 -o comm=



Kết quả với cả 3 cách trên bạn đều có thể tìm ra tiến trình đang lắng nghe trên một port cụ thể, Như trong cả 3 ví dụ phía trên port đang lắng nghe là `nginx`.
Hi vọng bài viết này sẽ giúp bạn có thêm được hướng xử lý trong các trường hợp cụ thể.