我试图通过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)
收到相同的结果。
任何建议都表示赞赏。
切角
答案 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'并且它有效。
谢谢你, 切角