2014-04-21 10 views
5

Mam aplikację, którą odziedziczyłem, która nasłuchuje na porcie 7001 dla transmisji UDP z naszego własnego sprzętu testowego, a ostatnio zaktualizowałem kolejną aplikację, która musi zrobić to samo. Obie aplikacje muszą współistnieć na tym samym komputerze.Jak mogę wykryć, który program nasłuchuje portu TCP/IP w systemie Windows?

Obecnie, gdy moja ostatnio zaktualizowana aplikacja próbuje połączyć się z portem w celu nasłuchiwania emisji UDP, po prostu zgłasza, że ​​port jest niedostępny i sugeruje, że odziedziczona aplikacja prawdopodobnie działa. Jak mogę sprawić, aby moja aplikacja wykryła, która aplikacja faktycznie nasłuchuje na tym porcie? Zrobiłem wyszukiwarkę Google i przeszukałem tę stronę, ale jak dotąd nie udało mi się znaleźć niczego poza użyciem Menedżera zadań, TCPView lub netstat w linii poleceń.

Wolałbym technikę, która używa interfejsu API Windows lub komponentu COM systemu Windows, ponieważ obie aplikacje są napisane w VB6. (Wiem, wiem, ale muszę zachować te aplikacje, ponieważ mają one krytyczne znaczenie). Jednak rozwiązanie .NET byłoby również przydatne, gdyby było mi potrzebne w moich nowych działaniach na rzecz rozwoju.

+0

GetTcpTable2 może uzyskać identyfikator procesu. Podobne pytanie tutaj [link] (http://stackoverflow.com/questions/13295277/check-on-avaiable-port-using-wmi-win32-class) – user2773289

+0

Nie wiem, czy możesz użyć tego czy nie, ale MSDN Wpis dla powyższego z przykładowym kodem znajduje się pod adresem http://msdn.microsoft.com/en-us/library/windows/desktop/bb408406(v=vs.85).aspx –

+0

Możesz również uzyskać te informacje za pośrednictwem WMI. Bardzo przydatna rzecz. – EJP

Odpowiedz

2
netstat -n -o 

który pokaże identyfikator procesu, a stamtąd można też spojrzeć w widza procesu Zarządzającego zadanie, goto Widok -> Kolumny ... i sprawdzić ID procesu (PID). Następnie możesz zobaczyć nazwę procesu nasłuchującego na tym porcie.

Oczywiście, chcesz mieć programowy sposób osiągnięcia tego, a interfejs API GetTCPTable2 jest najlepszy, jak już sugerowano. W rzeczywistości, jeśli spojrzysz na IAT (Import Address Table) dla netstat.exe, to faktycznie używa tego API, aby uzyskać te informacje.

Istnieje sposób bezpośredniego komunikowania się z oknem poleceń i otrzymywania danych wyjściowych za pomocą potoków i działałoby dobrze, ale idealnym sposobem jest po prostu użycie tych samych funkcji API netstat.

+0

Dzięki, to powinno mnie zabrać tam, gdzie potrzebowałem. Nie miałem czasu, aby pójść dalej, ale jak tylko będę miał działający kod, opublikuję go tutaj. –

+0

Tylko 'netstat --all --program | grep 8090' pracował dla mnie. Po prostu dzielenie się. net-tools 1.60 netstat 1.42 (2001-04-15) –

Powiązane problemy