在Python中使用GetExtendedTcpTable

时间:2009-09-15 20:20:35

标签: python winapi

我试图通过Python程序使用GetExtendedTcpTable。基本上我试图将“ActiveState Code Recipe 392572:使用Win32 IPHelper API”转换为"Getting the active TCP/UDP connections using the GetExtendedTcpTable function"

我的问题是我似乎无法让Python脚本识别TCP_TABLE_CLASS.TCP_TABL \ E_OWNER_PID_ALL。

我试过了

  

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

但是总是会出现“AttributeError:function'TCP_TABLE_CLASS'not found”

我也试过

  

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

收到相同的结果。

任何建议都表示赞赏。

切角

2 个答案:

答案 0 :(得分:1)

TCP_TABLE_CLASS是一个枚举

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;

你必须在你的python脚本中用一些常量定义它。这不会被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

答案 1 :(得分:0)

在这种情况下,因为:

  

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;

我使用'5'并且它有效。

谢谢你, 切角