Port 80 sedang digunakan oleh SYSTEM (PID 4), apa itu?

9

Saya mencoba menggunakan port 80 untuk server aplikasi saya, tetapi ketika saya melakukan "netstat -aon" saya dapatkan

TCP 0.0.0.0:80 0.0.0.0.00 MENDENGARKAN 4

Ketika saya mencari proses di task manager, itu menunjukkan PID 4 adalah SISTEM, itu saja, bukan ekstensi ... tidak ada, hanya "SISTEM". Apa yang terjadi di sini?

Saya takut untuk mengakhiri proses ini, apa yang harus saya lakukan?


sumber
net stop http WORKED FOR ME
Saurabh Sinha

Jawaban:

14

Meskipun orang-orang menunjukkan layanan tertentu (mis. "Layanan Web Deployment Agent"), ini gagal untuk mengatasi penyebab utama. Jika Anda hanya menonaktifkan layanan yang memicu masalah, kemungkinan itu akan memundurkan kepalanya lagi di masa depan dalam kedok yang sedikit berbeda. Jadi ada baiknya memahami apa yang salah, karena itu mengarah ke perbaikan yang lebih baik.

Masalah ini muncul ketika server aplikasi menginginkan kontrol total port 80. Ini bertentangan dengan fitur Windows yang dirancang untuk memungkinkan beberapa proses menangani permintaan pada port 80. Sangat mungkin untuk memiliki sejumlah proses semua menerima permintaan HTTP pada port 80, karena Windows memiliki mekanisme pengiriman HTTP bawaan. Setiap proses dapat memberi tahu Windows URL mana yang ingin ditangani.

Namun, jika server aplikasi benar-benar mengabaikan ini, maka Anda kembali ke dunia soket sekolah lama yang kurang fleksibel di mana hanya satu proses yang dapat menerima permintaan yang ditujukan untuk port tertentu.

Itu mungkin baik-baik saja - jika Anda benar-benar tidak menginginkan apa pun selain proses tertentu yang menangani permintaan HTTP pada port 80, maka menjadi lumayan untuk menggunakan server aplikasi yang gagal mendukung mekanisme yang lebih fleksibel yang ditawarkan oleh Windows. (Dan beberapa server aplikasi populer memiliki batasan ini. Misalnya, AFAIK, Tomcat tidak dapat bermain dengan baik dengan yang lain, dan bersikeras memiliki port 80 untuk dirinya sendiri. Jadi jika Anda menggunakan server aplikasi orang lain, mungkin tidak praktis untuk sesuaikan untuk menggunakan mekanisme yang disukai.)

Windows berupaya mengakomodasi layanan tidak fleksibel semacam itu dengan tidak mengikat mekanisme pengirimannya ke port 80 hingga sesuatu secara aktif menanyakannya. (Inilah sebabnya Anda awalnya tidak akan melihat masalah pada awalnya, tetapi dapat mengalami masalah ini setelah semacam pembaruan atau perubahan konfigurasi.) Namun mengandalkan ini bukanlah solusi yang sangat solid - Anda pada dasarnya percaya pada keberuntungan bahwa tidak ada apa-apa mencoba mendengarkan di bawah port 80 sebelum server aplikasi Anda diluncurkan. (Ada beberapa alasan mengapa suatu proses spekulatif mencoba mendaftar untuk URL tertentu pada port 80, dan mundur jika tidak diizinkan.)

Jadi jika Anda ingin satu layanan memiliki akses eksklusif ke port 80, Anda sebaiknya memberi tahu Windows. Tidak cukup baik untuk mencoba mematikan semua layanan yang mungkin mencoba menggunakan mekanisme berbagi port yang biasa, karena sulit untuk yakin bahwa Anda telah menemukan semuanya. (Terutama ketika pembaruan Windows tampaknya mengubah apa yang aktif secara default.) Ini mungkin praktik yang baik untuk menonaktifkan yang Anda ketahui, tetapi yang terbaik untuk mendekati ini dari kedua ujungnya: menonaktifkan layanan yang tidak Anda inginkan, dan juga memastikan bahwa itu bukan mungkin untuk orang yang Anda tidak tahu akan membuat Anda tersandung.

Secara default HTTP.SYS(mekanisme pengiriman HTTP berbagi port yang mendasarinya di Windows) dapat mendengarkan semua alamat. Tetapi Anda bisa mengatakannya untuk tidak melakukannya. Halaman ini menunjukkan satu cara untuk melakukannya: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

Itu adalah cara yang relatif ringan untuk melakukannya, karena masih memungkinkan mendengarkan di localhost untuk IPv6. Itu hanya membebaskan port IPv4 80. Anda bisa membawanya lebih jauh dengan konfigurasi yang lebih khusus. (Anda bahkan dapat menonaktifkan HTTP.SYSsepenuhnya, tetapi hal itu dapat merusak hal-hal menggunakan port selain 80, sehingga dapat menyebabkan masalah.)

Tapi apa pun yang Anda lakukan, intinya adalah untuk memastikan bahwa HTTP.SYStidak berusaha untuk mendengarkan pada port 80 pada alamat IP yang Anda pedulikan. Setelah Anda selesai melakukannya, Anda tidak perlu khawatir tentang menonaktifkan layanan, Anda juga tidak perlu khawatir tentang perubahan lain yang memperkenalkan kembali masalah. Jika Anda telah memastikan bahwa titik akhir yang Anda butuhkan secara efektif di luar batas untuk berbagi port, maka Anda harus menemukan bahwa proses sistem berhenti mengikat padanya.

Ian Griffiths
sumber
Terima kasih atas jawaban yang sangat informatif. Sebagai pengguna Unix, saya tidak tahu bahwa Windows memiliki mekanisme pengiriman HTTP untuk memungkinkan beberapa proses simultan menanggapi permintaan di Port 80.
Anthony Geoghegan
11

Pelakunya adalah Layanan Agen Penerapan Web.

Solusi yang lebih baik daripada net stop httpmenghentikan layanan yang dinamai "Web Deployment Agent Service".

Avinash
sumber
3
Pria! Persetan praktik Microsoft yang mengerikan! Saya harus menghabiskan waktu berjam-jam untuk mencari tahu mengapa ada contoh IIS (dinilai oleh header ketika terhubung melalui telnet) mendengarkan pada 0.0.0.0:80 dan mencegah Apache memulai, BAHKAN ketika saya telah menghapus IIS dari fitur / peran Windows. Ya, itu adalah Layanan Agen Penyebaran Web, memblokir semua akses ke port 80 pada alamat apa pun! Pria!
Francisco Zarabozo
2
Lebih banyak kasus server aplikasi menggunakan praktik buruk. Windows memiliki mekanisme yang dirancang untuk memungkinkan beberapa proses menangani permintaan HTTP pada port 80. Sangat mungkin bagi IIS untuk hidup berdampingan dengan beberapa aplikasi lain, semuanya menangani permintaan port 80. Inilah sebabnya mengapa proses sistem mendengarkan 80 untuk Anda - ia dapat mengirimkan setiap permintaan ke proses mana pun yang bertanggung jawab untuk URL tertentu. Sayangnya, jika server aplikasi benar-benar mengabaikan ini, dan menginginkan kepemilikan total port 80, semuanya salah. Jika server aplikasi tidak mengabaikan konvensi, Anda tidak mendapatkan masalah ini.
Ian Griffiths
1
Ok, saya baru tahu bahwa Nginx mengabaikan konvensi "MS ini" ... dan hanya menonaktifkan layanan.
Jens A. Koch
4
Nama spesifik dari layanan yang Anda harus hentikan dan nonaktifkan adalah World Wide Web Publishing Service. Sementara "net stop http" sendiri merupakan jawaban yang benar-benar brutal yang penuh dengan efek samping buruk - layanan seperti spooler cetak Anda dan bagian dari proses masuk Windows 10 mengandalkan http - apa yang akan dilakukan jika Anda mencobanya, adalah memberi Anda daftar layanan yang bergantung pada http, dan opsi untuk mundur. Mencoba segelintir layanan dalam daftar itu satu per satu adalah bagaimana saya mengetahui bahwa Layanan Penerbitan WWW adalah biang keladinya.
Jessica Pennell 3-15
Dalam kasus saya, itu adalah World Wide Web Publishing Service yang mencegah semua hal lain dari mendengarkan port 80. Saya dapat menjalankan banyak apache dan nginx tanpa masalah pada saat yang bersamaan, tetapi ketika World Wide Web Publishing Service masuk ke dalam campuran setelah Windows Update segalanya baru-baru ini lain pada port 80 berhenti bekerja.
J. Salah
4

Kemungkinan besar IIS 6.0 atau yang lebih baru.

Tumpukan protokol HTTP (HTTP.sys), yang berjalan dalam mode kernel , menerima permintaan klien dan merutekannya ke antrian permintaan yang sesuai. Proses pekerja, yang berjalan dalam mode pengguna, menarik permintaan langsung dari antrian permintaan kernel mereka sendiri, menghilangkan proses hop yang terjadi di IIS 5.0 (dan itu juga terjadi dalam mode isolasi IIS 5.0) ketika server Web mengirimkan permintaan ke High -isolasi, aplikasi out-of-proses. Karena hop proses ekstra ini dihilangkan dalam mode isolasi proses pekerja, IIS dapat memberikan isolasi aplikasi tanpa mengorbankan kinerja.

Mark Allen
sumber
Hmm, saya pikir IIS muncul sebagai "inetinfo.exe" - kira ada beberapa situasi di mana tidak.
Mark Henderson
Itu benar! :) Ini muncul sebagai keduanya - hal-hal mode pengguna masuk inetfino.exe, tetapi hal-hal mode kernel berasal dari "sistem".
Mark Allen
1

Cobalah untuk menghentikan HTTP.SYSdengan masuk ke Device Manager/Non Plug and Play Driversdan Pilih HTTP, cobalah untuk menghentikannya dan Anda akan melihat layanan yang memicu HTTP ini untuk menggunakan port 80.

Farooque
sumber
0

Terakhir saya periksa, Anda tidak dapat mengakhiri proses "sistem", dan jika Anda melakukannya, saya kira itu akan memiliki efek bencana. Saya tidak akan mencobanya di PC saya juga sekarang!

Tampaknya sesuatu di dalam Windows sendiri sedang mendengarkan: 80 - Saya akan menebak bahwa itu bisa menjadi sesuatu yang berbahaya. Cara terbaik untuk mengetahuinya adalah dengan:

a) Buka browser web ke localhost dan lihat apa yang muncul

b) Mulai Telnet dan telnet ke localhost 80 dan jalankan beberapa HTTP GET dasar (mis. GET /) dan lihat apa yang dikembalikan

B adalah pilihan yang lebih baik jika Anda berpikir bahwa Anda mungkin meng-host malware, karena Anda tidak benar-benar ingin menulari diri sendiri lagi. Meskipun mungkin itu tidak masalah.

Mark Henderson
sumber
itu tidak bisa menjadi malware seperti pada VPS saya, itu belum berjalan dan berjalan sangat lama. Saya juga tidak menggunakannya untuk menjelajah web jadi ...
0

Saya menemukan jawaban untuk pertanyaan ini di: /superuser/352017/pid4-using-port-80

Khususnya ketika itu adalah Sistem Proses 4, Anda perlu menonaktifkan pengandar HTTP.sys yang dimulai berdasarkan permintaan oleh layanan lain, seperti Windows Remote Management atau Print Spooler pada Windows 7 atau 2008.

  1. Pergi ke manajer perangkat, pilih "tampilkan perangkat tersembunyi" dari menu / tampilan, buka "Non-Plug and Play Driver" / HTTP, klik dua kali untuk menonaktifkannya (atau mengaturnya ke manual, beberapa layanan tergantung padanya).

Mulai ulang dan gunakan netstat -nao | temukan “: 80 ″ untuk memeriksa apakah 80 masih digunakan.

Saya juga mencoba untuk mendapatkan port kembali dengan hanya menjalankan "net stop http" tetapi port sepertinya tidak pernah dibebaskan kembali. Di atas memang bekerja untuk saya, dan saya tidak perlu layanan lain yang tergantung pada driver ini.

Adam Trimeloni
sumber
0

Windows Sync Share adalah apa yang membunuh kita di Windows 2012 R2. Setelah kami menonaktifkan fitur ini, semuanya muncul dengan baik.

Kepala Roberts
sumber
0

Dalam kasus saya itu karena Carbon Black anti virus entah bagaimana mengambil cengkeraman pada port 80. Saya menghabiskan waktu berjam-jam untuk mencari tahu, jadi saya merasa berkewajiban untuk berbagi kalau-kalau itu menuntun sesama jiwa miskin pada cahaya :) Saya tidak tahu bagaimana cara memperbaikinya, tanyakan pada server / tim jaringan Anda!

zero01alpha
sumber
-1

Saya telah memecahkan ini melalui pertanyaan stackoverflow. Ikuti tautan ini untuk menemukan solusi bagaimana membuat IIS berhenti mendengarkan pada port 80 untuk alamat IP tertentu.

Komunitas
sumber