Bagaimana cara mengetahui program apa yang mendengarkan pada port yang diberikan?

Saya menduga sebuah program mendengarkan di port 8000 pada mesin saya.

Ketika saya menjalankan perintah berikut, saya mendapatkan kesalahan ini:

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

Jika saya menggunakan port lain (8000 adalah default), server web berjalan dengan baik.

Jika saya lari wget localhost:8000 dari baris perintah, ia kembali 404 Not Found.

Apa yang dapat saya lakukan (atau alat apa yang tersedia) untuk menemukan program apa yang mendengarkan di port 8000, dan dari sana di mana program yang dikonfigurasi?

Buka terminal Anda dan ketik sebagai

lsof -i :8000

perintah itu akan mencantumkan Anda aplikasi yang digunakan oleh port itu dengan PID.(Jika tidak ada hasil yang dijalankan melalui sudo karena Anda mungkin tidak memiliki izin untuk proses tertentu.)

Misalnya, dengan port 8000 (python3 -m http.server):

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

Dan port 22 (SSH):

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

Harapan yang membantu.

Anda dapat menggunakan netstat untuk melihat proses mana yang mendengarkan port mana.

Anda dapat menggunakan perintah ini untuk memiliki detail lengkap :

sudo netstat -peanut

jika Anda perlu tahu persis mana yang mendengarkan pada port 8000 Anda dapat menggunakan ini :

sudo netstat -peanut | grep ":8000 "

Tidak ada proses yang dapat bersembunyi dari netstat.

Untuk menjelaskan jawabannya dengan @33833 Anda bisa mendapatkan beberapa info yang sangat rinci, misalnya:

$ lsof -i :8000COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEsquid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)$ ps -fp 1289UID        PID  PPID  C STIME TTY          TIME CMDproxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Aku bisa melihat di sana bahwa cumi-cumi adalah proses, tetapi sebenarnya saya squid-deb-proxy yang mengambil pelabuhan.

Contoh bagus lainnya dari Aplikasi java:

$ lsof -i :4242COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEjava    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)$ ps -fp 3075UID        PID  PPID  C STIME TTY          TIME CMDroot      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Anda dapat melihat di lsof (Daftar file yang terbuka) bahwa itu adalah java, yang kurang membantu. Menjalankan ps perintah dengan PID kita dapat melihat langsung bahwa itu adalah CrashPlan.

Coba ss dari iproute2 paket:

ss -nlp | grep 8000

Cara lain menggunakan socklist dari procinfo paket:

man socklist

Deskripsi
socklist adalah skrip Perl yang memberi Anda daftar semua soket terbuka, jenis pencacahan, port, inode, uid, pid, fd dan program tempatnya.

sudo socklist

type  port      inode     uid    pid   fd  nametcp     53      28749       0   1721    5  dnsmasqtcp    631      29190       0   2433   11  cupsdtcp  42376      82230    1000   1345   84  firefoxtcp  49048      71686    1000   1345   67  firefoxtcp  41248      81672    1000   1345  119  firefoxtcp  54676      84558    1000   1345   73  firefoxudp  56107      66258       0   3268   20  dhclientudp  40804      17857     107    679   14  avahi-daemonudp     53      28748       0   1721    4  dnsmasqudp     68      67427       0   3268    6  dhclientudp    631      19692       0    765    8  cups-browsedudp   5353      17855     107    679   12  avahi-daemon

Karena titik rendah di komunitas, saya tidak bisa berkomentar di sini. Tanpa sudo semua perintah di atas tidak akan memberi Anda Id proses / Nama Program.

Jadi, Anda perlu mengetik hal-hal berikut:

sudo lsof -i :8000

atau

sudo netstat -lntup

Anda dapat memeriksa detail perintah tersebut melalui man, help atau pembantu favorit saya

Anda dapat menggunakan nmap.

Sangat penting untuk mengetahui port mana yang terbuka di PC Anda, ini tidak hanya berguna untuk Linux, tetapi juga untuk sistem operasi lain, Linux memiliki banyak alat untuk memeriksa port mana yang terbuka, yang paling umum adalah nmap yang merupakan alat baris perintah, tetapi juga ada antarmuka grafis untuk itu jika Anda lebih suka seperti itu.1

untuk menginstalnya, cukup tekan Ctrl+Alt+T pada keyboard Anda untuk membuka Terminal. Saat terbuka, Jalankan perintah di bawah ini:

sudo apt-get install nmap

Untuk informasi lebih lanjut tentang nmap, dan utilitas lainnya, pergi Di sini

1Sumber:garron.me

Berikut adalah perintah yang mudah diingat

ss -townlup Netid               State                 Recv-Q                Send-Q                                    Local Address:Port                               Peer Address:Porticmp6               UNCONN                0                     0                                                *%eth0:58                                            *:*udp                 UNCONN                0                     0                                         127.0.0.53%lo:53                                      0.0.0.0:*udp                 UNCONN                0                     0                                     172.31.26.71%eth0:68                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:22                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:443                                     0.0.0.0:*tcp                 LISTEN                0                     128                                       127.0.0.53%lo:53                                      0.0.0.0:*tcp                 LISTEN                0                     128                                                [::]:22                                         [::]:*tcp                 LISTEN                0                     128                                                [::]:443                                        [::]:*tcp                 LISTEN                0                     100                                                   *:9090                                          *:*                    users:(("java",pid=13008,fd=16))tcp                 LISTEN                0                     100                                                   *:8080                                          *:*                    users:(("java",pid=11556,fd=12))