Chương trình nào đang dùng cổng này?
Máy chủ không khởi động được trên cổng 8080, hoặc bài kiểm tra dừng với "address already in use". Hoặc là một chương trình đã giữ cổng, hoặc là Windows đã dành riêng nó, và hai lỗi trông rất giống nhau. Đây là cách phân biệt.
Hai lý do một cổng không mở được
| Chuyện gì đã xảy ra | Biểu hiện | Nên làm gì |
|---|---|---|
| Một chương trình đang giữ cổng | Lỗi báo địa chỉ đã được sử dụng (EADDRINUSE, hoặc lỗi Windows 10048). Chương trình đó xuất hiện trong danh sách socket. | Đóng chương trình đó hoặc chọn cổng khác. |
| Windows đã dành riêng cổng | Lỗi báo bị cấm truy cập (lỗi Windows 10013) dù không có gì đang lắng nghe. Không có chương trình nào trong danh sách. | Chọn cổng ngoài dải đã dành riêng, hoặc giải phóng dải đó. Khởi động lại dịch vụ WinNAT thường là đủ. |
Bằng những gì Windows đã có
Danh sách socket cho biết chủ sở hữu dưới dạng ID tiến trình. Hãy tìm cổng, rồi tìm ID:
netstat -ano | findstr :8080
tasklist /fi "PID eq 4321"
Tương tự trong PowerShell, cho cả TCP và UDP:
Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Get-NetUDPEndpoint -LocalPort 5353 | Select-Object LocalAddress, OwningProcess
Get-Process -Id 4321
Nếu không chương trình nào giữ cổng, hãy hỏi những dải nào Windows đã dành riêng:
netsh int ipv4 show excludedportrange protocol=tcp
Chạy lại với protocol=udp. Các dải được lưu theo từng giao thức, nên một cổng có thể trống với UDP mà bị dành riêng với TCP.
Bằng thẻ Tools
Thẻ Tools trả lời cùng những câu hỏi đó mà không cần console:
- Sockets liệt kê mọi socket TCP và UDP trên máy, giống
netstat -ano: cái gì đang lắng nghe, cái gì đã kết nối, trạng thái ra sao và chương trình nào sở hữu. Không cần phiên chạy. Tìm kiếm bằnglport:8080hoặcstate:listen. - Port check hỏi điều mà máy chủ của bạn đã hỏi: một chương trình có dùng được cổng này không? Nhập 8080, một danh sách như
80, 443hoặc một dải như9000-9100(tối đa 1000 cổng) rồi nhấn Check. Mỗi cổng được thử cho TCP và UDP, trên IPv4 và IPv6, rồi đánh dấu là Free, In use (kèm chương trình và PID) hoặc Reserved by Windows.
Vì vậy câu trả lời là một bảng chứ không phải có hoặc không: Windows dành riêng các dải theo từng giao thức, và một chương trình lắng nghe trên IPv6 có thể giữ một cổng đang trống trên IPv4.
Không có gì được gửi qua mạng. Với mỗi cổng, công cụ xin Windows cổng đó trên địa chỉ loopback của chính máy rồi trả lại ngay.
Khi đã biết ai đang giữ
Nhấp chuột phải vào một dòng ở một trong hai bảng để nhắm vào chương trình đang giữ cổng. Việc này chỉ điền vào ô mục tiêu, và không có gì thay đổi cho đến khi bạn nhấn START. Bước tiếp theo nằm ở nhắm vào một ứng dụng.
Những gì nó không làm
Nó chỉ đọc, không sửa: không bao giờ đóng chương trình hay giải phóng dải đã dành riêng. Socket của tài khoản khác không hiện chương trình, trừ khi công cụ chạy với quyền quản trị.