2014-04-21 17 views
5

Ho un'applicazione che ho ereditato che ascolta sulla porta 7001 per le trasmissioni UDP dalle nostre apparecchiature di test interne e di recente ho aggiornato un'altra applicazione che deve fare la stessa cosa. Entrambe le applicazioni devono essere in grado di coesistere sullo stesso computer.Come posso rilevare quale programma sta ascoltando una porta tcp/ip in Windows?

Attualmente, quando la mia applicazione aggiornata di recente tenta di collegarsi alla porta per ascoltare le trasmissioni UDP e fallisce, segnala semplicemente che la porta non è disponibile e suggerisce che l'app ereditata è probabilmente in esecuzione. Come posso ottenere che la mia applicazione rilevi l'applicazione effettivamente in ascolto su quella porta? Ho fatto una ricerca su Google e ho anche cercato questo sito, ma finora non sono stato in grado di trovare nulla tranne che per utilizzare Task Manager, TCPView o netstat sulla riga di comando.

Preferirei una tecnica che utilizza l'API di Windows o un componente COM di sistema Windows, poiché entrambe le applicazioni sono scritte in VB6. (Lo so, lo so, ma devo mantenere queste applicazioni poiché sono mission critical.) Tuttavia, una soluzione .NET sarebbe utile anche nel caso in cui ne avessi bisogno nei miei nuovi sforzi di sviluppo.

+0

GetTcpTable2 può ottenere un ID di processo. Domanda simile qui [collegamento] (http://stackoverflow.com/questions/13295277/check-on-avaiable-port-using-wmi-win32-class) – user2773289

+0

Non so se è possibile utilizzare questo o meno, ma l'MSDN la voce sopra per alcuni esempi di codice è disponibile all'indirizzo http://msdn.microsoft.com/en-us/library/windows/desktop/bb408406(v=vs.85).aspx –

+0

È anche possibile ottenere queste informazioni tramite WMI. Cosa molto utile – EJP

risposta

2
netstat -n -o 

che mostrerà l'ID del processo e da lì si può guardare nel visualizzatore di processi di Task Manager, Goto Visualizza -> Colonne ... e controllare il processo di identificazione (PID). Quindi puoi vedere il nome del processo in ascolto su quella porta.

Ovviamente, si sta cercando un modo programmatico per realizzare questo e l'API GetTCPTable2 è la migliore, come già suggerito. Infatti, se si guarda lo IAT (Import Address Table) per netstat.exe, in realtà utilizza quell'API per ottenere tali informazioni.

C'è un modo per comunicare direttamente con una finestra di comando e ottenere l'output tramite pipe e funzionerebbe bene, ma il modo ideale è semplicemente utilizzare gli stessi usi di API netstat.

+0

Grazie, questo dovrebbe portarmi dove mi serviva. Non ho avuto il tempo di andare oltre, ma non appena avrò un codice funzionante lo posterò qui. –

+0

Solo 'netstat --all --program | grep 8090' ha funzionato per me. Semplice condivisione. net-tools 1.60 netstat 1.42 (2001-04-15) –