获取进程网络连接状态
来源:互联网 发布:微信成绩查询系统源码 编辑:程序博客网 时间:2024/06/05 02:40
只实现TCP连接状态查看
UDP类似请参考MSDN
GetExtendedTcpTable
GetExtendedUdpTable
//---------------------------------------------------------------------------#include <vcl.h>#pragma hdrstop#include <iphlpapi.h>#include <winsock2.h>#include <stdio.h>#pragma comment(lib,"ws2_32.lib")//---------------------------------------------------------------------------#pragma argsusedtypedef struct _MIB_TCPROW_OWNER_PID { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwOwningPid;} MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;typedef struct { DWORD dwNumEntries; MIB_TCPROW_OWNER_PID table[ANY_SIZE];} MIB_TCPTABLE_OWNER_PID, *PMIB_TCPTABLE_OWNER_PID;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;String addr2string(ULONG addr){ in_addr in; in.S_un.S_addr=addr; return String(inet_ntoa(in));}String tcpstate2string(DWORD state){ String ret; switch(state) { case MIB_TCP_STATE_CLOSED: //= 1, { ret="CLOSED"; } break; case MIB_TCP_STATE_LISTEN: //= 2, { ret="LISTEN"; } break; case MIB_TCP_STATE_SYN_SENT: //= 3, { ret="SYN_SENT"; } break; case MIB_TCP_STATE_SYN_RCVD: //= 4, { ret="SYN_RCVD"; } break; case MIB_TCP_STATE_ESTAB: //= 5, { ret="ESTAB"; } break; case MIB_TCP_STATE_FIN_WAIT1: //= 6, { ret="FIN_WAIT1"; } break; case MIB_TCP_STATE_FIN_WAIT2: //= 7, { ret="FIN_WAIT2"; } break; case MIB_TCP_STATE_CLOSE_WAIT: //= 8, { ret="CLOSE_WAIT"; } break; case MIB_TCP_STATE_CLOSING: //= 9, { ret="CLOSING"; } break; case MIB_TCP_STATE_LAST_ACK: //= 10, { ret="LAST_ACK"; } break; case MIB_TCP_STATE_TIME_WAIT: //= 11, { ret="TIME_WAIT"; } break; case MIB_TCP_STATE_DELETE_TCB: //= 12, { ret="DELETE_TCB"; } break; } return ret;}int main(int argc, char* argv[]){ WSAData wsaData; if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) return 1; HMODULE hDll=LoadLibraryA("iphlpapi.dll"); if(hDll) { typedef DWORD (WINAPI *lpfnGetExtendedTcpTable)( /*__out*/ PVOID pTcpTable, /*__inout*/ PDWORD pdwSize, /*__in*/ BOOL bOrder, /*__in*/ ULONG ulAf, /*__in*/ TCP_TABLE_CLASS TableClass, /*__in*/ ULONG Reserved ); lpfnGetExtendedTcpTable GetExtendedTcpTable=(lpfnGetExtendedTcpTable)GetProcAddress(hDll,"GetExtendedTcpTable"); LPVOID pBuf=NULL; DWORD dwSize=0; if(GetExtendedTcpTable(pBuf,&dwSize,TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL/*TCP_TABLE_OWNER_PID_CONNECTIONS*/,0)==ERROR_INSUFFICIENT_BUFFER) { do { pBuf=GlobalAlloc(GPTR,dwSize); if(!pBuf) break; GetExtendedTcpTable(pBuf,&dwSize,TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL/*TCP_TABLE_OWNER_PID_CONNECTIONS*/,0); PMIB_TCPTABLE_OWNER_PID tcpTable=(PMIB_TCPTABLE_OWNER_PID)(pBuf); for(UINT i=0;i<tcpTable->dwNumEntries;++i) { String s; if(tcpTable->table[i].dwState==MIB_TCP_STATE_LISTEN) s=String().sprintf("PID:%.4d %s:%d State:%s", tcpTable->table[i].dwOwningPid, addr2string(tcpTable->table[i].dwLocalAddr).c_str(), ntohs(tcpTable->table[i].dwLocalPort), tcpstate2string(tcpTable->table[i].dwState).c_str()); else s=String().sprintf("PID:%.4d %s:%d-%s:%d State:%s", tcpTable->table[i].dwOwningPid, addr2string(tcpTable->table[i].dwLocalAddr).c_str(), ntohs(tcpTable->table[i].dwLocalPort), addr2string(tcpTable->table[i].dwRemoteAddr), ntohs(tcpTable->table[i].dwRemotePort), tcpstate2string(tcpTable->table[i].dwState).c_str()); puts(s.c_str()); } }while(0); GlobalFree(pBuf); } FreeLibrary(hDll); } WSACleanup(); getchar(); return 0;}//---------------------------------------------------------------------------
- 获取进程网络连接状态
- 获取网络连接状态
- 获取android网络连接状态
- 获取手机网络连接状态
- 获取网络连接状态的代码
- linux 下获取当前网络连接状态
- 判断网络连接状态和获取网络接入点
- C#获取网络状态是否有网络连接
- 常用util工具类——获取网络连接状态
- 安卓学习笔记--获取网络连接状态
- Ios开发之根据状态栏获取网络的连接状态
- iOS开发之根据状态栏获取网络的连接状态
- Windows 如何获取本机网络连接状态
- Android判断网络连接状态,判断网络连接方式,获取IP地址
- 网络连接状态详解
- 判断网络连接状态
- 判断网络连接状态
- Android 网络连接状态
- 16周项目5:填空学指针
- 输出A和空格的个数。
- Vitualbox安装Ubuntu
- 支持多浏览器的网站变灰方法
- 一张表数据转换成xml格式数据(dataset2XML)
- 获取进程网络连接状态
- 复制解压命令
- 单步执行
- 第十六周上机任务---字符串中字符的统计 ②。。。。
- ConfigParser大小写问题
- linux驱动学习之内核线程分析
- 第十五周上机任务项目4—多科成绩单
- 程序员到架构师的推荐阅读书籍
- cmd下登录指定端口的ftp服务器