netstat với tên quá trình?


46

Sử dụng netstat -a -o -n tôi có thể nhận được danh sách các cổng và PID

sau đó tôi cần phải đi đến trình quản lý tác vụ và thêm PID và xem nó là ai. (khá bực bội)

nhập mô tả hình ảnh ở đây

Tôi đã ngạc nhiên nếu có một lệnh CMD mà sẽ làm tất cả (sử dụng find, for, powershell)

để tôi có thể có được tên quy trình


netstat -b là quản trị viên, ví dụ netstat -abon. Và tên của exe ở bên dưới
barlop

Câu trả lời:


56

Giải pháp

Sử dụng -btham số:

  -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.

Lưu ý Các netstat -blệnh sẽ thất bại trừ khi chạy từ một lệnh nâng lên nhanh chóng.

Cách giải quyết

Lọc danh sách quy trình và tìm ra PID mà bạn quan tâm:

tasklist | findstr /c:"PID"  


Giải pháp thay thế

Bạn có thể sử dụng Tcpvcon.exethay thế. Không có quyền quản trị cần thiết.

Việc sử dụng Tcpvcon tương tự như netstattiện ích Windows tích hợp .

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
bạn là người đàn ông
Royi Namir

câu trả lời tốt, chỉ cần bình luận rằng tôi nghĩ thật thú vị làm thế nào ms /? tài liệu thậm chí còn nói rằng "tùy chọn này có thể tốn thời gian"! và nó hoàn toàn là một sự ngu ngốc của các cửa sổ mà nó tốn thời gian. Netstat của Linux hiện tên thực thi của nó hiển thị nhanh. Và tên thực thi của linux cũng hiển thị không yêu cầu quyền root / admin
barlop

8

Tôi nghĩ rằng bạn đang tìm kiếm TCPView từ SysIternals.


Tôi đã tự hỏi nếu có một lệnh CMD làm tất cả
Royi Namir

Tiếp tục - Có một thành phần dòng lệnh của TCPView ..
Leptonator

ồ được thôi. nghĩ rằng có lẽ ai đó đã thực hiện nó bằng cách sử dụng, tìm, v.v.
Royi Namir

Nó không quá khó để làm .. Tôi cá là robvanderwoude.com có cái gì đó trên đó. Trên trang TCPView - "Tải xuống TCPView bao gồm Tcpvcon, phiên bản dòng lệnh có cùng chức năng."
Leptonator

Bộ công cụ rất tốt .. nếu nó không dành cho msys và tôi sẽ sử dụng hộp nix. :)
Eddie B

2

Dưới đây là một ví dụ cho các cửa sổ sử dụng FORđể phân tích netstatđầu ra sau đó DO tasklistvới /fibộ lọc trên pid để hiển thị tên quy trình.

Phát hiện cuối cùng là loại bỏ tasklistcác tiêu đề.

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

in hồ sơ đầu ra như

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

Các trường bổ sung từ netstatcó thể được thêm bằng cách thêm mã thông báo.


Ưu điểm của giải pháp này bao gồm: 1. sử dụng findđể lọc các cổng (ngược lại, mặc dù netstat -bcó thể cung cấp tên quy trình trực tiếp, nhưng đi qua đầu ra của nó để tìm kiếm thủ công là đau đớn và dễ bị lỗi); 2. chỉ sử dụng các lệnh gốc của Windows, đó là linh hoạt và độc lập hơn.
Yingyu BẠN

1
Cải thiện có thể: 1. sử dụng findstrvới /Rtùy chọn thay vì findsử dụng regex để tìm kiếm tốt hơn; 2. để sử dụng :443 *[[0-9]"làm mẫu để chỉ lọc ra cổng cục bộ . Toàn bộ mệnh lệnh có thể làFOR /F "usebackq tokens=5 delims= " %i IN (`netstat -ano ^|findstr /R /C:":443 *[[0-9]"`) DO @tasklist /fi "pid eq %i" | findstr "%i"
Yingyu YOU

@DavidPostill hoặc @mark Bạn có thể làm rõ "Có thể thêm các trường bổ sung từ netstatbằng cách thêm mã thông báo không?"?
Yves Schelpe

2

Nếu bạn thích sử dụng PS, bạn có thể rẽ nhánh mã này (lưu ý: nó siêu cơ bản)

$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)"
}

Lưu ý rằng bạn có thể thử Paththay vì ProcessNameđể có một đường dẫn thực thi đầy đủ - mặc dù vậy nó sẽ không hoạt động với các dịch vụ hệ thống. Ngoài ra, bạn có thể muốn nối thêm ProcessNamevào cuối dòng thay vì thay thế giá trị PID.

Tận hưởng đi;)


1

Hãy thử sử dụng ...

Tên quy trình với dấu thời gian :) trong oneliner ... không cần kịch bản nhanh và dễ dàng ...

Bạn có thể thay đổi param SYN_SENT bằng cách THÀNH LẬP hoặc LẮNG NGHE

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

Tôi đã sử dụng điều này với một mẫu trên ip: port tôi muốn quan sát. Đoạn trích tuyệt vời!
Alex

0

Erik Bitemo rất đẹp! Tôi đã nghĩ đến việc thêm một biến cho đường dẫn sau đó tôi nhận ra bạn đã có nó mặc dù nó không được xác định. Vì vậy, mã tôi sử dụng lại là:

$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*"}
     }

Tôi đã cố gắng tìm các quy trình và dịch vụ cho một ứng dụng mà tôi đã sử dụng 2 lớp lót khác nhau.

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

Tôi đã chỉnh sửa câu hỏi của Erik để bao gồm sửa lỗi của bạn, vì vậy nếu bạn muốn, bạn có thể xóa nó khỏi câu trả lời của mình và tập trung vào cách tiếp cận của bạn với GetServiceGet-Process.
flolilo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.