社区
网络编程
帖子详情
如何查看本机有哪些端口被打开?
flyinwuhan
2005-06-08 02:02:17
编程实现,不是用netstat -a命令
如果能得到打开此端口的进程的信息,再送100分
...全文
319
7
打赏
收藏
如何查看本机有哪些端口被打开?
编程实现,不是用netstat -a命令 如果能得到打开此端口的进程的信息,再送100分
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
songsu
2005-06-23
打赏
举报
回复
MARK
flyinwuhan
2005-06-09
打赏
举报
回复
谢谢2位,但是利用shellexec 执行cmd还是不符合要求
flyinwuhan
2005-06-08
打赏
举报
回复
谢谢2位,怎么都是调用cmd啊,难道netstat的内部实现是微软的秘密?
luoxiangdong
2005-06-08
打赏
举报
回复
ShellExecute "tasklist/V /FI PID eq 848" 取得指定PID的进程详细信息
bohut
2005-06-08
打赏
举报
回复
2执行dos命令“netstat -a”获得打开的端口号
#define EXECDOSCMD "netstat -a"
BOOL ExecDosCmd()
{
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
return FALSE;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
//关键步骤,CreateProcess函数参数意义请查阅MSDN
if (!CreateProcess(NULL, EXECDOSCMD
,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
return FALSE;
}
CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
//buffer中就是执行的结果,可以保存到文本,也可以直接输出
printf(buffer);
Sleep(200);
}
return TRUE;
}
luoxiangdong
2005-06-08
打赏
举报
回复
ShellExec "netstat -a -o" 取输出流
bohut
2005-06-08
打赏
举报
回复
1.获得端口对应的进程名称
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
typedef struct _HandleInfo
{
USHORT wPid;
USHORT wCreatorBackTraceIndex;
BYTE objType;
BYTE handleAttibs;
USHORT handleOffset;
DWORD dwKeObject;
ULONG dwGrantedAccess;
}HANDLEINFO, *PHANDLEINFO;
int main(int argc, char* argv[])
{
WSADATA wd;
unsigned int ret = WSAStartup(0x0202, &wd);
typedef DWORD (WINAPI *PQuerySystemInformation)(DWORD, PBYTE, DWORD, PDWORD);
PQuerySystemInformation pQuerySystemInformation = (PQuerySystemInformation)GetProcAddress(GetModuleHandle("ntdll.dll"), "ZwQuerySystemInformation");
if(pQuerySystemInformation == NULL)
{
MessageBox(NULL, "Can't find NtQuerySystemInformation int Ntdll.dll!", "Failed", 0);
return 1;
}
BYTE *buf = new BYTE[20];
PHANDLEINFO phandleinfo = NULL;
DWORD dwRetSize = 0;
DWORD dwNum = 0;
unsigned int i;
ret = pQuerySystemInformation(16, buf,20,&dwRetSize);
if(0 != ret)
{
if(dwRetSize > 0)
{
//dwNum = dwRetSize/sizeof(HANDLEINFO);
delete [] buf;
buf = new BYTE[dwRetSize];
ret = pQuerySystemInformation(16, buf, dwRetSize, &dwRetSize);
if(0 != ret)
{
printf("Can't get any handles!\n");
goto end;
}
}
else
{
goto end;
}
}
dwNum = *(DWORD*)buf;
phandleinfo = (PHANDLEINFO)(buf+4);
for(i=0;i<dwNum;i++)
{
//static int iCount = 0;
//static WORD wPid = -1;
HANDLEINFO *pSeek = phandleinfo + i;
if((pSeek->objType==0x1a) && (pSeek->wPid))
{
//iCount++;
//wPid = pSeek->wPid;
HANDLE hSrcProcess;
hSrcProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE, pSeek->wPid);
if(hSrcProcess == NULL)
continue;
__try
{
SOCKET hSock;
ret = DuplicateHandle(hSrcProcess, (HANDLE)(pSeek->handleOffset), GetCurrentProcess(), (HANDLE *)&hSock, STANDARD_RIGHTS_REQUIRED,TRUE,0);
if(ret == 0)
{
int errcode = GetLastError();
continue;
}
sockaddr_in in = {0};
in.sin_family = AF_INET;
int dwSize = sizeof(in);
if(SOCKET_ERROR != getsockname(hSock, (sockaddr *)&in, &dwSize))
{
char name[0x100] = {0};
HMODULE hDll = LoadLibrary("psapi.dll");
typedef DWORD (WINAPI *PGETMODULEFILENAMEEX)(HANDLE, HMODULE, LPTSTR, DWORD);
//typedef BOOL (WINAPI *PENUMPROCESSMODULES)(HANDLE, HMODULE*, DWORD, LPDWORD);
PGETMODULEFILENAMEEX pfunc = (PGETMODULEFILENAMEEX)GetProcAddress(hDll, "GetModuleFileNameExA");
//PENUMPROCESSMODULES penum = (PENUMPROCESSMODULES)GetProcAddress(hDll, "EnumProcessModules");
//DWORD dwCb, dwRet;
//HMODULE module[1000];
//ret = penum(hSrcProcess
pfunc(hSrcProcess, NULL, name, 0x100);
FreeLibrary(hDll);
printf("socket:%4d port:%4d PID:%4d(%s)\n", pSeek->handleOffset, ntohs(in.sin_port), pSeek->wPid, name);
}
}
__finally
{
CloseHandle(hSrcProcess);
}
}
}
getchar();
end:
delete [] buf;
return 0;
}
怎样
查看
本机
打开
的
端口
?
怎样
查看
本机
打开
的
端口
? https://zhidao.baidu.com/question/203087246.html Netstat,显示协议统计和当前的 TCP/IP 网络连接。 -a,显示所有连接和侦听
端口
。服务器连接通常不显示。 -n,以数字格式显示地址...
Linux如何
查看
端口
是否
打开
?
在Linux系统中,
查看
端口
是否
打开
可以通过命令来完成,这其中比较常见的命令为lsof命令、netstat命令,本文重点为大家介绍一下lsof命令,我们一起来学习一下吧。lsof命令用于
查看
你进程
打开
的文件、
打开
文件的进程、...
Android如何
查看
UDP
端口
,udp
端口
如何
打开
?UDP
端口
测试介绍
说到udp相信大家都不了解它是什么,有什么作用,其实简单的说,udp就是一个传输数据过程中的一个通道,也就是说我们平时通过qq或者其他软件传数据时,就需要udp
端口
的开通。在日常使用计算机的过程中,我们常常会不...
查看
本机
开放了哪些
端口
?
其中Local Address代表
本机
IP地址和
打开
的
端口
号(图中
本机
打开
了135
端口
),Foreign Address是远程计算机IP地址和
端口
号,State表明当前TCP的连接状态,图中LISTENING是监听状态,表明
本机
正在
打开
135
端口
监
Linux如何
查看
端口
是否开放?
在Linux系统,
查看
端口
是否开放是非常基本的需求,而且通过
查看
端口
开放的状态,可以了解哪些服务正在运行,那么Linux如何
查看
端口
是否开放?如果输出中包含了80
端口
的信息,并且状态为LISTEN,则表示该
端口
处于监听...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章