คุณจะทราบได้อย่างไรว่ากระบวนการใดบ้างที่กำลังรับฟังพอร์ตบน Windows


2273

คุณจะทราบได้อย่างไรว่ากระบวนการใดบ้างที่กำลังรับฟังพอร์ตบน Windows


3
Currports เป็นเครื่องมือที่ช่วยค้นหา + ตัวกรองเช่นกันnirsoft.net/utils/cports.html
Blue Clouds

1
ฉันพบปัญหานี้ในขณะที่พยายามเรียกใช้ Tomcat ในโหมดดีบักภายใต้ IntelliJ ทางออกที่ดีที่สุดสำหรับฉันคือเปลี่ยนการตั้งค่าการขนส่ง debug (ไฟล์ -> การตั้งค่า -> Build / exe / deploy-> Debugger) จาก "socket" เป็น "หน่วยความจำที่ใช้ร่วมกัน"
TMN

คำตอบ:


2619

คำตอบใหม่ PowerShell

Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess

คำตอบเก่า cmd

 C:\> netstat -a -b

(เพิ่ม-nเพื่อหยุดการพยายามแก้ไขชื่อโฮสต์ซึ่งจะทำให้เร็วขึ้นมาก)

หมายเหตุ: คำแนะนำเดนมาร์กสำหรับTCPView มันดูมีประโยชน์มาก!

-a แสดงการเชื่อมต่อทั้งหมดและพอร์ตฟัง

-b แสดงที่ปฏิบัติการมีส่วนร่วมในการสร้างการเชื่อมต่อแต่ละหรือฟังพอร์ต ในบางกรณี executables ที่รู้จักกันดีจะมีส่วนประกอบอิสระหลายตัวและในกรณีเหล่านี้จะแสดงลำดับของส่วนประกอบที่เกี่ยวข้องในการสร้างการเชื่อมต่อหรือพอร์ตการฟัง ในกรณีนี้ชื่อที่สามารถเรียกทำงานได้จะอยู่ใน [] ที่ด้านล่างส่วนบนคือคอมโพเนนต์ที่เรียกใช้และอื่น ๆ จนกระทั่งถึง TCP / IP โปรดทราบว่าตัวเลือกนี้อาจใช้เวลานานและจะล้มเหลวเว้นแต่คุณจะมีสิทธิ์ที่เพียงพอ

-n แสดงที่อยู่และหมายเลขพอร์ตในรูปแบบตัวเลข

-o แสดง ID กระบวนการที่เป็นเจ้าของที่เกี่ยวข้องกับการเชื่อมต่อแต่ละครั้ง


252
- เพื่อรับ PID
Laurent K

121
และ taskkill / PID <pid> เพื่อยกเลิกกระบวนการโดยใช้ / F หากเหมาะสม
BitMask777

81
คุณอาจต้องรันเชลล์บรรทัดคำสั่งในฐานะผู้ดูแลระบบมิฉะนั้นคุณอาจได้รับข้อความแสดงข้อผิดพลาดเกี่ยวกับสิทธิ์ที่ไม่เพียงพอ ใช้ตัวเลือก "Run as administrator" เมื่อคลิกขวาที่ cmd.exe
Gruber

6
ใช้งานได้ แต่ต้องได้รับอนุญาตก่อน Shift + คลิกขวาที่ไอคอนคำสั่ง -> เรียกใช้ในฐานะผู้ดูแลระบบ
Christian Bongiorno

18
ต้องมี PID - สมมติว่าเป็น1234- จากนั้นคุณสามารถใช้tasklist /fi "pid eq 1234"เพื่อค้นหาชื่อและรายละเอียดอื่น ๆ ของกระบวนการ
Steve Chambers

2202

มี GUI พื้นฐานสำหรับ Windows:

  • เมนูเริ่ม→ โปรแกรมทั้งหมดอุปกรณ์เสริมเครื่องมือระบบการตรวจสอบทรัพยากร

หรือเรียกใช้ resmon.exeหรือจากแท็บประสิทธิภาพของตัวจัดการงาน

ป้อนคำอธิบายภาพที่นี่


41
ยังแสดงสถานะไฟร์วอลล์ของการรวม (คอลัมน์สุดท้าย) ใช้มาก
กราฟิลส์

8
คุณต้องเป็นผู้ดูแลระบบ (หรือในกลุ่มนั้น) เพื่อเรียกใช้งาน
KrishPrabakar

2
@bcorso สิ่งที่มีผลผูกพันกับ " ที่อยู่ที่ไม่ระบุ " หมายความว่าอย่างไร
Pacerier

5
สามารถเปิดได้จากแท็บประสิทธิภาพของตัวจัดการงานอย่างน้อยใน Windows 10 (ยังไม่ได้ตรวจสอบเวอร์ชั่นอื่น ๆ )
Mathieu K.

10
ความคิดเห็นของ @ user4836454 ด้านบนไม่ถูกต้อง: Resource Monitor ไม่แสดงพอร์ตที่มี listeners แม้ว่าจะไม่มีการเชื่อมต่อเครือข่ายกับพอร์ตเหล่านี้ เพียงแค่ดูในส่วน "ฟังพอร์ต" แทนส่วน "การเชื่อมต่อ TCP"
Jpsy

235

ใช้TCPViewหากคุณต้องการ GUI สำหรับสิ่งนี้ มันเป็นแอปพลิเคชั่นSysinternalsเก่าที่ Microsoft ซื้อมา


9
นี่เป็นตัวเลือกที่ดีที่สุดสำหรับฉันโดยเฉพาะอย่างยิ่งเนื่องจากกระบวนการทั้งหมดอยู่ในรายการเดียวกันและคุณสามารถปิดกระบวนการได้โดยตรงโดยคลิกขวาที่กระบวนการ
Andreas Lundgren

8
นอกจากนี้มันไม่จำเป็นต้องมีผู้ดูแลระบบ!
Janac Meena

222

สำหรับ Windows:

netstat -aon | find /i "listening"

25
+1 โปรดทราบว่าหากหน้าต่างของคุณทำงานในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษคุณจะต้องเปลี่ยน "การฟัง" เป็นคำดั้งเดิม เช่นnetstat -aon | find /i "abhören"ภาษาเยอรมัน
Levite

2
ในกรณีของฉันมันไม่ทำงานอาจเป็นเพราะเครื่องหมายคำพูด แต่โซลูชัน netstat -aon | findstr การรับฟังทำงานได้อย่างสมบูรณ์!
เจ้าพ่อ

สิ่งนี้ใช้ได้โดยไม่ต้องมีสิทธิ์ยกระดับ
Vlad Schnakovszki

1
ฉันได้รับข้อผิดพลาดขณะพยายามเรียกใช้คำสั่งนี้ใน W10 15063.729 ด้วย PowerShell:FIND: Parameter format not correct
Nicke Manarin

1
คำตอบนี้เกี่ยวข้องอย่างไรกับ "ค้นหาว่ากระบวนการใด [ชื่อ] กำลังรับฟังพอร์ตบน Windows"
Pawel Cioch

137

สวิตช์ -b ที่กล่าวถึงในคำตอบส่วนใหญ่ต้องการให้คุณมีสิทธิ์ระดับผู้ดูแลระบบในเครื่อง คุณไม่จำเป็นต้องมีสิทธิ์ยกระดับเพื่อรับชื่อกระบวนการ!

ค้นหา pid ของกระบวนการที่ทำงานในหมายเลขพอร์ต (เช่น 8080)

netstat -ano | findStr "8080"

ค้นหาชื่อกระบวนการโดย pid

tasklist /fi "pid eq 2216"

ค้นหากระบวนการด้วยพอร์ต TCP / IP


82

คุณสามารถรับข้อมูลเพิ่มเติมได้หากคุณเรียกใช้คำสั่งต่อไปนี้:

netstat -aon | find /i "listening" |find "port"

การใช้คำสั่ง 'ค้นหา' ช่วยให้คุณสามารถกรองผลลัพธ์ find /i "listening"จะแสดงเฉพาะพอร์ตที่เป็น 'การฟัง' หมายเหตุคุณต้องใช้ตัว/iพิมพ์เล็กหรือตัวพิมพ์ใหญ่เพื่อหาคำว่า "LISTENING" | find "port"จะ จำกัด ผลลัพธ์เฉพาะที่มีหมายเลขพอร์ตเฉพาะ หมายเหตุเกี่ยวกับสิ่งนี้มันจะกรองผลลัพธ์ที่มีหมายเลขพอร์ตที่ใดก็ได้ในสตริงการตอบสนอง


8
FWIW พยายามที่จะทำงานนี้ใน PowerShell FIND: Parameter format not correctข้อผิดพลาดอัตราผลตอบแทน คุณต้องเพิ่มช่องว่างหลังจากเกณฑ์การค้นหา netstat -aon | find /i "listening" | find "1234 "นี้จะทำให้คุณมี
ตนเอง

2
แทนที่ "พอร์ต" ด้านบนด้วยพอร์ตของคุณเช่น "5000"
jbooker

1
@self ฉันยังคงได้รับข้อผิดพลาดนั้นด้วย PS 5.1 แม้หลังจากเพิ่มพื้นที่หลังจากท่อ คุณรู้หรือไม่ว่าเกิดอะไรขึ้น
Nicke Manarin

2
@NickeManarinin & @self เปลี่ยนแปลงครั้งแรกทั้งจาก PowerShell เพื่อ cmd (เพียงพิมพ์ cmd และกด Enter จากนั้นทำซ้ำคำสั่ง) หรือในการใช้งาน PowerShell คำสั่งนี้แทน: -aon netstat | ค้นหา / i " {back tick}'การฟัง{back tick}'' | หา' {back tick}'พอร์ต{back tick}' "(<- จดบันทึกคำพูดที่หลบหนี - แก้ตัวback tickเพราะฉันไม่สามารถเพิ่มตัวละครที่แท้จริงได้เนื่องจากคิดว่ามันเป็นคำสั่งที่เลวร้าย)
Tristan van Dam

72
  1. เปิดหน้าต่างพรอมต์คำสั่ง (ในฐานะผู้ดูแลระบบ) จาก "Start \ Search box" ป้อน "cmd" จากนั้นคลิกขวาที่ "cmd.exe" แล้วเลือก "Run as Administrator"

  2. ป้อนข้อความต่อไปนี้แล้วกด Enter

    netstat -abno

    -a แสดงการเชื่อมต่อทั้งหมดและพอร์ตฟัง

    -b แสดงที่ปฏิบัติการมีส่วนร่วมในการสร้างการเชื่อมต่อแต่ละหรือฟังพอร์ต ในบางกรณี executables ที่รู้จักกันดีจะมีส่วนประกอบอิสระหลายตัวและในกรณีเหล่านี้จะแสดงลำดับของส่วนประกอบที่เกี่ยวข้องในการสร้างการเชื่อมต่อหรือพอร์ตการฟัง ในกรณีนี้ชื่อที่สามารถเรียกทำงานได้จะอยู่ใน [] ที่ด้านล่างส่วนบนคือคอมโพเนนต์ที่เรียกใช้และอื่น ๆ จนกระทั่งถึง TCP / IP โปรดทราบว่าตัวเลือกนี้อาจใช้เวลานานและจะล้มเหลวเว้นแต่คุณจะมีสิทธิ์ที่เพียงพอ

    -n แสดงที่อยู่และหมายเลขพอร์ตในรูปแบบตัวเลข

    -o แสดง ID กระบวนการที่เป็นเจ้าของที่เกี่ยวข้องกับการเชื่อมต่อแต่ละครั้ง

  3. ค้นหาพอร์ตที่คุณกำลังฟังภายใต้ "ที่อยู่ในพื้นที่"

  4. ดูที่ชื่อกระบวนการโดยตรงภายใต้

หมายเหตุ: เพื่อค้นหากระบวนการภายใต้ตัวจัดการงาน

  1. บันทึก PID (ตัวระบุกระบวนการ) ถัดจากพอร์ตที่คุณกำลังดู

  2. เปิดตัวจัดการงานของ Windows

  3. เลือกแท็บกระบวนการ

  4. ค้นหา PID ที่คุณจดบันทึกไว้เมื่อคุณทำ netstat ในขั้นตอนที่ 1

    • หากคุณไม่เห็นคอลัมน์ PID ให้คลิกที่มุมมอง / เลือกคอลัมน์ เลือก PID

    • ตรวจสอบให้แน่ใจว่าได้เลือก“ แสดงกระบวนการจากผู้ใช้ทั้งหมด”


56

รับ PID และชื่อภาพ

ใช้เพียงคำสั่งเดียว:

for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"

ตำแหน่งที่9000ควรแทนที่ด้วยหมายเลขพอร์ตของคุณ

การส่งออกจะมีบางสิ่งบางอย่างเช่นนี้

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
java.exe                      5312 Services                   0    130,768 K

คำอธิบาย:

  • มันวนซ้ำทุกบรรทัดจากเอาต์พุตของคำสั่งต่อไปนี้:

    netstat -aon | findstr 9000
    
  • จากทุกบรรทัด PID ( %a- ชื่อไม่สำคัญที่นี่) จะถูกแยกออก (PID เป็นองค์ประกอบ5thในบรรทัดนั้น) และส่งผ่านไปยังคำสั่งต่อไปนี้

    tasklist /FI "PID eq 5312"
    

หากคุณต้องการที่จะข้ามส่วนหัวและผลตอบแทนของพร้อมรับคำสั่งคุณสามารถใช้:

echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on

เอาท์พุท:

java.exe                      5312 Services                   0    130,768 K

2
คำตอบที่ดี แต่คุณควรเปลี่ยนเป็นfindstr :9000ถ้าไม่คุณจะพบแอพที่มีหมายเลข (เช่นเมื่อคุณค้นหา "80" คุณจะพบแอปที่พอร์ต 80, 800, 8000 ด้วย)
Radon8472

48

ก่อนอื่นเราหา id กระบวนการของงานนั้น ๆ ซึ่งเราต้องกำจัดเพื่อให้พอร์ตว่าง:

ชนิด

netstat -n -a -o

หลังจากรันคำสั่งนี้ในพรอมต์บรรทัดคำสั่งของ Windows (cmd) ให้เลือก pid ซึ่งฉันคิดว่าคอลัมน์สุดท้าย สมมติว่านี่คือ 3312

ตอนนี้พิมพ์

taskkill /F /PID 3312

ตอนนี้คุณสามารถข้ามการตรวจสอบโดยพิมพ์netstatคำสั่ง

หมายเหตุ: บางครั้ง Windows ไม่อนุญาตให้คุณเรียกใช้คำสั่งนี้โดยตรงบน CMD ดังนั้นก่อนอื่นคุณต้องทำตามขั้นตอนเหล่านี้:

จากเมนูเริ่ม -> พรอมต์คำสั่ง (คลิกขวาที่พร้อมรับคำสั่งและเรียกใช้ในฐานะผู้ดูแลระบบ)


30

ในการรับรายการ ID กระบวนการทั้งหมดที่เกี่ยวข้องกับการเชื่อมต่อแต่ละรายการ:

netstat -ao |find /i "listening"

หากต้องการฆ่ากระบวนการใด ๆ มี ID และใช้คำสั่งนี้เพื่อให้พอร์ตว่าง

Taskkill /F /IM PID of a process

1
นี่ไม่ได้หมายถึงการฟังพอร์ต UDP
evandrix

27

มันง่ายมากที่จะได้รับหมายเลขพอร์ตจาก PID ใน Windows

ต่อไปนี้เป็นขั้นตอน:

  1. ไปทำงาน→พิมพ์ cmd Enterกด→

  2. เขียนคำสั่งต่อไปนี้ ...

    netstat -aon | findstr [port number]
    

    (หมายเหตุ: ไม่รวมวงเล็บเหลี่ยม)

  3. กดEnter...

  4. จากนั้น cmd จะให้รายละเอียดของบริการที่ใช้งานบนพอร์ตนั้นพร้อมกับ PID

  5. เปิดตัวจัดการงานและกดแท็บบริการแล้วจับคู่ PID กับของ cmd และนั่นคือมัน


18

เพียงเปิดเชลล์คำสั่งแล้วพิมพ์ (บอกว่าพอร์ตของคุณคือ 123456):

netstat -a -n -o | find "123456"

คุณจะเห็นทุกสิ่งที่คุณต้องการ

ส่วนหัวคือ:

 Proto  Local Address          Foreign Address        State           PID
 TCP    0.0.0.0:37             0.0.0.0:0              LISTENING       1111

นี้จะเป็นที่กล่าวถึงที่นี่


1
FYI / สำหรับทุกคนที่สนใจ: เป็นfindstr 123456(โดยไม่ต้องใส่เครื่องหมายคำพูด) หรือfind "123456"(พร้อมเครื่องหมายคำพูด) (@Josh)
Kevin Cruijssen

18

หากต้องการค้นหากระบวนการเฉพาะ (PID) ที่ใช้พอร์ตใด:

netstat -anon | findstr 1234

ที่ 1234 เป็น PID ของกระบวนการของคุณ [ไปที่ตัวจัดการงาน→บริการ / กระบวนการแท็บเพื่อค้นหา PID ของแอปพลิเคชันของคุณ]


1
ควรสังเกตว่าคุณไม่จำเป็นต้อง-nตั้งค่าสถานะสองครั้ง -anoก็เพียงพอแล้ว
mwieczorek

16

ด้วย PowerShell 5 บน Windows 10 หรือ Windows Server 2016 ให้เรียกใช้Get-NetTCPConnectioncmdlet ฉันเดาว่ามันน่าจะใช้ได้กับ Windows รุ่นเก่ากว่าด้วย

เอาต์พุตเริ่มต้นของGet-NetTCPConnectionไม่รวม ID กระบวนการด้วยเหตุผลบางอย่างและทำให้เกิดความสับสนเล็กน้อย อย่างไรก็ตามคุณสามารถรับได้โดยการจัดรูปแบบผลลัพธ์ OwningProcessสถานที่ให้บริการที่คุณกำลังมองหาอยู่

  • หากคุณต้องการค้นหา ID ของกระบวนการที่กำลังรับฟังพอร์ต 443 ให้รันคำสั่งนี้:

    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
    
  • จัดรูปแบบเอาต์พุตไปยังตารางด้วยคุณสมบัติที่คุณค้นหา:

    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
    
  • หากคุณต้องการค้นหาชื่อของกระบวนการให้รันคำสั่งนี้:

    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
    


13

พิมพ์คำสั่ง: netstat -aon | findstr :DESIRED_PORT_NUMBER

ตัวอย่างเช่นหากฉันต้องการค้นหาพอร์ต 80: netstat -aon | findstr :80

คำตอบนี้เดิมถูกโพสต์ในคำถามนี้


11

netstat:

  • - แสดงการเชื่อมต่อและพอร์ตการฟังทั้งหมด
  • -b แสดง executables
  • -n หยุดการแก้ไขชื่อโฮสต์ (แบบตัวเลข)
  • - เป็นเจ้าของกระบวนการ

    netstat -bano | findstr "7002"
    
    netstat -ano > ano.txt 
    

CurrPortsเครื่องมือที่ช่วยในการค้นหาและกรอง


11
  1. เปิดคำสั่งพรอมต์ - เริ่มต้น→ Runcmdหรือเมนู→เริ่มต้นโปรแกรมทั้งหมดอุปกรณ์เสริมCommand Prompt

  2. ชนิด

    netstat -aon | findstr '[port_number]'
    

แทนที่ด้วยหมายเลขพอร์ตที่เกิดขึ้นจริงที่คุณต้องการตรวจสอบและตี[port_number]Enter

  1. หากมีการใช้พอร์ตโดยแอปพลิเคชันใด ๆ รายละเอียดของแอปพลิเคชันนั้นจะปรากฏขึ้น หมายเลขซึ่งแสดงที่คอลัมน์สุดท้ายของรายการคือ PID (ID กระบวนการ) ของแอปพลิเคชันนั้น จดบันทึกสิ่งนี้
  2. ชนิด

    tasklist | findstr '[PID]'
    

แทนที่ด้วยหมายเลขจากขั้นตอนข้างต้นและตี[PID]Enter

  1. คุณจะเห็นชื่อแอปพลิเคชันที่ใช้หมายเลขพอร์ตของคุณ

3
ใน Win 10: คำสั่งของคุณในขั้นตอนที่ 2 และขั้นตอนที่ 4 ไม่ทำงานเว้นแต่คุณจะแทนที่คำพูดธรรมดาโดยใช้เครื่องหมายคำพูดคู่ ควรบอกว่า netstat-aon | findstr "[port_number]"
Leonardo Lopez

โซลูชันนี้ไม่ต้องได้รับอนุญาตจากผู้ดูแล Tks!
Totalys

10

netstat -aoและnetstat -abบอกแอปพลิเคชันให้คุณทราบ แต่ถ้าคุณไม่ใช่ผู้ดูแลระบบคุณจะได้รับ "การดำเนินการที่ร้องขอต้องมีระดับความสูง"

มันไม่เหมาะ แต่ถ้าคุณใช้ Sysinternals ' Process Explorerคุณสามารถไปที่คุณสมบัติของกระบวนการที่เฉพาะเจาะจงและดูที่แท็บ TCP เพื่อดูว่าพวกเขากำลังใช้พอร์ตที่คุณสนใจหรือไม่มันเป็นเรื่องง่าย แต่บางทีมันอาจจะช่วยใครซักคน ...


หากคุณไม่ใช่ผู้ดูแลระบบคุณจะไม่สามารถใช้ Process Explorer (หรือแม้แต่ Windows Task Manager> Resource Manager) เพื่อรับข้อมูลนี้จากกระบวนการใด ๆ ที่ไม่ใช่ของคุณเพื่อเริ่มต้น
Abel

9

ฉันแนะนำCurrPortsจาก NirSoft

CurrPort สามารถกรองผลลัพธ์ที่แสดง TCPViewไม่มีคุณสมบัตินี้

หมายเหตุ: คุณสามารถคลิกขวาที่การเชื่อมต่อซ็อกเก็ตของกระบวนการและเลือก "ปิดการเชื่อมต่อ TCP ที่เลือก" (คุณสามารถทำได้ใน TCPView) ซึ่งมักจะแก้ไขปัญหาการเชื่อมต่อที่ฉันมีกับ Outlook และ Lync หลังจากฉันสลับ VPN ด้วย CurrPorts คุณสามารถปิดการเชื่อมต่อจากบรรทัดคำสั่งด้วยพารามิเตอร์ "/ close"


7

โซลูชันบรรทัดเดียวที่ช่วยฉันคืออันนี้ เพียงแทนที่ 3000 ด้วยพอร์ตของคุณ:

$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id

แก้ไข: เปลี่ยนkillเป็นStop-Processภาษาที่เหมือน PowerShell มากขึ้น


6
คุณอาจไม่ต้องการฆ่ากระบวนการโดยอัตโนมัติ ฉันจะแยกคำสั่ง kill นั้นและอธิบายมัน ไม่ต้องการให้ผู้ใช้บางคนคัดลอกข้อมูลที่น่าสงสารโดยไม่ได้คิดอย่างรอบคอบ
TinkerTenorSoftwareGuy

1
และหากคุณกำลังจะเปลี่ยนวิธีการแก้ปัญหา PowerShell อย่างเต็มรูปแบบให้เปลี่ยนเป็น Stop-Process Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
CubanX

6

ทำตามเครื่องมือเหล่านี้: จากcmd : C:\> netstat -anobด้วยสิทธิ์ของผู้ดูแลระบบ

Process Explorer

กระบวนการถ่ายโอนข้อมูล

การตรวจสอบพอร์ต

ทั้งหมดจาก sysinternals.com

wmicถ้าคุณเพียงต้องการที่จะรู้ว่าขั้นตอนการทำงานและหัวข้อในแต่ละขั้นตอนผมแนะนำให้เรียนรู้เกี่ยวกับ มันเป็นเครื่องมือบรรทัดคำสั่งที่ยอดเยี่ยมซึ่งให้มากกว่าที่คุณรู้

ตัวอย่าง:

c:\> wmic process list brief /every:5

คำสั่งดังกล่าวจะแสดงรายการกระบวนการทั้งหมดโดยย่อทุก 5 วินาที หากต้องการทราบข้อมูลเพิ่มเติมคุณสามารถไปกับ/?คำสั่งของ windows ตัวอย่างเช่น

c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?

และอื่น ๆ และอื่น ๆ. :)


PortMon (ลิงค์ด้านหลัง Port Monitor) ใช้สำหรับตรวจสอบพอร์ตอนุกรมและพอร์ตขนานไม่ใช่พอร์ตเครือข่าย
เจมส์

6

ใช้:

netstat -a -o

สิ่งนี้แสดง PID ของกระบวนการที่ทำงานบนพอร์ตเฉพาะ

โปรดทราบ ID กระบวนการและไปที่ตัวจัดการงานและบริการหรือแท็บรายละเอียดและสิ้นสุดกระบวนการที่มี PID เดียวกัน

ดังนั้นคุณสามารถฆ่ากระบวนการที่ทำงานบนพอร์ตเฉพาะใน Windows


6

สำหรับผู้ที่ใช้ PowerShell ให้ลอง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


5

ใช้ PowerShell ... นี่จะเป็นเพื่อนของคุณ (แทนที่ 8080 ด้วยหมายเลขพอร์ตของคุณ):

 netstat -abno | Select-String -Context 0,1 -Pattern 8080

ตัวอย่างผลลัพธ์

>   TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING         2920
   [tnslsnr.exe]
>   TCP    [::]:8080              [::]:0                 LISTENING         2920
   [tnslsnr.exe]

ดังนั้นในตัวอย่างนี้ tnslsnr.exe (ฐานข้อมูล OracleXE) กำลังฟังบนพอร์ต 8080

คำอธิบายด่วน

  • Select-Stringใช้สำหรับกรองเอาต์พุตที่มีความยาวของnetstatสำหรับบรรทัดที่เกี่ยวข้อง
  • -Pattern ทดสอบแต่ละบรรทัดกับนิพจน์ทั่วไป
  • -Context 0,1 จะส่งออก 0 นำเส้นและ 1 เส้นต่อท้ายสำหรับแต่ละรูปแบบการแข่งขัน

2

สำหรับ Windows หากคุณต้องการค้นหาสิ่งที่ฟังหรือเชื่อมต่อกับพอร์ต 1234 ให้ดำเนินการดังต่อไปนี้ที่พรอมต์คำสั่ง:

netstat -na | find "1234"

1

ใช้สคริปต์ชุดด้านล่างซึ่งใช้ชื่อกระบวนการเป็นอาร์กิวเมนต์และให้netstatผลลัพธ์สำหรับกระบวนการ

@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

1

ขึ้นอยู่กับคำตอบที่มีข้อมูลและฆ่าสำหรับฉันมันมีประโยชน์ที่จะรวมพวกเขาในคำสั่งเดียว และคุณสามารถเรียกใช้จาก cmd เพื่อรับข้อมูลเกี่ยวกับกระบวนการที่ฟังพอร์ตที่กำหนด (ตัวอย่าง 8080):

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"

หรือถ้าคุณต้องการที่จะฆ่ามัน:

for /f "tokens=3 delims=LISTENING" %i  in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i

คุณยังสามารถใส่คำสั่งเหล่านั้นลงในไฟล์ bat (คำสั่งเหล่านั้นจะแตกต่างกันเล็กน้อย - แทนที่%iสำหรับ%%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

จากนั้นคุณจาก cmd คุณสามารถทำสิ่งนี้:

portInfo.bat 8080

หรือ

portKill.bat 8080


1
นี่อาจเป็นสคริปต์ที่มีประโยชน์ อย่างไรก็ตามฉันลองใช้งานใน CMD เช่นเดียวกับ PowerShell 6 ที่ไม่มีโชค บางทีคุณสามารถปรับปรุงคำตอบของคุณโดยการให้รายละเอียดเพิ่มเติมเล็กน้อย
Manfred

ส่วนแรกทำงานหรือไม่ มันเป็นปัญหาเฉพาะกับ "ค้างคาว" หรือไม่? ตัวแปรการส่งผ่านมีความแตกต่าง: (%% i)
lczapski

@ Manfred ฉันได้ลองสิ่งนี้บน Windows 3 ที่แตกต่างกัน 10 ตัวอย่างเช่น.\portInfo.bat 800ใน PowerShell มันให้อะไรแบบนี้: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
lczapski

ขออภัยไม่มีโชค ฉันใส่คำสั่งที่เป็น fiile ที่มีชื่อportInfo.batใน terminal PowerShell .\portInfo.bat 8080ที่ดำเนินการแล้ว ผลลัพธ์เป็นเพียงเนื้อหาของแบตช์ไฟล์ ฉันสามารถมองเห็นบางสิ่งได้ดีมาก หมายเหตุฉันใช้ PowerShell 6.2.3 บน Windows 10 ฉันลองใช้ด้วยพรอมต์คำสั่งปกติ แต่ผลลัพธ์ก็เหมือนกัน: ผลลัพธ์ของเนื้อหาของสคริปต์ ฉันแน่ใจว่าฉันขาดข้อมูลที่สำคัญในการทำงานนี้
Manfred

1
ทำไมไม่เพิ่ม/nh: @tasklist /nh /fi "pid eq %i"? และประตูอย่างแม่นยำ:Findstr ":8080"
ไม่ใช่ฉันที่

0

ในกรณีของฉันพอร์ต (3000) ไม่ได้ใช้เลยและมองไม่เห็นใน netstat แต่! โปรแกรมถอนการติดตั้ง Docker สำหรับ Windows แก้ปัญหาได้แล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.