检测TCP端口占用状态的函数
来源:互联网 发布:中国多重人格案例 知乎 编辑:程序博客网 时间:2024/05/18 03:30
#include <WinSock2.h>#include <windows.h>#include <stdio.h>#include <tcpmib.h>#include <iprtrmib.h>#include <iphlpapi.h>#include <iostream>#pragma comment (lib,"Iphlpapi.lib")#pragma comment (lib,"Ws2_32.lib")using namespace std;bool CheckPortState( IN unsigned num);int main (void){CheckPortState(3389);return 0;}bool CheckPortState( IN unsigned num){PMIB_TCPTABLE_OWNER_PID pTcpTable;pTcpTable = new MIB_TCPTABLE_OWNER_PID;//获取所需要的内存大小DWORD tmpSize = sizeof(MIB_TCPTABLE_OWNER_PID); GetExtendedTcpTable( pTcpTable, &tmpSize,false , AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);//分配足够大小的内存并获取端口信息DWORD dwSize = tmpSize/sizeof(MIB_TCPTABLE_OWNER_PID);delete pTcpTable;pTcpTable = NULL;pTcpTable = new MIB_TCPTABLE_OWNER_PID[dwSize];GetExtendedTcpTable( pTcpTable, &tmpSize, true, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0);//判断端口是否被占用,并找出占用端口的进程,对于某些system权限的进程需要提权for (int i = 0; i < (int) pTcpTable->dwNumEntries; i++) {if ( num == ntohs( (u_short) pTcpTable->table[i].dwLocalPort ) ){HANDLE provileges = NULL;LUID Luid;//提权操作if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES| TOKEN_QUERY, &provileges) ){long res = GetLastError();cout<<"error code "<<res<<endl;if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return false;}if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid)){cout<<"LookupPrivilegeValue err!"<<endl;if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return false;}TOKEN_PRIVILEGES tp;tp.PrivilegeCount=1;tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;tp.Privileges[0].Luid=Luid;if (!AdjustTokenPrivileges(provileges,0,&tp,sizeof(TOKEN_PRIVILEGES),NULL,NULL)){cout<<"AdjustTokenPrivileges err!"<<endl;if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return false;}HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, pTcpTable->table[i].dwOwningPid);if ( hProcess == NULL ){long res = GetLastError();cout<<"error code "<<res<<endl;if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return false;}wchar_t wsProcessName[MAX_PATH + 1] = {0};DWORD len = MAX_PATH;if ( QueryFullProcessImageName(hProcess, 0, wsProcessName, &len) ){wcout<<L"Port["<<num<<L"] is occupied "<<L"by process["<<wsProcessName<<L"] PID["<<pTcpTable->table[i].dwOwningPid<<L"]"<<endl;CloseHandle(hProcess);}else{CloseHandle(hProcess);hProcess = NULL;if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return false;}}}if (pTcpTable != NULL){delete []pTcpTable;pTcpTable = NULL;}return true;}
0 0
- 检测TCP端口占用状态的函数
- 检测TCP端口占用状态的函数
- 检测UDP端口占用状态的函数
- 检测UDP端口占用状态的函数
- Java检测端口的占用情况
- TCP连接端口的状态
- 检测端口是否占用
- 网络端口占用情况检测
- 【检测tor程序占用9050端口的办法和解决问题】
- tcp/udp端口占用查询
- TCP端口状态说明
- TCP端口状态详解
- TCP端口状态详解
- TCP端口状态说明
- 计算机端口状态说明和解决占用的方法
- 有关TCP端口占用的问题及解决
- 查看端口状态及端口占用情况
- udo/tcp协议占用端口列表(因5060被占用而采用的新端口)
- 提高php代码效率的若干写法(真的很实用)
- Spark pipe 实例
- 测试人员的绩效考核应该如何开展?
- AppDelegate详解
- MySQL 5.6 一主多从的 半同步复制搭建(已纠正)
- 检测TCP端口占用状态的函数
- iOS 类别和扩展的区别
- Android Activity的lauchmod的理解
- Cordova-Android 插件开发
- 堆排序
- Android之ListView的高级封装!
- 设置PDO的错误处理模式
- DLAN(UPNP)主流开源库的官网及SDK下载地址
- RNNLM的使用方法