Kiểm tra tiến trình nào đang sử dụng cổng trên Linux

Tác giả sysadmin, T.Một 14, 2023, 01:32:58 CHIỀU

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

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

Kiểm tra tiến trình nào đang sử dụng cổng trên Linux


1. Cổng là gì?

Trong mạng máy tính, một cổng đại diện cho một điểm vào và ra hợp lý cho một kết nối. Các cổng dựa trên phần mềm và hoàn toàn ảo. Các cổng này trên máy tính được quản lý bởi hệ điều hành.

2. Chúng ta sẽ nói về điều gì?

Hướng dẫn nhanh này trình bày các phương pháp khác nhau để xác định quy trình hoặc dịch vụ Linux nào hiện đang lắng nghe trên một cổng cụ thể. Hãy nói về các cổng và mục đích của chúng.

3. Các cổng tương tự như các cổng vật lý như thế nào?

Giống như các cổng vật lý giúp tương tác với các thiết bị ngoại vi khác nhau được kết nối với máy tính, các cổng giúp các dịch vụ khác nhau giao tiếp với nhau. Các dịch vụ này có thể trên cùng một máy tính hoặc trên các máy tính khác nhau.

4. Một chút về cổng của một dịch vụ

Để lắng nghe các yêu cầu kết nối đến, một quy trình sẽ liên kết chính nó với một số cổng. Hầu hết các quy trình được thiết lập với một cổng mặc định và chúng phải sử dụng cổng đó theo thông số kỹ thuật của chúng. Chúng không tự động chuyển sang cổng khác trừ khi cấu hình của chúng được sửa đổi rõ ràng.

Một số ví dụ về giao thức và các cổng mặc định được liên kết của chúng bao gồm giao thức Secure Shell (SSH) (port22), Apache HTTP (port80), máy chủ cơ sở dữ liệu MySQL (port3306), v.v. Bạn có thể sử dụng thông tin này để khám phá cổng mặc định mà một dịch vụ sử dụng.

Tệp cấu hình của các dịch vụ này cũng có thể được chỉnh sửa để sử dụng một số cổng khác.

5. Kiểm tra các cổng trên Linux

Bây giờ chúng ta hãy xem cách kiểm tra cổng/các cổng mà một tiến trình đang sử dụng trên Linux. Ở đây, chúng tôi sẽ chỉ cho bạn các lệnh khác nhau cho mục đích này.

5.1. Lệnh Lsof

Tiện ích lsof rất hữu ích để lấy danh sách các cổng được hệ thống của bạn sử dụng. Hãy xem xét ví dụ sau để lấy thông tin về một tiến trình (process) sử dụng cổng TCP 22:

Mã nguồn [Chọn]
$ sudo lsof -i TCP:22

Lệnh lsof cung cấp thêm thông tin như tên người dùng và ID quy trình nào được liên kết với từng quy trình. Nó hoạt động với cả cổng TCP và UDP.

5.2. Lệnh SS

Lệnh ss là một cách khác để tìm ra quy trình nào được liên kết với một cổng nhất định. Mặc dù lsof là cách viết tắt phổ biến hơn, nhưng một số người có thể thấy ss tiện dụng hơn.

Hãy tìm các quy trình hoặc dịch vụ lắng nghe trên cổng 3306:

Mã nguồn [Chọn]
$ sudo ss -tunap | grep : 3306

Hãy chia nhỏ lệnh này:

  • t : Nó yêu cầu lệnh ss hiển thị các gói TCP.
  • u : Nó yêu cầu lệnh ss hiển thị các gói UDP.
  • n : Nó được sử dụng để hiển thị số cổng thay vì bản dịch của chúng.
  • a : Nó được sử dụng để hiển thị các ổ cắm nghe cũng như không nghe của tất cả các loại.
  • p : Nó được sử dụng để hiển thị các quy trình sử dụng ổ cắm.

Kết quả của lệnh trước cho biết quá trình nào đang sử dụng cổng nào. Bạn cũng có thể đưa ra lệnh sau:

Mã nguồn [Chọn]
$ sudo ss -tup-a sport = :80

Ở đây, sport biểu thị cổng nguồn.

Hai cách tiếp cận này có thể giúp bạn tìm ID của các quy trình được kết nối với các cổng khác nhau.

5.3. Lệnh Netstat

Lệnh netstat hiển thị thông tin về mạng của bạn và có thể được sử dụng để khắc phục sự cố hoặc thay đổi cách thiết lập mạng của bạn. Nó cũng có thể theo dõi chặt chẽ các kết nối mạng của bạn.

Lệnh này thường được sử dụng để xem thông tin về các kết nối vào và ra, bảng định tuyến, nghe cổng và thống kê sử dụng. Mặc dù đã lỗi thời trong những năm gần đây, netstat vẫn là một công cụ hữu ích để phân tích mạng.

Với lệnh grep, netstat có thể xác định quá trình hoặc dịch vụ nào đang sử dụng một cổng nhất định (bằng cách đề cập đến cổng):

Mã nguồn [Chọn]
$ sudo netstat -ltnp | grep -w ':80'

Các tùy chọn được sử dụng ở đây có thể được phân loại như sau:

  • t : Nó chỉ hiển thị kết nối TCP.
  • l : Nó được sử dụng để hiển thị kết quả trong một danh sách.
  • n : Hiển thị địa chỉ và số cổng ở định dạng số.
  • p : Nó hiển thị PID và tên chương trình được liên kết với mỗi ổ cắm.

4. Lệnh Fuser

Lệnh fuser xác định các quy trình sử dụng các tệp hoặc ổ cắm. Bạn có thể sử dụng nó để liệt kê các dịch vụ chạy trên một cổng cụ thể. Hãy lấy ví dụ về cổng 3306 và xem dịch vụ nào đang chạy ở đây:

Mã nguồn [Chọn]
$ sudo fuser 3306/tcp
Điều này cung cấp cho chúng tôi số quy trình sử dụng cổng này. Bạn có thể sử dụng số quy trình này để tìm tên quy trình tương ứng. Ví dụ: nếu số quy trình là 15809, lệnh sử dụng ở đây như sau:

$ ps -p 15809 -o comm=


Tuy nhiên, một số công cụ được yêu cầu để xác định các quy trình sử dụng cổng không chuẩn. "LSOF" là một công cụ để khám phá những dịch vụ nào có sẵn trên mạng và những cổng nào chúng sử dụng. Hãy xem xét ví dụ sau. Điều này cho thấy cách liệt kê các cổng nghe UDP và TCP:

Mã nguồn [Chọn]
$ sudo lsof -Pni | egrep "(UDP|LISTEN)"

Sau đây là mô tả về các tùy chọn được sử dụng ở đây:

  • P : Nó chặn tra cứu tên dịch vụ cổng.
  • n : Nó hiển thị các địa chỉ mạng dạng số.
  • i : Nó liệt kê các ổ cắm IP.

Cả cổng và quy trình liên quan đều được hiển thị trong kết quả đã đề cập trước đó. Cách này đặc biệt hữu ích cho các quy trình có cổng không mặc định.

Trong bài viết này, chúng tôi đã nói về bốn công cụ dòng lệnh có thể có của Linux và cung cấp các ví dụ về cách sử dụng chúng để tìm ra quy trình nào đang lắng nghe trên một cổng nhất định.