โปรแกรมไหนกำลังใช้พอร์ตนี้?
เซิร์ฟเวอร์เริ่มทำงานที่พอร์ต 8080 ไม่ได้ หรือการทดสอบหยุดด้วยข้อความ "address already in use" สาเหตุคือมีโปรแกรมจับพอร์ตอยู่แล้ว หรือ Windows สงวนพอร์ตไว้ และข้อผิดพลาดทั้งสองแบบดูคล้ายกันมาก ต่อไปนี้คือวิธีแยกแยะ
สองสาเหตุที่พอร์ตเปิดไม่ได้
| เกิดอะไรขึ้น | ดูเป็นอย่างไร | ควรทำอย่างไร |
|---|---|---|
| มีโปรแกรมจับพอร์ตอยู่ | ข้อผิดพลาดบอกว่าแอดเดรสถูกใช้งานอยู่แล้ว (EADDRINUSE หรือข้อผิดพลาด Windows 10048) และโปรแกรมนั้นจะปรากฏในรายการซ็อกเก็ต | ปิดโปรแกรมนั้น หรือเลือกพอร์ตอื่น |
| Windows สงวนพอร์ตไว้ | ข้อผิดพลาดบอกว่าการเข้าถึงถูกห้าม (ข้อผิดพลาด Windows 10013) ทั้งที่ไม่มีอะไรรับฟังอยู่ และไม่มีโปรแกรมใดปรากฏในรายการ | เลือกพอร์ตนอกช่วงที่สงวนไว้ หรือปล่อยช่วงนั้น การรีสตาร์ตบริการ WinNAT มักช่วยได้ |
ด้วยสิ่งที่ Windows มีอยู่แล้ว
รายการซ็อกเก็ตระบุเจ้าของเป็น ID ของโพรเซส ให้หาพอร์ตก่อน แล้วค่อยหา ID:
netstat -ano | findstr :8080
tasklist /fi "PID eq 4321"
ทำแบบเดียวกันใน PowerShell ได้ทั้ง TCP และ UDP:
Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Get-NetUDPEndpoint -LocalPort 5353 | Select-Object LocalAddress, OwningProcess
Get-Process -Id 4321
ถ้าไม่มีโปรแกรมใดจับพอร์ต ให้ถามว่า Windows สงวนช่วงใดไว้บ้าง:
netsh int ipv4 show excludedportrange protocol=tcp
รันอีกครั้งด้วย protocol=udp ช่วงที่สงวนถูกเก็บแยกตามโปรโตคอล พอร์ตหนึ่งจึงอาจว่างสำหรับ UDP แต่ถูกสงวนสำหรับ TCP
ด้วยแท็บ Tools
แท็บ Tools ตอบคำถามเดียวกันได้โดยไม่ต้องใช้คอนโซล:
- Sockets แสดงซ็อกเก็ต TCP และ UDP ทุกตัวในคอมพิวเตอร์ คล้าย
netstat -anoได้แก่ สิ่งที่กำลังรับฟัง สิ่งที่เชื่อมต่ออยู่ สถานะ และโปรแกรมเจ้าของ ไม่ต้องมีเซสชัน ค้นหาได้ด้วยlport:8080หรือstate:listen - Port check ถามสิ่งที่เซิร์ฟเวอร์ของคุณถาม คือโปรแกรมใช้พอร์ตนี้ได้หรือไม่ พิมพ์ 8080 รายการอย่าง
80, 443หรือช่วงอย่าง9000-9100(สูงสุด 1000 พอร์ต) แล้วกด Check แต่ละพอร์ตจะถูกลองทั้ง TCP และ UDP บน IPv4 และ IPv6 แล้วทำเครื่องหมายเป็น Free, In use (พร้อมโปรแกรมและ PID) หรือ Reserved by Windows
ผลจึงเป็นตาราง ไม่ใช่แค่ใช่หรือไม่ใช่ เพราะ Windows สงวนช่วงแยกตามโปรโตคอล และโปรแกรมที่รับฟังบน IPv6 อาจจับพอร์ตที่ว่างอยู่บน IPv4
ไม่มีอะไรถูกส่งผ่านเครือข่าย สำหรับแต่ละพอร์ต เครื่องมือจะขอพอร์ตจาก Windows บนแอดเดรสลูปแบ็กของคอมพิวเตอร์เอง แล้วคืนทันที
เมื่อรู้แล้วว่าใครจับอยู่
คลิกขวาที่แถวในตารางใดก็ได้เพื่อเลือกโปรแกรมที่จับพอร์ตเป็นเป้าหมาย การทำเช่นนี้เพียงกรอกช่องเป้าหมาย และไม่มีอะไรเปลี่ยนจนกว่าคุณจะกด START ขั้นตอนต่อไปอยู่ที่ เล็งไปที่แอปเดียว
สิ่งที่ไม่ทำ
เครื่องมืออ่านอย่างเดียวและไม่ซ่อมแซม จะไม่ปิดโปรแกรมและไม่ปล่อยช่วงที่สงวนไว้ ซ็อกเก็ตของบัญชีอื่นจะไม่แสดงโปรแกรม เว้นแต่เครื่องมือรันในฐานะผู้ดูแลระบบ