检测UDP端口占用状态的函数
来源:互联网 发布:自建app软件 编辑:程序博客网 时间:2024/05/18 01:37
#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 CheckUdpPortState( IN unsigned num);int main (void){CheckUdpPortState(57016);return 0;}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
- 检测UDP端口占用状态的函数
- 检测UDP端口占用状态的函数
- 检测TCP端口占用状态的函数
- 检测TCP端口占用状态的函数
- 关于Java UDP的端口占用问题
- Java检测端口的占用情况
- 检测端口是否占用
- tcp/udp端口占用查询
- 网络端口占用情况检测
- 【检测tor程序占用9050端口的办法和解决问题】
- 计算机端口状态说明和解决占用的方法
- 检测UDP端口是否开放
- 查看端口状态及端口占用情况
- 查看tcp/udp端口占用命令
- 使用 go 写一个检测 tcp udp 状态的包
- java检测端口号是否配占用
- win10 端口占用 检测和解决方法
- 端口占用的解决办法
- EXP报错:exp-00003:未找到段(0,0)定义
- 图片转换
- 设计模式第二堂课
- 用wxBot和图灵机器人API实现微信群聊机器人
- 记一个Android Installer的bug
- 检测UDP端口占用状态的函数
- MapReduce常见计算模式
- 一个产品需要关注的指标
- 定义表的约束
- mac上使用生成RSA公钥和密钥
- mac电脑安装brew软件管理工具
- IDEA scheme设置
- 利用小米数据库查找手机归属地
- 如何从DataTable 中取得你要的数组