Câu hỏi Làm thế nào để biết những gì chương trình đang lắng nghe trên một cổng nhất định?


Tôi nghi ngờ một chương trình đang nghe trên cổng 8000 trên máy tính của tôi.

Khi tôi chạy lệnh sau, tôi nhận được lỗi này:

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

Nếu tôi sử dụng một cổng khác (8000 là mặc định), máy chủ web chạy tốt.

Nếu tôi chạy wget localhost:8000 từ dòng lệnh, nó trả về 404 Not Found.

Tôi có thể làm gì (hoặc những công cụ có sẵn) để tìm chương trình nào đang nghe trên cổng 8000và từ đó chương trình đó được cấu hình ở đâu?


292
2018-04-06 08:36


gốc




Các câu trả lời:


Mở thiết bị đầu cuối của bạn và nhập dưới dạng

lsof -i :8000

lệnh đó sẽ liệt kê cho bạn ứng dụng được sử dụng bởi cổng đó với PID. (Nếu không có kết quả nào chạy qua sudo vì bạn có thể không được phép đối với một số quy trình nhất định.)

Ví dụ, với cổng 8000 (python3 -m http.server):

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

Và cổng 22 (SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

Hy vọng rằng sẽ giúp.


189
2018-04-06 08:50



Điều này cũng làm việc trên OSX cho những gì nó có giá trị ..... - reevesy
Đang thêm -s TCP:LISTEN hạn chế kết quả với ổ cắm nghe thực tế và quá trình của nó. - jhermann
Nếu bạn tìm kiếm cổng 8000, nó sẽ trả về PID 1889? wat - CodyBugstein
Có, có dịch vụ với PID 1889 sử dụng cổng 8881. Tôi có thiếu gì không? - Ten-Coin
@Imray tìm kiếm ví dụ cho cổng 8881. Cột PID chứa các ID tiến trình và cột NAME chứa các cổng. - Freek de Bruijn


Bạn có thể sử dụng netstat để xem quá trình nào đang lắng nghe trên cổng nào.

Bạn có thể sử dụng lệnh này để có đầy đủ chi tiết:

sudo netstat -peanut

nếu bạn cần biết chính xác cái nào đang nghe trên cổng 8000, bạn có thể sử dụng nó:

sudo netstat -peanut | grep ":8000 "

Không có quá trình nào có thể ẩn khỏi netstat.


329
2018-04-06 08:58



netstat -peanut dễ nhớ hơn netstat -taupen! - Douglas B. Staple
Tốt nhất! - Chỉ cần chỉnh sửa câu trả lời để phản ánh nhận xét của bạn. Cảm ơn bạn. - Antoine Rodriguez
'fuser -k 8000 / tcp' để giải phóng cổng đó - Jay Modi
nếu trong cột "PID / Tên chương trình" bạn thấy dấu gạch ngang thay vì tên quy trình, bạn quên thêm "sudo" - v.shashenko
vì vậy nó là đậu phộng eh - prusswan


Để giải thích câu trả lời của @ 33833, bạn có thể nhận được một số thông tin rất chi tiết, ví dụ:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Tôi có thể thấy ngay rằng mực là quá trình, nhưng nó thực sự là của tôi squid-deb-proxy đang chiếm cảng.

Một ví dụ khác về ứng dụng java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Bạn có thể thấy trong lsof (LiSt Open Files) là java, ít hữu ích hơn. Chạy ps lệnh với PID chúng ta có thể thấy ngay rằng đó là CrashPlan.


164
2018-06-17 15:55



Trong một lệnh: lsof -t -i :8000 | xargs ps -fp - Brett Y
Tôi đã phải tiền tố sudo  nhưng sau đó nó làm việc cho tôi. Cảm ơn. - Dwayne Crooks
lưu ý: không có sudo bạn sẽ không nhận được một lỗi, bạn đơn giản sẽ không nhận được gì là một phản ứng. - Frank Nocke


Thử ss từ iproute2 gói:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss cũng có khả năng lọc riêng: ss -nlp '( sport = :8000 )'. - GnP


Một cách khác bằng cách sử dụng socklist từ procinfo gói:

man socklist

SỰ MIÊU TẢ
socklist là một tập lệnh Perl cung cấp cho bạn danh sách tất cả các ổ cắm mở, liệt kê các loại, cổng,          inode, uid, pid, fd và chương trình mà nó thuộc về.

sudo socklist 

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon

5
2018-06-29 10:23





Bạn có thể sử dụng nmap.

Điều thực sự quan trọng là phải biết cổng nào đang mở trong máy tính của bạn, điều này   không chỉ hữu ích cho Linux, mà còn cho các hệ điều hành khác,   Linux có rất nhiều công cụ để kiểm tra cổng nào đang mở,   phổ biến là nmap là một công cụ dòng lệnh, nhưng cũng tồn tại   Đồ họa frontEnd cho nó nếu bạn thích theo cách đó.1

để cài đặt nó, chỉ cần nhấn Ctrl+Alt+T trên bàn phím để mở Terminal. Khi nó mở ra, hãy chạy lệnh dưới đây:

sudo apt-get install nmap

Để biết thêm thông tin về nmap và các tiện ích khác, hãy truy cập Đây

1Nguồn:garron.me


2
2018-04-06 08:46



nmap sẽ chỉ cho bạn biết rằng một cổng đang mở, không phải quá trình nào đã mở nó. - Andrew Burns
Tôi đã nhấp vào nguồn của bạn để đọc [nmap] tries to guess which service is listening on each port, but it can make mistakes ngay trước khi nó gợi ý một phương pháp thực tế để tìm ra quy trình nào sở hữu socket. - GnP
@gnp Bạn cũng có thể muốn xem Điều này. - Mitch♦
@Mitch tôi đã làm. OP cần biết chính xác PID của một quá trình trên hệ thống cục bộ. Nmap không phải là công cụ thích hợp ở đây, ngay cả với dịch vụ và phát hiện phiên bản. Hoặc nó sẽ phù hợp với một mục trên cơ sở dữ liệu nmaps, mà vẫn cho phép OP trên bóng tối như những gì quá trình để giết hoặc cấu hình lại, hoặc nó sẽ không và OP sẽ có một dấu vân tay đẹp và một liên kết đến insecure.org - GnP