หากฉันต้องการทราบว่ากระบวนการใดกำลังฟังซ็อกเก็ตใดฉันสามารถใช้ netstat / TCPview และจะเห็นทันที อย่างไรก็ตามมันเป็นไปได้ที่จะผูกที่อยู่โดยไม่ต้องฟัง หากทำเสร็จแล้วจะไม่ปรากฏใน netstat / TCPview แต่จะบล็อกซ็อกเก็ต
ตัวอย่าง Python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
ขณะนี้พอร์ตถูกผูกไว้และการพยายามเรียกใช้รหัสเดียวกันในอินสแตนซ์ที่สองในขณะที่พอร์ตแรกยังทำงานอยู่จะส่งผลให้เกิดข้อผิดพลาด อย่างไรก็ตามเว้นแต่คุณจะเริ่มฟังพอร์ตนั้นโดยใช้
s.listen(1)
พอร์ตไม่ปรากฏขึ้นใน netstat / TCPview
คำถามคือ: เป็นไปได้ไหมที่จะเห็นว่าพอร์ตใดถูกผูกไว้ (แต่ไม่ฟัง) และกระบวนการใดที่ผูกมัดพวกเขา
พื้นหลังของเรื่องนี้ก็คือว่าผมได้มีช่วงการเคลื่อนย้าย 1976 พอร์ตที่ไม่สามารถจะผูกพันและฉันต้องการที่จะรู้ว่าสิ่งที่ทำให้เกิดนี้ ในระหว่างนี้ฉันพิจารณาจากการลองผิดลองถูกที่ Internet Connection Sharing กำลังบล็อกพอร์ตเหล่านั้น แต่ฉันก็ยังสงสัยเกี่ยวกับคำตอบของคำถามนี้
แก้ไข:เนื่องจากคำขอยอดนิยมนี่คือรหัสที่ฉันใช้ในการค้นหาพอร์ตเหล่านั้น:
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"
(คุณอาจต้องการไพพ์เอาต์พุตเป็น grep และตัวกรองสำหรับ FAIL เท่านั้น)