Map Port to Process oder Process to Port - Welche WINAPI Befehle sind hierbei hilfreich ?
-
Hi,
ich möchte gerne eine application alias fport ( foundstone ) oder MS PortQry ( http://www.microsoft.com/downloads/thankyou.aspx?familyId=89811747-C74B-4638-A2D5-AC828BDC6983&displayLang=en&oRef=http%3A%2F%2Fwww.microsoft.com%2Fdownloads%2Fdetails.aspx%3Ffamilyid%3D69BA779B-BAE9-4243-B9D6-63E62B4BCD2E%26displaylang%3Den ) schreiben.
Sie soll also angeben welche Ports im listening / connected ... Status sind und die Prozesse die den Port nutzen angeben.
Durchwühle jetzt schon seit Stunden die API aber finde nichts passendes bräuchte einen Anfangspunkt.
tia
MFG c°h°
-
vielleicht hift das: http://www.sysinternals.com/Files/NetstatpSource.zip
-
das sieht ja shconmal grossartig aus danke

-
bekomme das nur leider nicht zum laufen
lässt sich zwar compilieren macht aber speicherprobleme der Fehler wird anscheinend durch folgende codezeile verursacht:
[...] DWORD (WINAPI *pAllocateAndGetTcpExTableFromStack)( PMIB_TCPEXTABLE *pTcpTable, // buffer for the connection table BOOL bOrder, // sort the table? HANDLE heap, DWORD zero, DWORD flags ); [...] PMIB_TCPEXTABLE tcpExTable; [...] error = pAllocateAndGetTcpExTableFromStack( &tcpExTable, TRUE, GetProcessHeap(), 2, 2 );Fehler: "Die Anweisung in "0x00000000" verweist auf Speicher in "0x00000000" Der Vorgang read konnte nicht auf dem Speicher durchgeführt werden."
dachte es liegt an GetProcessHeap aber über diese Codezeile läuft er einfach drüber :
if( GetProcessHeap() == NULL ){ printf("error %d",GetLastError()); return; }ich kann leider nicht debuggen bzw weiss nicht wie mir das bei der Fehlerfindung helfen könnte.
Danke für jede Hilfe
-
Du hast aber mittels "ExApisArePresent" geprüft ob die Funktionen da sind, oder?
-
ja
[...] exPresent = ExApisArePresent(); if( exPresent ) { [...]leider ists das nicht

-
Da fällt mir ein ich hatte die Prozedur abgeändert
mein code
BOOLEAN ExApisArePresent( VOID ) { if(GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetTcpExTableFromStack" )== NULL) return FALSE; if(GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetUdpExTableFromStack" )== NULL ) return FALSE; if(GetProcAddress( GetModuleHandle( "kernel32.dll" ),"CreateToolhelp32Snapshot" )== NULL ) return FALSE; if(GetProcAddress( GetModuleHandle( "kernel32.dll" ),"Process32First" ) == NULL ) return FALSE; if(GetProcAddress( GetModuleHandle( "kernel32.dll" ), "Process32Next" ) == NULL ) return FALSE; return TRUE; }urspünglicher code
BOOLEAN ExApisArePresent( VOID ) { pAllocateAndGetTcpExTableFromStack = (PVOID) GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetTcpExTableFromStack" ); if( !pAllocateAndGetTcpExTableFromStack ) return FALSE; pAllocateAndGetUdpExTableFromStack = (PVOID) GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetUdpExTableFromStack" ); if( !pAllocateAndGetUdpExTableFromStack ) return FALSE; pCreateToolhelp32Snapshot = (PVOID) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "CreateToolhelp32Snapshot" ); if( !pCreateToolhelp32Snapshot ) return FALSE; pProcess32First = (PVOID) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "Process32First" ); if( !pProcess32First ) return FALSE; pProcess32Next = (PVOID) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "Process32Next" ); if( !pProcess32Next ) return FALSE; return TRUE; }Der ursprüngliche Code erzeugte Kovertierungsfehler:
\MyProjects\netstatp\main.cpp(269) : error C2440: '=' : cannot convert from 'void *' to 'unsigned long (__stdcall *)(MIB_TCPEXTABLE ** ,int,void *,unsigned long,unsigned long)' Conversion from 'void*' to pointer to non-'void' requires an explicit cast \MyProjects\netstatp\main.cpp(273) : error C2440: '=' : cannot convert from 'void *' to 'unsigned long (__stdcall *)(MIB_UDPEXTABLE ** ,int,void *,unsigned long,unsigned long)' Conversion from 'void*' to pointer to non-'void' requires an explicit cast \MyProjects\netstatp\main.cpp(277) : error C2440: '=' : cannot convert from 'void *' to 'void *(__stdcall *)(unsigned long,unsigned long)' Conversion from 'void*' to pointer to non-'void' requires an explicit cast \MyProjects\netstatp\main.cpp(281) : error C2440: '=' : cannot convert from 'void *' to 'int (__stdcall *)(void *,struct tagPROCESSENTRY32 *)' Conversion from 'void*' to pointer to non-'void' requires an explicit cast \MyProjects\netstatp\main.cpp(285) : error C2440: '=' : cannot convert from 'void *' to 'int (__stdcall *)(void *,struct tagPROCESSENTRY32 *)' Conversion from 'void*' to pointer to non-'void' requires an explicit castDie (PVOID) Kovertierung mag mein Compiler irgendwie nicht
Return Werte von GetProcAddress:
-If the function succeeds, the return value is the address of the exported function or variable.-If the function fails, the return value is NULL. To get extended error information, call GetLastError.
also sollte meine Version doch auch gehen oder ?
-
Ach ich hab den Denkfehler in meinem Codes gefunden die Entrypoints der Befehle werden ja so garnicht gespeichert.
Nur das Konvertierungsproblem besteht leider immernoch.
-
Habs endlich hinbekommen

danke nochmal für eure HilfeBOOLEAN ExApisArePresent( VOID ) { pAllocateAndGetTcpExTableFromStack = ( unsigned long (__stdcall*)(MIB_TCPEXTABLE ** ,int,void *,unsigned long,unsigned long)) GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetTcpExTableFromStack"); if( !pAllocateAndGetTcpExTableFromStack ) return FALSE; pAllocateAndGetUdpExTableFromStack = ( unsigned long (__stdcall *)(MIB_UDPEXTABLE ** ,int,void *,unsigned long,unsigned long)) GetProcAddress( LoadLibrary( "iphlpapi.dll"), "AllocateAndGetUdpExTableFromStack" ); if( !pAllocateAndGetUdpExTableFromStack ) return FALSE; pCreateToolhelp32Snapshot = (void *(__stdcall *)(unsigned long,unsigned long)) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "CreateToolhelp32Snapshot" ); if( !pCreateToolhelp32Snapshot ) return FALSE; pProcess32First = (int (__stdcall *)(void *,struct tagPROCESSENTRY32 *)) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "Process32First" ); if( !pProcess32First ) return FALSE; pProcess32Next = (int (__stdcall *)(void *,struct tagPROCESSENTRY32 *)) GetProcAddress( GetModuleHandle( "kernel32.dll" ), "Process32Next" ); if( !pProcess32Next ) return FALSE; return TRUE; }MFG ch