windows下查询端口是否被占用
来源:互联网 发布:mac下载flash插件慢 编辑:程序博客网 时间:2024/06/06 08:54
windows下的一个查询端口是否被占用的函数,若端口被占用,则输出占用该端口的进程。
若有问题和宝贵意见,还请不吝赐教。
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;}
bool CheckUdpPortState(IN unsigned num ){PMIB_UDPTABLE_OWNER_PID pUdpTable;pUdpTable = new MIB_UDPTABLE_OWNER_PID;//获取所需要的内存大小DWORD tmpSize = sizeof(MIB_UDPTABLE_OWNER_PID); GetExtendedUdpTable( pUdpTable, &tmpSize,false , AF_INET, UDP_TABLE_OWNER_PID, 0);//分配足够大小的内存并获取端口信息DWORD dwSize = tmpSize/sizeof(MIB_UDPTABLE_OWNER_PID);delete pUdpTable;pUdpTable = NULL;pUdpTable = new MIB_UDPTABLE_OWNER_PID[dwSize];GetExtendedUdpTable( pUdpTable, &tmpSize, true, AF_INET, UDP_TABLE_OWNER_PID, 0);HANDLE provileges = NULL;LUID Luid;//提权操作if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES| TOKEN_QUERY, &provileges) ){long res = GetLastError();cout<<"error code"<<res<<endl;if (pUdpTable != NULL){delete []pUdpTable;pUdpTable = NULL;}return false;}if (!LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Luid)){cout<<"LookupPrivilegeValue err!"<<endl;if (pUdpTable != NULL){delete []pUdpTable;pUdpTable = 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 (pUdpTable != NULL){delete []pUdpTable;pUdpTable = NULL;}return false;}//判断端口是否被占用,并找出占用端口的进程,对于某些system权限的进程需要提权for (int i = 0; i < (int) pUdpTable->dwNumEntries; i++) {if ( num == ntohs( (u_short) pUdpTable->table[i].dwLocalPort ) ){HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, pUdpTable->table[i].dwOwningPid);if ( hProcess == NULL ){long res = GetLastError();cout<<"error code"<<res<<endl;if (pUdpTable != NULL){delete []pUdpTable;pUdpTable = 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["<<pUdpTable->table[i].dwOwningPid<<L"]"<<endl;CloseHandle(hProcess);}else{CloseHandle(hProcess);hProcess = NULL;if (pUdpTable != NULL){delete []pUdpTable;pUdpTable = NULL;}return false;}}}if (pUdpTable != NULL){delete []pUdpTable;pUdpTable = NULL;}return true;}
0 0
- windows下查询端口是否被占用
- windows下查看端口是否被占用
- windows下查看端口是否被占用
- 查询端口是否被占用
- windows下如何查看端口是否被占用
- Windows下使用JAVA检测端口是否已被占用
- 怎么在windows下查看"80"端口是否被占用
- windows下 命令行 查看本地端口是否被占用
- windows下查看某端口是否被占用
- windows下端口被占用
- 如何查询端口号是否被占用
- 查询80端口是否被占用
- 如何查询端口是否被占用
- llinux系统查询端口是否被占用
- 查询端口号是否被占用指令
- windows下关于如何查询现在某个端口是否被占用,占用这个端口的进程
- windows 如何查看端口是否被占用 .
- WINDOWS查看特定端口是否被占用?
- 对“Halcon视频教程第一章 第二节”的学习感悟
- Oracle 11.2 自动部署安装
- openstack oslo.messaging库
- linux命令详解之ls命令
- 加了就Toast就报错了
- windows下查询端口是否被占用
- Oracle相关操作
- 机器学习公开课笔记 包括 官网的原始讲义(NG机器学习) 以及个人笔记
- getClass().getClassLoader()为null
- 线索二叉树
- WordPress及其插件与主题
- 05-S3C2440学习之内核(移植)linux3.4.2移植(2)之yffs2文件系统移植+内核裁剪+内核制作补丁
- 算法导论 思考题 8-2
- Mysql经常性忘记的sql语句基本的运算