2009-09-15 5 views
0

J'essaie d'utiliser GetExtendedTcpTable via un programme Python. Fondamentalement, j'essaie de convertir "ActiveState Code Recipe 392572: Utilisation de l'API Win32 IPHelper" à "Getting the active TCP/UDP connections using the GetExtendedTcpTable function".Utilisation de GetExtendedTcpTable en Python

Mon problème est que je n'arrive pas à obtenir le script Python pour reconnaître TCP_TABLE_CLASS.TCP_TABL \ E_OWNER_PID_ALL.

J'ai essayé

ctypes.windll.iphlpapi.GetExtendedTcpTable(NULL, ctypes.byref(dwSize), bOrder, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0)

mais Bails toujours avec "AttributeError: fonction 'TCP_TABLE_CLASS' not found"

J'ai aussi essayé

ctypes.windll.iphlpapi.GetExtendedTcpTable(NULL, ctypes.byref(dwSize), bOrder, AF_INET, ctypes.windll.iphlpapi.TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0)

qui reçoit les mêmes résultats.

Toutes les recommandations sont appréciées.

Cutaway

Répondre

1

Le TCP_TABLE_CLASS est un ENUM

 
typedef enum { 
    TCP_TABLE_BASIC_LISTENER, 
    TCP_TABLE_BASIC_CONNECTIONS, 
    TCP_TABLE_BASIC_ALL, 
    TCP_TABLE_OWNER_PID_LISTENER, 
    TCP_TABLE_OWNER_PID_CONNECTIONS, 
    TCP_TABLE_OWNER_PID_ALL, 
    TCP_TABLE_OWNER_MODULE_LISTENER, 
    TCP_TABLE_OWNER_MODULE_CONNECTIONS, 
    TCP_TABLE_OWNER_MODULE_ALL 
} TCP_TABLE_CLASS, *PTCP_TABLE_CLASS; 

vous devez définir dans votre script python avec quelques constantes. Ceci n'est pas exporté par la DLL.

 
    TCP_TABLE_BASIC_LISTENER = 0 
    TCP_TABLE_BASIC_CONNECTIONS = 1 
    TCP_TABLE_BASIC_ALL = 2 
    TCP_TABLE_OWNER_PID_LISTENER = 3 
    TCP_TABLE_OWNER_PID_CONNECTIONS = 4 
    TCP_TABLE_OWNER_PID_ALL = 5 
    TCP_TABLE_OWNER_MODULE_LISTENER = 6 
    TCP_TABLE_OWNER_MODULE_CONNECTIONS = 7 
    TCP_TABLE_OWNER_MODULE_ALL = 8 

0

Dans ce cas, puisque:

typedef enum { TCP_TABLE_BASIC_LISTENER, TCP_TABLE_BASIC_CONNECTIONS, TCP_TABLE_BASIC_ALL, TCP_TABLE_OWNER_PID_LISTENER, TCP_TABLE_OWNER_PID_CONNECTIONS, TCP_TABLE_OWNER_PID_ALL, TCP_TABLE_OWNER_MODULE_LISTENER, TCP_TABLE_OWNER_MODULE_CONNECTIONS, TCP_TABLE_OWNER_MODULE_ALL } TCP_TABLE_CLASS, *PTCP_TABLE_CLASS;

J'utilise '5' et cela a fonctionné.

Merci, En coupe