| 发表于:2007-02-28 03:53:224楼 得分:0 |
// 最好的方法, 调用 getextendedtcptable() const // const for getextendedtcptable mib_tcp_state_closed = 1; mib_tcp_state_listen = 2; mib_tcp_state_syn_sent = 3; mib_tcp_state_syn_rcvd = 4; mib_tcp_state_estab = 5; mib_tcp_state_fin_wait1 = 6; mib_tcp_state_fin_wait2 = 7; mib_tcp_state_close_wait = 8; mib_tcp_state_closing = 9; mib_tcp_state_last_ack = 10; mib_tcp_state_time_wait = 11; mib_tcp_state_delete_tcb = 12; 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; udp_table_basic =0; udp_table_owner_pid = 1; udp_table_owner_module = 2; error_insufficient_buffer = 122; mib_if_oper_status_connecting = 3; mib_if_oper_status_connected = 4; mib_if_oper_status_operational = 5; mib_if_admin_status_up = 1; mib_if_admin_status_down = 2; mib_if_admin_status_testing = 3; type // type for getextendedtcptable tmib_tcprow_owner_pid = record dwstate: dword; dwlocaladdr: dword; dwlocalport: dword; dwremoteaddr: dword; dwremoteport: dword; dwowningpid: dword; end; pmib_tcprow_owner_pid = ^tmib_tcprow_owner_pid; tmib_tcptable_owner_pid = record dwnumentries: dword; table: array [0..999] of tmib_tcprow_owner_pid; end; pmib_tcptable_owner_pid = ^tmib_tcptable_owner_pid; var ptcp: pmib_tcptable_owner_pid; dwsize: dword; i: integer; begin dwsize := 0; if getextendedtcptable(ptcp, @dwsize, true, af_inet, tcp_table_owner_pid_connections, 0) = error_insufficient_buffer then ptcp := allocmem(dwsize) else exit; pidlist.clear(); cntlist.clear(); if getextendedtcptable(ptcp, @dwsize, true, af_inet, tcp_table_owner_pid_connections, 0) = 0 then begin for i := 0 to ptcp.dwnumentries-1 do with ptcp.table[i] do // table[i]对应一个连接 // 此处对连接的属性进行判断 ...... | | |
|