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)
Jawaban:
kamu harus menggunakan
dengan
Nilai TableClass = TCP_TABLE_OWNER_PID_ALL "atau" TCP_TABLE_OWNER_PID_CONNECTIONS "atau" TCP_TABLE_OWNER_PID_LISTENER
struktur pTcpTable -> MIB_TCPTABLE_OWNER_PID
tergantung pada info yang ingin Anda ambil
EDIT:
TCP_TABLE_OWNER_PID_ALL mengembalikan struktur MIB_TCPTABLE_OWNER_PID yang merupakan susunan struktur MIB_TCPROW_OWNER_PID di mana masing
dwState
- masing harus memilikiMIB_TCP_STATE_CLOSED
ketika terikat dan tidak mendengarkan, struktur ini juga menawarkandwLocalAddr
dandwLocalPort
sumber
Dalam versi terbaru dari netstat sekarang ada parameter baris perintah -q yang menunjukkan soket itu.
Contoh penggunaan:
Tampaknya tidak ada API publik untuk mendapatkan soket dalam situasi itu. Lihat pertanyaan saya di StackOverflow .
sumber