判断是tcp,udp以及关闭windows下的端口
1.c语言代码2.编译命令另外的程序 检测端口程序的编译命令 ports.c gcc port_tool.c -o port_tool.exe -lws2_32 -lpsapi -static3. port_tool.c 代码#include stdio.h #include stdlib.h #include string.h #include winsock2.h #include windows.h #include tlhelp32.h #include ws2tcpip.h #include shellapi.h #pragma comment(lib, ws2_32.lib) #pragma comment(lib, user32.lib) #pragma comment(lib, shell32.lib) // 颜色定义 #define COLOR_RESET 7 #define COLOR_GREEN 10 #define COLOR_YELLOW 14 #define COLOR_CYAN 11 #define COLOR_RED 12 #define COLOR_GRAY 8 void SetColor(int color) { HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); } // 检查是否管理员 BOOL IsRunningAsAdmin() { BOOL isAdmin FALSE; PSID adminGroup NULL; SID_IDENTIFIER_AUTHORITY ntAuthority SECURITY_NT_AUTHORITY; if (AllocateAndInitializeSid(ntAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, adminGroup)) { CheckTokenMembership(NULL, adminGroup, isAdmin); FreeSid(adminGroup); } return isAdmin; } // 自动提权 void ElevateSelf() { char exePath[MAX_PATH]; GetModuleFileName(NULL, exePath, MAX_PATH); ShellExecute(NULL, runas, exePath, NULL, NULL, SW_SHOWNORMAL); exit(0); } // 执行CMD命令并获取输出 char* ExecuteCommand(const char* cmd) { char buffer[4096] {0}; char* result (char*)malloc(8192); if (!result) return NULL; result[0] \0; FILE* pipe _popen(cmd, r); if (!pipe) { free(result); return NULL; } while (fgets(buffer, sizeof(buffer), pipe) ! NULL) { strcat(result, buffer); } _pclose(pipe); return result; } // 通过PID获取进程名 char* GetProcessNameByPID(DWORD pid) { static char processName[256] 未知进程; HANDLE hSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot INVALID_HANDLE_VALUE) { return processName; } PROCESSENTRY32 pe; pe.dwSize sizeof(PROCESSENTRY32); if (Process32First(hSnapshot, pe)) { do { if (pe.th32ProcessID pid) { strcpy(processName, pe.szExeFile); char* dot strstr(processName, .exe); if (dot) *dot \0; CloseHandle(hSnapshot); return processName; } } while (Process32Next(hSnapshot, pe)); } CloseHandle(hSnapshot); return processName; } // 端口信息结构体 typedef struct { BOOL isTCP; BOOL isUDP; DWORD pid; char processName[256]; } PortInfo; // 检测端口 PortInfo DetectPort(int port) { PortInfo info {FALSE, FALSE, 0, 未知进程}; char cmd[256]; char* output NULL; sprintf(cmd, netstat -ano | findstr \:%d \, port); output ExecuteCommand(cmd); if (output strlen(output) 0) { char* line strtok(output, \n); while (line) { if (strstr(line, UDP)) { info.isUDP TRUE; char* lastSpace strrchr(line, ); if (lastSpace) { while (*lastSpace ) lastSpace; info.pid atoi(lastSpace); } } else if (strstr(line, LISTENING) || strstr(line, ESTABLISHED)) { info.isTCP TRUE; char* lastSpace strrchr(line, ); if (lastSpace) { while (*lastSpace ) lastSpace; info.pid atoi(lastSpace); } } if (info.pid 0) { char* name GetProcessNameByPID(info.pid); strcpy(info.processName, name); } line strtok(NULL, \n); } } free(output); // 主动探测 if (!info.isTCP !info.isUDP) { WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), wsaData) 0) { SOCKET sock; struct sockaddr_in addr; addr.sin_family AF_INET; addr.sin_port htons(port); addr.sin_addr.s_addr inet_addr(127.0.0.1); // TCP测试 sock socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock ! INVALID_SOCKET) { u_long mode 1; ioctlsocket(sock, FIONBIO, mode); connect(sock, (struct sockaddr*)addr, sizeof(addr)); fd_set fdSet; FD_ZERO(fdSet); FD_SET(sock, fdSet); struct timeval timeout; timeout.tv_sec 0; timeout.tv_usec 500000; if (select(0, NULL, fdSet, NULL, timeout) 0) { info.isTCP TRUE; } closesocket(sock); } // UDP测试 sock socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock ! INVALID_SOCKET) { struct sockaddr_in localAddr; localAddr.sin_family AF_INET; localAddr.sin_port htons(port); localAddr.sin_addr.s_addr INADDR_ANY; if (bind(sock, (struct sockaddr*)localAddr, sizeof(localAddr)) ! 0) { info.isUDP TRUE; char cmd2[256]; sprintf(cmd2, netstat -ano | findstr \UDP\ | findstr \:%d \, port); char* out2 ExecuteCommand(cmd2); if (out2 strlen(out2) 0) { char* lastSpace strrchr(out2, ); if (lastSpace) { while (*lastSpace ) lastSpace; info.pid atoi(lastSpace); if (info.pid 0) { char* name GetProcessNameByPID(info.pid); strcpy(info.processName, name); } } } free(out2); } closesocket(sock); } WSACleanup(); } } return info; } // 结束进程 BOOL KillProcess(DWORD pid) { HANDLE hProcess OpenProcess(PROCESS_TERMINATE, FALSE, pid); if (hProcess NULL) { return FALSE; } BOOL result TerminateProcess(hProcess, 0); CloseHandle(hProcess); return result; } // 主程序 int main() { // 自动提权 if (!IsRunningAsAdmin()) { MessageBox(NULL, 端口检测工具需要管理员权限才能正常工作\n点击确定后自动请求提权..., 权限提示, MB_OK | MB_ICONINFORMATION); ElevateSelf(); return 0; } SetColor(COLOR_CYAN); printf(\n); printf( 端口检测工具 v2.0 (C语言版)\n); printf(\n\n); SetColor(COLOR_RESET); WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), wsaData); while (1) { SetColor(COLOR_CYAN); printf(请输入端口号 (输入 0 退出): ); SetColor(COLOR_RESET); char input[32]; fgets(input, sizeof(input), stdin); input[strcspn(input, \n)] 0; int port atoi(input); if (port 0) { break; } if (port 1 || port 65535) { SetColor(COLOR_RED); printf(❌ 无效端口号请输入 1-65535 之间的数字\n\n); SetColor(COLOR_RESET); continue; } printf(\n 正在检测端口 %d...\n\n, port); PortInfo info DetectPort(port); SetColor(COLOR_GREEN); printf( 检测结果 \n); if (info.isTCP info.isUDP) { SetColor(COLOR_GREEN); printf(✅ 端口 %d: TCP UDP 都在使用\n, port); } else if (info.isTCP) { SetColor(COLOR_GREEN); printf(✅ 端口 %d: TCP 协议\n, port); } else if (info.isUDP) { SetColor(COLOR_GREEN); printf(✅ 端口 %d: UDP 协议\n, port); } else { SetColor(COLOR_GRAY); printf(❌ 端口 %d: 未检测到任何服务\n, port); SetColor(COLOR_RESET); printf(\n\n按任意键继续...); getchar(); printf(\n); continue; } if (info.pid 0) { SetColor(COLOR_YELLOW); printf( 占用进程: %s (PID: %d)\n, info.processName, info.pid); SetColor(COLOR_RESET); printf(\n是否结束该进程以释放端口? (y/n): ); char choice[8]; fgets(choice, sizeof(choice), stdin); if (choice[0] y || choice[0] Y) { if (KillProcess(info.pid)) { SetColor(COLOR_GREEN); printf(✅ 已结束进程 %s (PID: %d)端口已释放\n, info.processName, info.pid); SetColor(COLOR_RESET); } else { SetColor(COLOR_RED); printf(❌ 结束进程失败请检查是否有足够权限\n); SetColor(COLOR_RESET); } } } else { SetColor(COLOR_GRAY); printf( 端口未被占用无需关闭\n); SetColor(COLOR_RESET); } SetColor(COLOR_GREEN); printf(\n); SetColor(COLOR_RESET); printf(\n按任意键继续...); getchar(); printf(\n\n); } WSACleanup(); SetColor(COLOR_CYAN); printf(感谢使用\n); SetColor(COLOR_RESET); return 0; }

相关新闻

群晖Video Station影视信息增强插件:三步安装实现智能媒体库管理

群晖Video Station影视信息增强插件:三步安装实现智能媒体库管理

群晖Video Station影视信息增强插件:三步安装实现智能媒体库管理 【免费下载链接】syno-videoinfo-plugin A simple web scraping plugin for Synology Video Station 项目地址: https://gitcode.com/gh_mirrors/sy/syno-videoinfo-plugin 还在为群晖Video S…

2026/7/1 20:42:15阅读更多 →
前端安全实战:从XSS攻击原理到防御体系构建

前端安全实战:从XSS攻击原理到防御体系构建

1. 项目概述:从“不能按的按钮”到XSS攻防实战最近在社区里看到一个挺有意思的讨论,有位老师上课讲前端知识,展示了一个“不能按的按钮”,结果有同学发现这个按钮在某些情况下竟然能被触发。这个看似简单的现象,背后其…

2026/7/1 20:42:15阅读更多 →
让 AI Agent 学会收发邮件:Agent Mail CLI 配置体验与玩法

让 AI Agent 学会收发邮件:Agent Mail CLI 配置体验与玩法

文章目录一、为什么 Agent 需要邮箱能力?二、Agent Mail CLI 配置流程三、实战一:让 Agent 自动整理资料并发邮件四、实战二:让 Agent 查看今天邮件并提取待办任务五、Agent Mail 还能怎么玩?1. AI 技术日报2. 论文跟踪助手3. 发票…

2026/7/1 20:42:15阅读更多 →
基于Playwright与MCP协议构建AI驱动的智能自动化测试系统

基于Playwright与MCP协议构建AI驱动的智能自动化测试系统

1. 项目概述:当AI遇见自动化测试 最近在测试圈和开发圈里,一个组合被频繁提起:Playwright MCP。听起来像是某种新的技术栈,但它的核心其实更酷——它试图回答一个困扰我们很久的问题:自动化测试的门槛能不能再低一点&…

2026/7/1 22:02:36阅读更多 →
备战2026大厂Java岗:从八股到AI,这份面试记录帮你快速上岸(含答案)

备战2026大厂Java岗:从八股到AI,这份面试记录帮你快速上岸(含答案)

小编本次是给面试中高级Java开发人员准备的面试题,还有晋升学习路线大钢,希望可以帮助到大家! 本次内容涵盖:Java基础,JVM,多线程,数据库(MySQL/Redis)SSM,Du…

2026/7/1 22:02:36阅读更多 →
Jmeter二次开发实现RSA加密函数:解决性能测试中加密接口压测难题

Jmeter二次开发实现RSA加密函数:解决性能测试中加密接口压测难题

1. 项目概述:当性能测试遇上RSA加密最近在做一个金融项目的性能压测,接口安全要求高,大量请求参数都要求用RSA非对称加密。直接用Jmeter自带的函数助手?太天真了,那点功能根本不够看,处理不了动态密钥、长文…

2026/7/1 22:02:36阅读更多 →
o1模型深度解析:组合式推理与可验证思考链的技术实现

o1模型深度解析:组合式推理与可验证思考链的技术实现

1. 项目概述:当“草莓”模型横空出世,我们到底在兴奋什么? 去年八月起,“strawberry”这个代号就像一颗投入AI湖面的石子,涟漪越扩越大——不是因为某篇论文的严谨推导,而是源于开发者社群里一句句“它真的…

2026/7/1 22:02:36阅读更多 →
Agent软件引擎:从代码编写到意图交付的工程范式革命

Agent软件引擎:从代码编写到意图交付的工程范式革命

1. 项目概述:当“写代码”变成“指挥AI团队”——一场静默却彻底的工程范式迁移 你有没有过这种体验:凌晨三点,盯着一段报错的Python脚本,反复检查缩进、括号、变量名拼写,而真正卡住你的,其实是一个业务逻…

2026/7/1 22:02:36阅读更多 →
Claude长上下文记忆的数学本质:状态压缩与动态重建

Claude长上下文记忆的数学本质:状态压缩与动态重建

1. 项目概述:当AI开始“记住”你说话的上下文,背后不是魔法,是数学重构“AI能记住我上一句话说了什么”——这句话听起来像科幻片里的设定,但今天它已真实落地在Claude这类模型的日常交互中。长上下文记忆、渐进式注意力衰减、分层…

2026/7/1 21:57:35阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/1 0:01:44阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/1 0:01:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/1 0:01:44阅读更多 →