识别进程正在特定端口C/C++Windows中运行
Identify process is running in certain port C/C++ Windows
有人能告诉我如何使用C/C++识别哪个进程正在Windows的某个端口中运行吗。我想写一个简单的端口扫描仪。当我发现一些端口被打开时,我还想打印每个端口中正在运行的进程。谢谢
#include <stdio.h>
#include <string>
void executeCMD(const char *cmd, char *result)
{
char buf_ps[1024];
char ps[1024]={0};
FILE *ptr;
strcpy(ps, cmd);
if((ptr=popen(ps, "r"))!=NULL)
{
while(fgets(buf_ps, 1024, ptr)!=NULL)
{
strcat(result, buf_ps);
if(strlen(result)>1024)
break;
}
pclose(ptr);
ptr = NULL;
}
else
{
printf("popen %s errorn", ps);
}
}
int main()
{
char result[1024];
executeCMD( "netstat -ano", result);
printf("%s", result );
return 0;
}
也许,你可以试一试!
我有一个在C++中使用Qt的解决方案:
/**
* brief Find all ids of processes that is listening to any port.
* return A key-value map that keys are ports and values are corresponding process id.
*/
QMap<uint, uint> findAllProcessesListeningToAnyPort()
{
QMap<uint, uint> portToProcessId;
QString netstatOutput;
{
QProcess process;
process.start("netstat -ano -p tcp");
process.waitForFinished();
netstatOutput = process.readAllStandardOutput();
}
QRegularExpression processFinder;
{
const auto pattern = R"(TCP[^:]+:(?<port>d+).+LISTENINGs+(?<pid>d+))";
processFinder.setPattern(pattern);
}
auto processInfoItr = processFinder.globalMatch(netstatOutput);
while (processInfoItr.hasNext())
{
const auto processInfo = processInfoItr.next();
const auto port = processInfo.captured("port").toUInt();
const auto processId = processInfo.captured("pid").toUInt();
portToProcessId.insert(port, processId);
}
return portToProcessId;
}
相关文章:
- Windows运行时组件C 结构/类返回到UWP
- 如何在静态库中引用Windows运行时类
- visual在源代码中是否有预定义的#define或其他方式来了解它是为C++/CX Windows运行时编译的
- Windows 运行时 (WP 8) 进程外组件和引发/订阅事件
- 重写 Windows 运行时组件中的 ToString
- Windows运行中的目录搜索工作原理
- 如何从用C#编写的类库中引用用C++编写的Windows运行时组件
- 如何在方法中将自定义 WinRT 类型从 c# 传递到 c++ Windows 运行时组件
- 尝试在 Windows Phone 静态库项目 (C++) 中使用 Windows 运行时扩展
- C# / C++应用程序在从Windows运行时崩溃,但不是从Visual Studio
- 从 C# 加载C++ Windows 运行时组件时出现异常
- 在Windows运行时组件中使用WRL获取文件夹路径返回空字符串
- 在Linux中编译的程序;t检测'n'在Windows运行时所在的fstream中换行
- 压缩库Windows运行时
- WACK测试在Windows运行时元数据验证上失败
- Windows运行时库依赖和纯C代码
- visual studio 2015-UWP C#应用程序调用用C++编写的Windows运行时组件
- windows运行时-{c++}程序在没有visual Studio的计算机上运行时会发送错误0xc00007b
- 使用Python代码从Windows运行命令
- windows 7运行qt终端