Pertanyaan Siapa yang mendengarkan pada port TCP yang diberikan di Mac OS X?


Di Linux, saya bisa menggunakan netstat -pntl | grep $PORT atau fuser -n tcp $PORT untuk mengetahui proses mana (PID) yang mendengarkan pada port TCP yang ditentukan. Bagaimana saya mendapatkan informasi yang sama di Mac OS X?


930
2017-12-12 12:30


asal


Jawaban:


Di MacOS High Sierra, gunakan perintah ini:

lsof -nP -i4TCP:$PORT | grep LISTEN

Pada versi yang lebih lama, gunakan salah satu dari bentuk berikut:

lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN

Pengganti $PORT dengan nomor port atau daftar nomor port yang dipisahkan koma.

Bersiap sudo (diikuti oleh spasi) jika Anda memerlukan informasi tentang port di bawah # 1024.

Itu -n bendera adalah untuk menampilkan alamat IP, bukan nama host. Ini membuat perintah mengeksekusi lebih cepat, karena pencarian DNS untuk mendapatkan nama host bisa lambat (beberapa detik atau satu menit untuk banyak host).

Itu -P bendera adalah untuk menampilkan nomor port mentah sebagai ganti nama yang telah diselesaikan seperti http, ftp atau lebih nama layanan esoterik seperti dpserve, socalia.

Lihat komentar untuk opsi lainnya.


1430
2017-12-12 12:39



Anda juga bisa menggunakan:

sudo lsof -i -n -P | grep TCP

Ini bekerja di Mavericks.


374
2018-01-22 22:13



Sejak Yosemite (10.10), hingga High Sierra (10.13), setiap versi macOS mendukung ini:

sudo lsof -iTCP -sTCP:LISTEN -n -P

341
2018-05-04 12:11



Perbarui Januari 2016

Benar-benar mengejutkan tidak seorang pun menyarankan:

lsof -i :PORT_NUMBER

untuk mendapatkan informasi dasar yang diperlukan. Misalnya, memeriksa port 1337:

lsof -i :1337

Variasi lainnya, tergantung pada keadaan:

sudo lsof -i :1337
lsof -i tcp:1337

Anda dapat dengan mudah membangun ini untuk mengekstrak PID itu sendiri. Sebagai contoh:

lsof -t -i :1337

yang juga setara (dalam hasil) untuk perintah ini:

lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID

Ilustrasi cepat:

enter image description here

Untuk kelengkapan, karena sering digunakan bersama:

Untuk membunuh PID:

kill -9 <PID>
# kill -9 60401

atau sebagai satu liner:

kill -9 $(lsof -t -i :1337)

224
2018-01-07 15:45



Ini bekerja di Mavericks (OSX 10.9.2).

sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN

79
2018-05-12 03:33



pada OS X Anda dapat menggunakan opsi -v untuk netstat untuk memberikan pid terkait.

mengetik:

netstat -anv | grep [.]PORT

hasilnya akan terlihat seperti ini:

tcp46      0      0  *.8080                 *.*                    LISTEN      131072 131072   3105      0

PID adalah nomor sebelum kolom terakhir, 3105 untuk kasus ini


24
2017-11-03 08:06



Di macOS, inilah cara mudah untuk mendapatkan ID proses yang mendengarkan pada port tertentu dengan netstat. Contoh ini mencari proses penyajian konten pada port 80:

temukan server yang berjalan di port 80

netstat -anv | egrep -w [.]80.*LISTEN

keluaran sampel

tcp4  0 0  *.80       *.*    LISTEN      131072 131072    715      0

Yang kedua dari kolom terakhir adalah PID. Di atas, itu 715.

pilihan

-a - tunjukkan semua port, termasuk yang digunakan oleh server

-n - tampilkan angka, jangan mencari nama. Ini membuat perintah a banyak lebih cepat

-v - output verbose, untuk mendapatkan ID proses

-w - kata pencarian. Jika tidak, perintah akan mengembalikan info untuk port 8000 dan 8001, bukan hanya "80"

LISTEN - berikan info hanya untuk port dalam mode DENGARKAN, yaitu server


19
2018-01-14 22:14



Pada Snow Leopard (OS X 10.6.8), menjalankan hasil 'man lsof':

lsof -i 4 -a

(entri manual yang sebenarnya adalah 'lsof -i 4 -a -p 1234')

Jawaban sebelumnya tidak bekerja pada Snow Leopard, tetapi saya mencoba menggunakan 'netstat -nlp' sampai saya melihat penggunaan 'lsof' dalam jawaban dengan poin.


12
2017-08-25 19:14



Saya seorang Linux. Di Linux itu sangat mudah dengan netstat -ltpn atau kombinasi dari surat-surat itu. Namun di Mac OS X netstat -an | grep LISTEN adalah yang paling manusiawi. Yang lain sangat jelek dan sangat sulit untuk diingat ketika memecahkan masalah.


10
2017-08-17 18:57