Jika saya ingin mengetahui proses apa yang sedang mendengarkan pada soket apa, saya dapat menggunakan netstat / TCPview dan akan segera melihatnya. Namun, dimungkinkan untuk mengikat ke alamat tanpa mendengarkan. Jika ini dilakukan, itu tidak muncul di netstat / TCPview, tetapi tidak memblokir soket.
Contoh python:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))
Port sekarang terikat, dan mencoba mengeksekusi kode yang sama dalam instance kedua saat yang pertama masih berjalan akan menghasilkan kesalahan. Namun, kecuali Anda benar-benar mulai mendengarkan pada port itu menggunakan
s.listen(1)
port tidak muncul di netstat / TCPview.
Pertanyaannya adalah: Apakah mungkin untuk melihat port apa yang terikat (tetapi tidak mendengarkan), dan proses mana yang mengikat mereka?
Latar belakang dari hal ini adalah bahwa saya telah memiliki rentang bergerak port 1976 yang tidak dapat terikat , dan saya ingin tahu apa yang menyebabkan ini. Sementara itu, saya memutuskan melalui trial and error bahwa Berbagi Sambungan Internet memblokir port tersebut, tetapi saya masih penasaran dengan jawaban untuk pertanyaan ini.
Sunting: Karena permintaan populer, berikut adalah kode yang saya gunakan untuk menemukan port tersebut:
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"
(Anda mungkin ingin menyalurkan output ke grep dan filter untuk FAIL saja)