Android

Cách kiểm tra cổng nghe trong linux (cổng đang sử dụng)

add repository using terminal of kali linux

add repository using terminal of kali linux

Mục lục:

Anonim

Khi xử lý sự cố kết nối mạng hoặc các sự cố cụ thể của ứng dụng, một trong những điều đầu tiên cần kiểm tra là cổng nào thực sự được sử dụng trên hệ thống của bạn và ứng dụng nào đang nghe trên một cổng cụ thể.

Bài viết này giải thích cách tìm ra dịch vụ nào đang lắng nghe trên các cổng nào sử dụng các netstat , ss lsof . Các hướng dẫn có thể áp dụng cho tất cả các hệ điều hành dựa trên Linux và Unix như macOS.

Cổng nghe là gì

Cổng mạng được xác định bằng số của nó, địa chỉ IP được liên kết và loại giao thức truyền thông như TCP hoặc UDP.

Cổng lắng nghe là cổng mạng mà ứng dụng hoặc quá trình lắng nghe, đóng vai trò là điểm cuối giao tiếp.

Mỗi cổng nghe có thể được mở hoặc đóng (được lọc) bằng tường lửa. Nói chung, một cổng mở là một cổng mạng chấp nhận các gói đến từ các địa điểm từ xa.

Bạn không thể có hai dịch vụ nghe cùng một cổng trên cùng một địa chỉ IP.

Ví dụ: nếu bạn đang chạy một máy chủ web Apache nghe trên các cổng 80 443 và bạn cố gắng cài đặt Nginx thì sau này sẽ không khởi động được vì các cổng HTTP và HTTPS đã được sử dụng.

Kiểm tra cổng nghe với netstat

netstat là một công cụ dòng lệnh có thể cung cấp thông tin về các kết nối mạng.

Để liệt kê tất cả các cổng TCP hoặc UDP đang được lắng nghe, bao gồm các dịch vụ sử dụng các cổng và trạng thái ổ cắm, hãy sử dụng lệnh sau:

sudo netstat -tunlp

Các tùy chọn được sử dụng trong lệnh này có ý nghĩa như sau:

  • -t - Hiển thị cổng TCP. -u - Hiển thị cổng UDP. -n - Hiển thị địa chỉ số thay vì giải quyết máy chủ. -l - Chỉ hiển thị các cổng nghe. -p - Hiển thị PID và tên của quá trình người nghe. Thông tin này chỉ được hiển thị nếu bạn chạy lệnh với tư cách là người dùng root hoặc sudo.

Đầu ra sẽ trông giống như thế này:

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

Các cột quan trọng trong trường hợp của chúng tôi là:

  • Proto - Giao thức được sử dụng bởi các ổ cắm. Local Address - Local Address IP và số cổng mà quá trình nghe. PID/Program name - PID và tên của quy trình.

sudo netstat -tnlp | grep:22

Đầu ra cho thấy trên máy 22 cổng này được máy chủ SSH sử dụng:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd tcp6 0 0:::22:::* LISTEN 445/sshd

Nếu đầu ra trống, điều đó có nghĩa là không có gì nghe trên cổng.

Bạn cũng có thể lọc danh sách dựa trên các tiêu chí, ví dụ: PID, giao thức, trạng thái, v.v.

netstat đã lỗi thời và được thay thế bằng ss ip , nhưng nó vẫn là một trong những lệnh được sử dụng nhiều nhất để kiểm tra các kết nối mạng.

Kiểm tra cổng nghe với ss

ss netstat mới. Nó thiếu một số tính năng netstat nhưng phơi bày nhiều trạng thái TCP hơn và nó nhanh hơn một chút. Các tùy chọn lệnh hầu hết đều giống nhau nên việc chuyển đổi từ netstat sang ss không khó khăn.

Để có danh sách tất cả các cổng nghe với ss bạn sẽ gõ:

sudo ss -tunlp

Đầu ra gần giống như kết quả được báo cáo bởi netstat :

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd", pid=445, fd=3)) LISTEN 0 100 0.0.0.0:25 0.0.0.0:* users:(("master", pid=929, fd=13)) LISTEN 0 128 *:3306 *:* users:(("mysqld", pid=534, fd=30)) LISTEN 0 128 *:80 *:* users:(("apache2", pid=765, fd=4), ("apache2", pid=764, fd=4), ("apache2", pid=515, fd=4)) LISTEN 0 128:22:* users:(("sshd", pid=445, fd=4)) LISTEN 0 100:25:* users:(("master", pid=929, fd=14)) LISTEN 0 70 *:33060 *:* users:(("mysqld", pid=534, fd=33))

Kiểm tra cổng nghe với lsof

lsof là một tiện ích dòng lệnh mạnh mẽ cung cấp thông tin về các tệp được mở bởi các quy trình.

Trong Linux, mọi thứ đều là một tệp. Bạn có thể nghĩ về một socket như một tập tin ghi vào mạng.

Để có danh sách tất cả các cổng TCP nghe với loại lsof :

sudo lsof -nP -iTCP -sTCP:LISTEN

Các tùy chọn được sử dụng như sau:

  • -n - Không chuyển đổi số cổng thành tên cổng. -p - Không giải quyết tên máy chủ, hiển thị địa chỉ số. -iTCP -sTCP:LISTEN - Chỉ hiển thị các tệp mạng có LISTEN trạng thái 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)

Hầu hết các tên cột đầu ra là tự giải thích:

  • COMMAND , PID , USER - Tên, pid và người dùng đang chạy chương trình được liên kết với cổng. NAME - Số cổng.

Để tìm quá trình đang nghe trên một cổng cụ thể, ví dụ: cổng 3306 bạn sẽ sử dụng:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

Kết quả đầu ra cho thấy cổng 3306 được sử dụng bởi máy chủ MySQL:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)

Để biết thêm thông tin, hãy truy cập trang người dùng lsof và đọc về tất cả các tùy chọn mạnh mẽ khác của công cụ này.

Phần kết luận

Chúng tôi đã chỉ cho bạn một số lệnh mà bạn có thể sử dụng để kiểm tra cổng nào đang được sử dụng trên hệ thống của bạn và cách tìm quy trình nào lắng nghe trên một cổng cụ thể.

thiết bị đầu cuối