Pertanyaan Bagaimana cara mengetahui program apa yang mendengarkan pada port tertentu?


Saya menduga program sedang mendengarkan di port 8000 di mesin saya.

Ketika saya menjalankan perintah berikut, saya mendapatkan kesalahan ini:

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

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

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

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


291
2018-04-06 08:36


asal




Jawaban:


Buka terminal Anda dan ketik sebagai

lsof -i :8000

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

Misalnya, dengan port 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)

Dan port 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)

Semoga itu membantu.


189
2018-04-06 08:50



Ini juga berfungsi pada OSX untuk apa nilainya ..... - reevesy
Menambah -s TCP:LISTEN membatasi hasilnya pada soket dengar yang sebenarnya dan prosesnya. - jhermann
Jika Anda mencari port 8000, ia kembali PID 1889? wat - CodyBugstein
Ya, ada layanan dengan PID 1889 menggunakan port 8881. saya kehilangan sesuatu? - Ten-Coin
@Imray contoh pencarian untuk port 8881. Kolom PID berisi ID proses dan kolom NAME berisi port. - Freek de Bruijn


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 yang mana yang mendengarkan pada port 8000 Anda dapat menggunakan ini:

sudo netstat -peanut | grep ":8000 "

Tidak ada proses yang dapat disembunyikan dari netstat.


329
2018-04-06 08:58



netstat -peanut lebih mudah diingat daripada netstat -taupen! - Douglas B. Staple
Bagus sekali! - Cukup edit jawaban untuk mencerminkan komentar Anda. Terima kasih. - Antoine Rodriguez
'fuser -k 8000 / tcp' untuk membebaskan port itu - Jay Modi
jika di kolom "PID / Program name" Anda melihat dash bukan nama proses, Anda lupa menambahkan "sudo" - v.shashenko
jadi itu adalah kacang tanah eh - prusswan


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

$ 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

Saya dapat melihat di sana bahwa cumi-cumi adalah prosesnya, tetapi sebenarnya saya squid-deb-proxy yang mengambil port.

Contoh bagus lain dari aplikasi 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

Anda bisa melihatnya lsof (LiSt Open Files) bahwa itu adalah java, yang kurang bermanfaat. Menjalankan ps perintah dengan PID kita dapat langsung melihat bahwa itu adalah CrashPlan.


164
2018-06-17 15:55



Dalam satu perintah: lsof -t -i :8000 | xargs ps -fp - Brett Y
Saya harus awalan sudo  tetapi setelah itu berhasil bagi saya. Terima kasih. - Dwayne Crooks
catatan: tanpa sudo Anda tidak akan mendapatkan kesalahan, Anda akan mendapatkan jawaban sederhana. - Frank Nocke


Mencoba ss dari iproute2 paket:

ss -nlp | grep 8000

10
2018-04-06 08:44



ss juga memiliki kemampuan penyaringan sendiri: ss -nlp '( sport = :8000 )'. - GnP


Cara lain menggunakan socklist dari procinfo paket:

man socklist

DESKRIPSI
socklist adalah skrip Perl yang memberi Anda daftar semua soket terbuka, enumerasi jenis, port,          inode, uid, pid, fd dan program yang menjadi miliknya.

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





Anda bisa 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 paling terbuka   umum adalah nmap yang merupakan alat baris perintah, tetapi juga ada a   Bagian depan grafisDan untuk itu jika Anda lebih suka seperti itu.1

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

sudo apt-get install nmap

Untuk informasi lebih lanjut tentang nmap, dan utilitas lain, pergi Sini

1Sumber:garron.me


2
2018-04-06 08:46



nmap hanya akan memberi tahu Anda bahwa port terbuka, bukan proses yang membukanya. - Andrew Burns
Saya mengklik ke sumber Anda untuk membaca [nmap] tries to guess which service is listening on each port, but it can make mistakes tepat sebelum menyarankan metode aktual untuk mengetahui proses mana yang memiliki soket. - GnP
@gnp Anda mungkin juga ingin melihatnya Ini. - Mitch♦
@Mitch saya lakukan. OP perlu mengetahui PID yang tepat dari suatu proses pada sistem lokal. Nmap bukan alat yang tepat di sini, bahkan dengan layanan dan deteksi versi. Entah itu akan cocok dengan item di database nmaps, yang masih memungkinkan OP pada gelap seperti proses apa yang akan membunuh atau mengkonfigurasi ulang, atau tidak akan dan OP akan memiliki sidik jari yang bagus dan tautan ke insecure.org - GnP