netstat dengan nama proses?


46

Menggunakan netstat -a -o -n saya bisa mendapatkan daftar port dan PID

maka saya harus pergi ke task manager dan menambahkan PID dan melihat siapa itu. (Cukup frustasi)

masukkan deskripsi gambar di sini

Aku heran jika ada perintah CMD yang melakukan itu semua (menggunakan find, for, powershell)

sehingga saya bisa mendapatkan nama proses


netstat -b sebagai admin, mis. netstat -abon. Dan nama exe di bawah ini
barlop

Jawaban:


56

Larutan

Gunakan -bparameter:

  -b            Displays the executable involved in creating each connection or
                listening port. In some cases well-known executables host
                multiple independent components, and in these cases the
                sequence of components involved in creating the connection
                or listening port is displayed. In this case the executable
                name is in [] at the bottom, on top is the component it called,
                and so forth until TCP/IP was reached. Note that this option
                can be time-consuming and will fail unless you have sufficient
                permissions.

Catatan The netstat -bperintah akan gagal kecuali lari dari perintah ditinggikan prompt.

Penanganan masalah

Saring daftar proses dan temukan PID yang Anda minati:

tasklist | findstr /c:"PID"  


Solusi alternatif

Anda bisa menggunakannya Tcpvcon.exe. Tidak diperlukan hak admin.

Penggunaan Tcpvcon mirip dengan netstatutilitas Windows bawaan.

Usage: tcpvcon [-a] [-c] [-n] [process name or PID]

 -a Show all endpoints (default is to show established TCP connections).
 -c Print output as CSV.
 -n Don't resolve addresses.

1
kamulah orangnya.
Royi Namir

jawaban yang bagus, hanya berkomentar saya pikir itu lucu bagaimana ms /? dokumentasi bahkan mengatakan "opsi ini dapat menghabiskan waktu"! dan itu murni kebodohan windows yang memakan waktu. Netstat Linux menampilkan nama yang dapat dieksekusi dengan cepat. Dan juga menunjukkan nama yang dapat dieksekusi linux tidak memerlukan hak akses root / admin
barlop

8

Saya pikir Anda mencari TCPView dari SysInternals.


Saya heran jika ada perintah CMD yang melakukan semuanya
Royi Namir

Teruskan - Ada komponen baris perintah TCPView ..
Leptonator

Oh oke. pikir mungkin seseorang sudah melakukannya menggunakan untuk, menemukan dll
Royi Namir

Seharusnya tidak terlalu sulit untuk dilakukan .. Saya berani bertaruh robvanderwoude.com memiliki sesuatu di atasnya. Per Halaman TCPView - "Unduhan TCPView menyertakan Tcpvcon, versi baris perintah dengan fungsi yang sama."
Leptonator

Suite alat yang sangat bagus .. jika bukan untuk msys dan sis saya akan menggunakan kotak nix. :)
Eddie B

2

Berikut ini adalah contoh untuk windows yang menggunakan FORparse netstatoutput kemudian DO tasklistdengan /fifilter pada pid untuk menunjukkan nama proses.

Temuan terakhir adalah menghapus tasklisttajuk.

FOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|find "443"`) DO @tasklist /fi "pid eq %i" | find "%i"

mencetak rekaman seperti

tomcat8.exe.x64               4240 Services                   0    931,864 K

Bidang tambahan dari netstatdapat ditambahkan dengan menambahkan token.


Kelebihan dari solusi ini termasuk: 1. menggunakan finduntuk menyaring port (sebaliknya, meskipun netstat -bdapat memberikan nama proses secara langsung, tetapi melalui outputnya untuk mencari secara manual adalah menyakitkan dan rawan kesalahan); 2. hanya menggunakan perintah asli Windows, yang lebih fleksibel dan independen.
Yingyu YOU

1
Kemungkinan peningkatan: 1. digunakan findstrdengan /Ropsi alih-alih findmemanfaatkan regex untuk pencarian yang lebih baik; 2. digunakan :443 *[[0-9]"sebagai pola untuk menyaring port lokal saja. Seluruh perintah bisa jadiFOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|findstr /R /C:":443 *[[0-9]"`) DO @tasklist /fi "pid eq %i" | findstr "%i"
Yingyu ANDA

@DavidPostill atau @mark Bisakah Anda mengklarifikasi "Kolom tambahan dari netstatdapat ditambahkan dengan menambahkan token."?
Yves Schelpe

2

Jika Anda suka menggunakan PS, Anda dapat menggunakan kode ini (perhatikan: ini super-basic)

$nets = netstat -ano | select-string LISTENING
foreach($n in $nets){
    # make split easier PLUS make it a string instead of a match object:
    $p = $n -replace ' +',' '
    # make it an array:
    $nar = $p.Split(' ')
    # pick last item:
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path
    # print the modified line with processname instead of PID:
    $n -replace "$($nar[-1])","$($ppath) $($pname)"
}

Perhatikan bahwa Anda dapat mencoba Pathalih-alih ProcessNamemendapatkan jalur yang dapat dieksekusi penuh - namun tidak akan bekerja dengan layanan sistem. Juga, Anda mungkin ingin menambahkan ProcessNameke akhir baris alih-alih mengganti nilai PID.

Bersenang senang lah ;)


1

Coba gunakan ini ...

Nama proses dengan cap waktu :) di oneliner ... tidak perlu skrip cepat dan mudah ...

Anda dapat mengubah param SYN_SENT dengan ESTABLISHED atau MENDENGARKAN

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern LISTENING|timestamp

filter timestamp {"$(Get-Date -Format G): $_"};netstat -abno 1 | Select-String -Context 0,1 -Pattern SYN_SENT|timestamp

Saya menggunakan ini dengan pola pada ip: port yang ingin saya amati. Cuplikan hebat!
Alex

0

Erik Bitemo sangat bagus! Saya berpikir untuk menambahkan variabel untuk path lalu saya sadar Anda sudah memilikinya meskipun tidak didefinisikan. Jadi kode yang saya gunakan kembali adalah:

$nets = netstat -ano |select-string LISTENING;
foreach ($n in $nets)
    {
# make split easier PLUS make it a string instead of a match object
    $p = $n -replace ' +',' ';
# make it an array
    $nar = $p.Split(' ')
# pick last item...
    $pname = $(Get-Process -id $nar[-1]).ProcessName
    $ppath = $(Get-Process -id $nar[-1]).Path;
# print the modified line with processname instead of PID
    $n -replace "$($nar[-1])","$($ppath) $($pname)" | where {$pname -like "*GMSVP*"}
     }

Saya mencoba menemukan proses dan layanan untuk aplikasi di mana saya menggunakan 2 liner yang agak berbeda.

Get-Service | select status,name,displayname,servicename | where {($_.DisplayName -like "myserv*") -or ($_.servicename -like "post*")} | ft -auto

Get-Process | select id, processname,cpu,path,description | where {$_.path -like "*myserv*"} | ft -auto

Saya mengedit pertanyaan Erik untuk memasukkan perbaikan Anda, jadi jika Anda mau, Anda bisa menghapusnya dari jawaban Anda dan berkonsentrasi pada pendekatan Anda dengan GetServicedan Get-Process.
flolilo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.