elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas para usar la función GetExtendedTcpTable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas para usar la función GetExtendedTcpTable  (Leído 3,419 veces)
el_doctor

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Problemas para usar la función GetExtendedTcpTable
« en: 5 Septiembre 2013, 19:13 pm »

Saludos estoy haciendo un proceso que me recupere los procesos que están usando una conexión TCP/IP leyendo la documentación MSDN esta función devuelve los datos que necesito pero tengo dudas con el primer parámetro de salida que es donde se recupera la tabla de la estructura con los datos, según la documentación MSDN la sintaxis de la función es la siguiente:

Código
  1. DWORD GetExtendedTcpTable(
  2.  _Out_    PVOID pTcpTable,
  3.  _Inout_  PDWORD pdwSize,
  4.  _In_     BOOL bOrder,
  5.  _In_     ULONG ulAf,
  6.  _In_     TCP_TABLE_CLASS TableClass,
  7.  _In_     ULONG Reserved
  8. );

el problema que tengo es con el parámetro pTcpTable según entiendo debe ser una estructura de datos que ya existe en "tcpmib.h" pero no se como usar estas estructuras y como recuperaría los datos que envía la función en esta variable.

la función la he definido de la siguiente manera:

Código
  1. DWORD size;
  2. DWORD dwResult;
  3.  
  4.  
  5. dwResult = GetExtendedTcpTable( , size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);

les agradecería me ayudaran en comprender mejor para usar esta función



Una aclaración la variable size no le he asignado ningún valor porque igual como no se que estructura es pTcpTable no puedo darle un valor.

Código
  1. size = sizeof (PVOID)
  2. //no se que estructura corresponde pTcpTable el tipo lo pone como PVOID


« Última modificación: 5 Septiembre 2013, 19:36 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #1 en: 5 Septiembre 2013, 19:32 pm »

La misma funcion te devuelve el tamaño necesario:

pdwSize [in, out]
The estimated size of the structure returned in pTcpTable, in bytes. If this value is set too small, ERROR_INSUFFICIENT_BUFFER is returned by this function, and this field will contain the correct size of the structure.

Código:
DWORD size = 0;
DWORD dwResult = GetExtendedTcpTable(NULL, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
if (dwResult == ERROR_INSUFFICIENT_BUFFER)
{
  PVOID table = malloc(size);
  dwResult = GetExtendedTcpTable(table, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);
  if (dwResult == NO_ERROR)
  {
    PMIB_TCPTABLE_OWNER_PID tabla = (PMIB_TCPTABLE_OWNER_PID)table;
  }
  free(table);
}

Y la estructura tambien esta en la documentacion:
TCP_TABLE_CLASS enumeration

TCP_TABLE_OWNER_PID_ALL
A MIB_TCPTABLE_OWNER_PID or MIB_TCP6TABLE_OWNER_PID structure that contains all TCP endpoints on the local computer is returned to the caller.


« Última modificación: 5 Septiembre 2013, 19:38 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
el_doctor

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #2 en: 5 Septiembre 2013, 20:15 pm »

Gracias Eternal Idol el código me resulto de mucha utilidad hice algunos cambios lo dejo aquí para que sirva de referencia a otros:

Código
  1. DWORD size= 64;
  2.  
  3. LPVOID table = new BYTE[size];
  4.  
  5.  
  6. while( dwResult = GetExtendedTcpTable(table, &size, false, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0)
  7. == ERROR_INSUFICIENT_BUFFER)
  8. delete [] table, table = new BYTE[size *= 2];
  9.  
  10. if(dwResut != NO_ERROR)
  11. {
  12. //TODO error
  13. return NULL;
  14. }
  15.  
  16.  
  17. PMIB_TCPTABLE_OWNER_PID tabla = (PMIB_TCPTABLE_OWNER_PID)table;

disculpa las molestias pero ahora tengo la duda quiero obtener sólo un registro de toda la lista de estructura es decir hacer un for que me recorra toda la lista pero sólo recuperar dwOwningPid de la estructura MIB_TCPROW_OWNER_PID
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #3 en: 5 Septiembre 2013, 20:22 pm »

No tiene mucho sentido hacer ese bucle, como te dije la funcion te devuelve el tamaño que necesita, ir aumentando en 64 (un valor arbitrario), reservar y liberar memoria es poco optimizado.

En el campo dwNumEntries de la estructura MIB_TCPTABLE_OWNER tenes la cantidad de elementos en la tabla. Con eso podes hacer el array facilmente.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
el_doctor

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #4 en: 5 Septiembre 2013, 21:14 pm »

Gracias por tus sugerencias estoy corriendo el código disculpa de que biblioteca son AF_INET y ERROR_INSUFICIENT_BUFFER ya que me da un error de compilación que no están declarados esos identificadores



Salodos lo de "AF_INET" ya encontré en que biblioteca asociada a la dll se encontraba pero sigo sin poder encontrar donde está declarado "ERROR_INSUFICIENT_BUFFER"
« Última modificación: 5 Septiembre 2013, 22:43 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #5 en: 5 Septiembre 2013, 22:42 pm »

Es ERROR_INSUFFICIENT_BUFFER, incluyendo windows.h ya te deberia funcionar.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
el_doctor

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #6 en: 5 Septiembre 2013, 23:09 pm »

Gracias Eternal Idol erra un error de sintaxis el mío  :-\

tengo ratos de estar dando lata con esto ahora tengo un problema de conversión cuando hago el for para recorrer la tabla no se si he hecho algo mal si le das una chequeada y me ayudas te lo agradecería.

Código
  1. for(int i=0; i < (int) pTcpTable->dwNumEntries; i++)
  2.  

En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #7 en: 5 Septiembre 2013, 23:12 pm »

No existe la variable pTcpTable (asi se llama el primer parametro de la funcion GetExtendedTcpTable).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
el_doctor

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #8 en: 5 Septiembre 2013, 23:14 pm »

Me dará problemas si la declaro igual que el parámetro de la función???
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Problemas para usar la función GetExtendedTcpTable
« Respuesta #9 en: 5 Septiembre 2013, 23:15 pm »

No tengo tu codigo pero inverti un poco mas de esfuerzo y prueba y error por tu cuenta y seguro que logras hacerlo funcionar.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problemas para usar el swap magic con un juego
Juegos y Consolas
albert25 0 1,897 Último mensaje 25 Octubre 2004, 08:16 am
por albert25
Problemas para enviar correo en PHP, funcion mail()
PHP
Diabliyo 7 5,707 Último mensaje 20 Diciembre 2006, 17:31 pm
por Azielito
PROBLEMAS PARA USAR UN VOLANTE DE PSX EN EL PC
Juegos y Consolas
Artikbot 2 3,037 Último mensaje 5 Agosto 2007, 13:30 pm
por Artikbot
Que funcion puedo usar?
Programación C/C++
Garfield07 3 2,727 Último mensaje 6 Septiembre 2010, 11:41 am
por Garfield07
que funcion tendria que usar para que no de error
Desarrollo Web
Pajarito434 3 2,409 Último mensaje 11 Febrero 2017, 23:48 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines