Saya menggunakan OSX Mountain Lion 10.8.3, dan saya baru saja mem-boot ulang Mac saya.
Saya ingin memulai layanan (seperti Apache pada port 80), tetapi sudah ada sesuatu yang terjadi dengan port 80:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Tunggu, saya mendengar Anda berkata, Anda dapat menemukannya dengan lsof atau netstat. Kecuali tidak ada apa pun di sana
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Jadi dari apa yang saya ketahui tentang sistem unix, saya pikir ini harus menjadi aturan penerusan paket? Yaitu paket sedang diteruskan dari port masuk 80 ke sesuatu yang lain, yang mendengarkan layanan itu.
ipfw show
65535 0 0 allow ip from any to any
Hmm, tidak ada yang aneh di sana
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Tidak ada yang aneh di sana
Pertanyaan saya adalah, bagaimana saya bisa menampilkan aturan penerusan paket ... Di Linux saya mungkin hanya melakukan iptables -L -t NAT, atau iptables -L. Atau sebagai alternatif, dapatkah pakar OSX membantu saya mendiagnosis masalah ini?
lsof
grep Anda digunakan akan datang kosong kembali; nomor port dipetakan ke/etc/services
nama. Cobalsof -i | grep http
...-i :port
format, hanya jika Anda mau. Apa yang akan menjadi masalah adalah yanglsof
membutuhkan root privs untuk melihat proses pengguna lain, jadi Anda harus menggunakansudo lsof -i :80
(dan saya akan mencobanya tanpagrep
, hanya untuk memastikan ...)lsof -i :80
saat masih terhubung di sesi Telnet itu? Dan selain mencoba http: // localhost / , mungkin mengetik sesuatu di prompt Telnet itu mengungkapkan sesuatu ...? (Sekali lagi, saya tahu: bahkan jika Anda mengetahuinya seperti itu, itu tidak akan menjadi jawaban untuk pertanyaan Anda ...)Jawaban:
Anda perlu menjalankan perintah ini
root
untuk menunjukkan proses pengguna lain, misalnya:Mac OS X menyertakan server web Apache yang dapat dikontrol menggunakan
apachectl
asroot
. Biasanya dimulai melaluilaunchd
, file konfigurasi yang sesuai adalah/System/Library/LaunchAgents/org.apache.httpd.plist
. Jika ini bukan Apache yang berjalan pada port 80, kemungkinan launchd , implementasi daemon manager dari Apple. Menurut Wikipedia :sumber
sudo lsof -i ':80'
mungkin tidak benar-benar mengembalikan apa pun, kecuali ada yang menjalankannya saat terhubung dalam sesi Telnet? Tetapi bahkan tanpa perintah-perintah itu, http: // localhost / mungkin masih akan menampilkan halaman selamat datang di Apache?sudo apachectl stop
di terminal.sudo lsof -i -P | grep -i "80"
dari superuser.com/questions/984919/…Hanya untuk memperjelas jawaban yang sebenarnya jika pengguna mencari ini.
launchd memindai
/System/Library/LaunchDaemons/
boot saat dan berhasil dariorg.apache.httpd.plist
itu ketika apache dimulai ia perlu meneruskan port 80 ke sana.sudo apachectl start
selesaiNamun ada kesalahan dalam
httpd.conf
file yang berarti apache tidak dimulai, meskipun ini tidak dilaporkan melaluiapachectl
perintah.Launchd memutuskan untuk mendengarkan pada port 80 karena dianggap apache naik.
Tetapi isi dari setiap permintaan HTTP menghasilkan penutupan koneksi segera.
sudo lsof -i :80
tidak menghasilkan jawabansudo netstat -an | grep LISTEN
tidak menghasilkan jawaban untuk port 80tidak ada informasi sejauh yang saya tahu dalam alat diagnostik yang menunjukkan bahwa port 80 sedang digunakan atau mendengarkan.
memperbaiki httpd.conf apache dan me-restart apache dengan sukses sehingga httpd ada di tabel ps, membuat permintaan HTTP berhasil.
Karena itu saya salah bahwa saya tidak dapat menjalankan apache karena sudah ada sesuatu yang mendengarkan pada port 80, daripada apache conf itu sendiri yang menjadi penyebabnya.
sumber
Saya baru saja mengalami masalah yang sama dengan OSX El Capitan dan Avast antivirus.
sudo lsof -i ':80'
menunjukkan koneksi ke avast.com.saya harus
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
untuk mencegahnya menggunakannya port 80.
sumber