Windows'da hangi işlemin bir bağlantı noktasını (dinlemeden) bağladığını belirleme


12

Hangi soket üzerinde hangi işlemin dinlendiğini öğrenmek istersem, netstat / TCPview kullanabilirim ve hemen göreceğim. Ancak, dinlemeden bir adrese bağlanmak mümkündür. Bu yapılırsa, netstat / TCPview içinde görünmez, ancak soketi engeller.

Python örneği:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0',12345))

Bağlantı noktası artık bağlanmıştır ve ilk kod çalışırken ikinci bir örnekte aynı kodu yürütmeye çalışmak hataya neden olur. Ancak, o bağlantı noktasını kullanarak

s.listen(1)

bağlantı noktası netstat / TCPview içinde görünmüyor.

Soru şudur: Hangi bağlantı noktalarının bağlı olduğunu (ancak dinlemediğini) ve hangi işlemin onları bağladığını görmek mümkün müdür ?

Bu arka plan Bunun ne var bir vardı bağlı olamaz 1976 port hareketli aralığını ve bu neden bilmek istiyorum. Bu arada, deneme yanılma yoluyla Internet Bağlantı Paylaşımı'nın bu bağlantı noktalarını engellediğini belirledim, ancak yine de bu sorunun cevabını merak ediyorum.

Düzenleme: Popüler istek nedeniyle, İşte bu bağlantı noktalarını bulmak için kullanılan kod:

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"

(çıkışı grep'e borulamak ve yalnızca FAIL için filtrelemek isteyebilirsiniz)


Bu betiği 0 ile 65535 arasında bir döngüye sokabilir, başarısız olduğu bağlantı noktalarını kaydedebilir ve sonucu netstat bağlantı noktaları ile karşılaştırabilirsiniz. Netstat'ta listelenmeyenler aradığınız şey olmalıdır. Dinlemedikçe, bu portların arkasında hangi sürecin olduğunu gösterecek herhangi bir araç veya teknik bilmiyorum.
Kedar

@Kedar: Tam olarak hangi portların etkilendiğini bulmak için yaptım.
Jan Schejbal

@Lizz: Kod gönderildi.
Jan Schejbal

Cevap olarak gönderebilir misiniz? referans olması iyi olurdu :)
Lizz

@Lizz: Bu sorunun cevabı değil. Hangi portların etkilendiğini gösterir, fakat onları işgal edenleri değil.
Jan Schejbal

Yanıtlar:


1

kullanmalısın

DWORD GetExtendedTcpTable (PVOID pTcpTable, PDWORD pdwSize, BOOL bOrder, ULONG ulAf, TCP_TABLE_CLASS TableClass, ULONG Saklıdır);

ile

TableClass değeri = TCP_TABLE_OWNER_PID_ALL "veya" TCP_TABLE_OWNER_PID_CONNECTIONS "veya" TCP_TABLE_OWNER_PID_LISTENER

pTcpTable yapısı -> MIB_TCPTABLE_OWNER_PID

almak istediğiniz bilgiye bağlı olarak

DÜZENLE:

TCP_TABLE_OWNER_PID_ALL her MIB_TCPROW_OWNER_PID yapıların bir dizidir MIB_TCPTABLE_OWNER_PID yapı döndüren dwStatesahip olmalıdır MIB_TCP_STATE_CLOSED, dinleme bağlı ve değilken bu yapı da teklifler dwLocalAddrvedwLocalPort

typedef struct _MIB_TCPROW_OWNER_PID {
  DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
  DWORD dwOwningPid;
} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;

Bu sadece hem bağlı hem de dinleme olan soketleri listeler, ancak soru özellikle bağlı olan ancak dinlemeyen soketlerle ilgilidir.
Luke Dunstan

iddia mı ediyorsun yoksa soruyor musun ??? düzenlemeye bakın
Pat

Pastebin.com/vaHMVRQR'yi çalıştırdığımda , dinlemeden bağlamak için masada hiçbir şey almıyorum (Win7)
Luke Dunstan

İlgili yapıların belirli hizalamaları vardır, bunları yeniden tanımlamamalısınız; MS tarafından tanımlananlara başvurmalısınız. Ayrıca başlangıçta bir MS API Python test etmek istiyorsanız doğru araç değildir; bunun yerine C / C ++ kullanmalısınız.
Pat

görüntülenen kod bağlı ancak bağlı olmayan soketler hakkında bilgi vermez;
netstat'ın

0

Netstat'ın son sürümlerinde artık bu soketleri gösteren -q komut satırı parametresi bulunmaktadır.

$ netstat -?

Displays protocol statistics and current TCP/IP network connections.

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-x] [-t] [interval]

  -a            Displays all connections and listening ports.
  -b            Displays the executable involved in creating...
  ...
  -p proto      Shows connections for the protocol specified...
  -q            Displays all connections, listening ports, and bound
                nonlistening TCP ports. Bound nonlistening ports may or may not
                be associated with an active connection.
  -r            Displays the routing table.
  ...

Kullanım örneği:

$ netstat -nq -p tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:7              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:9              0.0.0.0:0              LISTENING
  TCP    0.0.0.0:13             0.0.0.0:0              LISTENING
  ...

 TCP    192.168.122.157:50059  54.213.66.195:443      ESTABLISHED
  TCP    0.0.0.0:49676          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49700          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49704          0.0.0.0:0              BOUND
  TCP    0.0.0.0:49705          0.0.0.0:0              BOUND
  ...

Bu durumda soketleri almak için herkese açık bir API yok gibi görünüyor. Sorumu StackOverflow'da görün .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.