Bagaimana Anda bisa mengetahui proses mana yang mendengarkan pada port di Windows?
Bagaimana Anda bisa mengetahui proses mana yang mendengarkan pada port di Windows?
Jawaban:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(Tambah -n untuk menghentikannya mencoba menyelesaikan nama host, yang akan membuatnya jauh lebih cepat.)
Perhatikan rekomendasi Dane untuk TCPView . Itu terlihat sangat berguna!
-a Menampilkan semua koneksi dan port mendengarkan.
-b Menampilkan executable yang terlibat dalam membuat setiap koneksi atau mendengarkan port. Dalam beberapa kasus, executable yang terkenal menjadi tuan rumah beberapa komponen independen, dan dalam kasus ini urutan komponen yang terlibat dalam menciptakan koneksi atau port mendengarkan ditampilkan. Dalam hal ini nama yang dapat dieksekusi ada di [] di bagian bawah, di atas adalah komponen yang disebutnya, dan seterusnya hingga TCP / IP tercapai. Perhatikan bahwa opsi ini dapat memakan waktu dan akan gagal kecuali Anda memiliki izin yang memadai.
-n Menampilkan alamat dan nomor port dalam bentuk numerik.
-o Menampilkan ID proses kepemilikan yang terkait dengan setiap koneksi.
1234
- maka Anda dapat menggunakan tasklist /fi "pid eq 1234"
untuk mengetahui nama dan detail lain dari proses tersebut.
Ada GUI asli untuk Windows:
Atau Jalankan resmon.exe
, atau dari tab kinerja Task Manager .
Gunakan TCPView jika Anda menginginkan GUI untuk ini. Ini adalah aplikasi Sysinternals lama yang dibeli Microsoft.
Untuk Windows:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
untuk jerman.
FIND: Parameter format not correct
Saklar -b yang disebutkan dalam sebagian besar jawaban mengharuskan Anda memiliki hak administratif di mesin. Anda tidak benar-benar membutuhkan hak tinggi untuk mendapatkan nama proses!
Temukan pid dari proses yang berjalan di nomor port (misalnya, 8080)
netstat -ano | findStr "8080"
Temukan nama proses dengan pid
tasklist /fi "pid eq 2216"
Anda bisa mendapatkan informasi lebih lanjut jika Anda menjalankan perintah berikut:
netstat -aon | find /i "listening" |find "port"
menggunakan perintah 'Temukan' memungkinkan Anda untuk menyaring hasil. find /i "listening"
hanya akan menampilkan porta yang 'Mendengarkan'. Catatan, Anda perlu /i
mengabaikan case, jika tidak, ketikkan "LISTENING". | find "port"
akan membatasi hasil hanya pada yang berisi nomor port tertentu. Catatan, ini juga akan menyaring dalam hasil yang memiliki nomor port di mana saja di string respons.
FIND: Parameter format not correct
. Anda perlu menambahkan spasi setelah kriteria pencarian. Ini akan meninggalkan Anda netstat -aon | find /i "listening" | find "1234 "
.
{back tick}
" mendengarkan {back tick}
"" | menemukan " {back tick}
" port {back tick}
" "(<- perhatikan kutipan yang lolos - maafkan istilah back tick
karena saya tidak dapat menambahkan karakter yang sebenarnya karena dianggap sebagai potongan)
Buka jendela command prompt (sebagai Administrator) Dari "Start \ Search box" Masukkan "cmd" lalu klik kanan pada "cmd.exe" dan pilih "Run as Administrator"
Masukkan teks berikut lalu tekan Enter.
netstat -abno
-a Menampilkan semua koneksi dan port mendengarkan.
-b Menampilkan executable yang terlibat dalam membuat setiap koneksi atau mendengarkan port. Dalam beberapa kasus, executable yang terkenal menjadi tuan rumah beberapa komponen independen, dan dalam kasus ini urutan komponen yang terlibat dalam menciptakan koneksi atau port mendengarkan ditampilkan. Dalam hal ini nama yang dapat dieksekusi ada di [] di bagian bawah, di atas adalah komponen yang disebutnya, dan seterusnya hingga TCP / IP tercapai. Perhatikan bahwa opsi ini dapat memakan waktu dan akan gagal kecuali Anda memiliki izin yang memadai.
-n Menampilkan alamat dan nomor port dalam bentuk numerik.
-o Menampilkan ID proses kepemilikan yang terkait dengan setiap koneksi.
Temukan Port yang Anda dengarkan di bawah "Alamat Lokal"
Lihatlah nama proses langsung di bawah itu.
CATATAN: Untuk menemukan proses di bawah Task Manager
Perhatikan PID (pengidentifikasi proses) di sebelah port yang Anda lihat.
Buka Windows Task Manager.
Pilih tab Proses.
Cari PID yang Anda catat ketika Anda melakukan netstat pada langkah 1.
Jika Anda tidak melihat kolom PID, klik pada kolom Lihat / Pilih. Pilih PID.
Pastikan “Tampilkan proses dari semua pengguna” dipilih.
Gunakan hanya satu perintah:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
di mana 9000
harus diganti dengan nomor port Anda.
The Output akan berisi sesuatu seperti ini:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
Penjelasan:
iterates melalui setiap baris dari output dari perintah berikut:
netstat -aon | findstr 9000
dari setiap baris, PID ( %a
- nama tidak penting di sini) diekstraksi (PID adalah elemen 5
th di baris itu) dan diteruskan ke perintah berikut
tasklist /FI "PID eq 5312"
Jika Anda ingin melewatkan satu sundulan dan kembalinya command prompt , Anda dapat menggunakan:
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
Keluaran:
java.exe 5312 Services 0 130,768 K
findstr :9000
jika tidak, Anda bahkan akan menemukan aplikasi yang berisi angka (misalnya ketika Anda mencari "80" Anda akan menemukan aplikasi di port 80, 800, 8000 juga).
Pertama-tama kita menemukan id proses dari tugas tertentu yang perlu kita hilangkan untuk mendapatkan port gratis:
Tipe
netstat -n -a -o
Setelah mengeksekusi perintah ini di prompt baris perintah Windows (cmd), pilih pid yang saya pikir kolom terakhir. Misalkan ini adalah 3312.
Sekarang ketik
taskkill /F /PID 3312
Anda sekarang dapat memeriksa silang dengan mengetikkan netstat
perintah.
CATATAN: terkadang Windows tidak mengizinkan Anda untuk menjalankan perintah ini langsung pada CMD, jadi pertama-tama Anda harus mengikuti langkah-langkah ini:
Dari menu mulai -> command prompt (klik kanan pada command prompt, dan jalankan sebagai administrator)
Untuk mendapatkan daftar semua ID proses kepemilikan yang terkait dengan setiap koneksi:
netstat -ao |find /i "listening"
Jika ingin membunuh proses apa pun miliki ID dan gunakan perintah ini, sehingga port menjadi bebas
Taskkill /F /IM PID of a process
Sangat mudah untuk mendapatkan nomor port dari PID di Windows.
Berikut ini adalah langkah-langkahnya:
Buka menjalankan → ketik cmd → tekan Enter.
Tulis perintah berikut ...
netstat -aon | findstr [port number]
(Catatan: Jangan sertakan tanda kurung siku.)
Tekan Enter...
Kemudian cmd akan memberi Anda detail layanan yang berjalan di port tersebut bersama dengan PID.
Buka Task Manager dan tekan tab layanan dan cocokkan PID dengan cmd, dan hanya itu.
Cukup buka perintah shell dan ketik (katakan port Anda 123456):
netstat -a -n -o | find "123456"
Anda akan melihat semua yang Anda butuhkan.
Tajuknya adalah:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
Ini seperti yang disebutkan di sini .
findstr 123456
(tanpa tanda kutip) atau find "123456"
(dengan tanda kutip). (@Josh)
Untuk mengetahui proses tertentu (PID) yang menggunakan port mana:
netstat -anon | findstr 1234
Di mana 1234 adalah PID dari proses Anda. [Pergi ke Manajer Tugas → tab Layanan / Proses untuk mengetahui PID aplikasi Anda.]
-n
menetapkan bendera dua kali. -ano
cukup.
Dengan PowerShell 5 di Windows 10 atau Windows Server 2016, jalankan Get-NetTCPConnection
cmdlet. Saya kira itu juga harus bekerja pada versi Windows yang lebih lama.
Output default dari Get-NetTCPConnection
tidak menyertakan ID Proses dengan alasan tertentu dan itu agak membingungkan. Namun, Anda selalu bisa mendapatkannya dengan memformat output. Properti yang Anda cari adalah OwningProcess
.
Jika Anda ingin mengetahui ID proses yang mendengarkan pada port 443, jalankan perintah ini:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
LocalAddress : ::
LocalPort : 443
RemoteAddress : ::
RemotePort : 0
State : Listen
AppliedSetting :
OwningProcess : 4572
CreationTime : 02.11.2016 21:55:43
OffloadState : InHost
Format output ke tabel dengan properti yang Anda cari:
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
LocalAddress LocalPort State OwningProcess
------------ --------- ----- -------------
:: 443 Listen 4572
0.0.0.0 443 Listen 4572
Jika Anda ingin mengetahui nama proses, jalankan perintah ini:
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
143 15 3448 11024 4572 0 VisualSVNServer
Jika Anda ingin menggunakan alat GUI untuk melakukan ini ada TCPView Sysinternals .
Ketikkan perintah: netstat -aon | findstr :DESIRED_PORT_NUMBER
Misalnya, jika saya ingin mencari port 80: netstat -aon | findstr :80
Jawaban ini awalnya dikirim ke pertanyaan ini .
Buka prompt perintah - mulai → Jalankan → cmd
, atau mulai menu → Semua Program → Aksesoris → Prompt Perintah .
Tipe
netstat -aon | findstr '[port_number]'
Ganti [port_number]
dengan nomor port aktual yang ingin Anda periksa dan tekan Enter.
Tipe
tasklist | findstr '[PID]'
Ganti [PID]
dengan nomor dari langkah di atas dan tekan Enter.
netstat -ao
dan netstat -ab
memberi tahu Anda aplikasi, tetapi jika Anda bukan administrator sistem Anda akan mendapatkan "Operasi yang diminta membutuhkan peningkatan".
Ini tidak ideal, tetapi jika Anda menggunakan Proses Explorer Sysinternals Anda dapat pergi ke properti proses tertentu dan melihat pada tab TCP untuk melihat apakah mereka menggunakan port yang Anda minati. Ini sedikit jarum dan tumpukan jerami hal, tapi mungkin itu akan membantu seseorang ...
Saya merekomendasikan CurrPorts dari NirSoft.
CurrPorts dapat memfilter hasil yang ditampilkan. TCPView tidak memiliki fitur ini.
Catatan: Anda dapat mengklik kanan koneksi soket proses dan memilih "Tutup Koneksi TCP yang Dipilih" (Anda juga dapat melakukan ini di TCPView). Ini sering memperbaiki masalah konektivitas yang saya miliki dengan Outlook dan Lync setelah saya beralih VPN. Dengan CurrPorts, Anda juga dapat menutup koneksi dari baris perintah dengan parameter "/ tutup".
Solusi single-line yang membantu saya adalah yang ini. Cukup ganti 3000 dengan port Anda:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
Sunting: Diubah kill
ke Stop-Process
untuk bahasa yang lebih mirip PowerShell
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
Ikuti alat ini: Dari cmd : C:\> netstat -anob
dengan hak istimewa Administrator .
Semua dari sysinternals.com.
Jika Anda hanya ingin tahu proses yang berjalan dan utas di bawah setiap proses, saya sarankan untuk mempelajari wmic
. Ini adalah alat baris perintah yang luar biasa, yang memberi Anda lebih dari yang Anda tahu.
Contoh:
c:\> wmic process list brief /every:5
Perintah di atas akan menampilkan daftar semua proses secara singkat setiap 5 detik. Untuk mengetahui lebih lanjut, Anda bisa menggunakan /?
perintah windows, misalnya,
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
Dan seterusnya dan seterusnya. :)
Menggunakan:
netstat -a -o
Ini menunjukkan PID dari proses yang berjalan pada port tertentu.
Ingat ID proses dan buka Task Manager dan layanan atau tab detail dan akhiri proses yang memiliki PID yang sama.
Dengan demikian Anda dapat mematikan proses yang berjalan pada port tertentu di Windows.
Bagi yang menggunakan PowerShell, coba Get-NetworkStatistics
:
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
Secara terprogram, Anda memerlukan barang dari iphlpapi.h , misalnya GetTcpTable2 (). Struktur seperti MIB_TCP6ROW2 berisi PID pemilik.
Menggunakan PowerShell ... ... ini akan menjadi teman Anda (ganti 8080 dengan nomor port Anda):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
Output sampel
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
Jadi dalam contoh ini tnslsnr.exe (database OracleXE) mendengarkan pada port 8080.
Penjelasan cepat
Select-String
digunakan untuk memfilter keluaran panjang netstat
untuk jalur yang relevan.-Pattern
menguji setiap baris terhadap ekspresi reguler.-Context 0,1
akan menampilkan 0 garis depan dan 1 garis trailing untuk setiap kecocokan pola.Gunakan skrip batch di bawah ini yang mengambil nama proses sebagai argumen dan memberikan netstat
output untuk proses tersebut.
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
Berdasarkan jawaban dengan info dan kill , bagi saya itu berguna untuk menggabungkan mereka dalam satu perintah . Dan Anda dapat menjalankan ini dari cmd untuk mendapatkan informasi tentang proses yang mendengarkan pada port yang diberikan (contoh 8080):
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
Atau jika Anda ingin membunuhnya:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
Anda juga dapat menempatkan perintah itu ke file bat (akan sedikit berbeda - ganti %i
untuk %%i
):
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
Maka Anda dari cmd Anda dapat melakukan ini:
portInfo.bat 8080
atau
portKill.bat 8080
.\portInfo.bat 800
di PowerShell ia memberikan sesuatu seperti ini:C:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
dalam terminal PowerShell, kemudian dieksekusi .\portInfo.bat 8080
. Outputnya hanya isi dari file batch. Sangat mungkin aku menghadap sesuatu. Catatan, saya menggunakan PowerShell 6.2.3 pada Windows 10. Saya juga mencobanya dalam prompt perintah biasa, tetapi hasilnya sama: Output dari isi skrip. Saya yakin saya kehilangan sepotong informasi penting untuk membuat ini bekerja.
/nh
: @tasklist /nh /fi "pid eq %i"
? Dan tepatnya pintu:Findstr ":8080"
Dalam kasus saya port (3000) tidak digunakan sama sekali dan tidak terlihat di netstat. Tapi! Uninstaller Docker untuk Windows telah mengatasi masalah ini.