Nếu tôi muốn tìm hiểu quá trình đang lắng nghe trên socket nào, tôi có thể sử dụng netstat / TCPview và sẽ thấy ngay lập tức. Tuy nhiên, có thể liên kết với một địa chỉ mà không cần nghe. Nếu điều này được thực hiện, nó không hiển thị trong netstat / TCPview, nhưng sẽ chặn ổ cắm.
Ví dụ về Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
Cổng hiện bị ràng buộc và cố gắng thực thi cùng một mã trong trường hợp thứ hai trong khi cổng đầu tiên vẫn đang chạy sẽ dẫn đến lỗi. Tuy nhiên, trừ khi bạn thực sự bắt đầu nghe trên cổng đó bằng cách sử dụng
s.listen(1)
cổng không hiển thị trong netstat / TCPview.
Câu hỏi là: Có thể xem cổng nào bị ràng buộc (nhưng không lắng nghe) và quá trình nào đang ràng buộc chúng?
Bối cảnh của điều này là tôi đã có một phạm vi di chuyển gồm 1976 cổng không thể bị ràng buộc và tôi muốn biết nguyên nhân gây ra điều này. Trong khi đó, tôi đã xác định thông qua bản dùng thử và lỗi rằng Chia sẻ kết nối Internet đang chặn các cổng đó, nhưng tôi vẫn tò mò về câu trả lời cho câu hỏi này.
Chỉnh sửa: Do yêu cầu phổ biến, đây là mã tôi đã sử dụng để tìm các cổng đó:
import time
import socket
for i in range(0,65536):
try:
print "Listening on port", i, '...',
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('0.0.0.0', i))
serversocket.listen(5)
#time.sleep(0.1)
serversocket.close()
print "ok"
except:
print "FAIL"
(bạn có thể muốn chuyển đầu ra sang grep và chỉ lọc FAIL)