社区
网络编程
帖子详情
如何查看本机有哪些端口被打开?
flyinwuhan
2005-06-08 02:02:17
编程实现,不是用netstat -a命令
如果能得到打开此端口的进程的信息,再送100分
...全文
308
7
打赏
收藏
如何查看本机有哪些端口被打开?
编程实现,不是用netstat -a命令 如果能得到打开此端口的进程的信息,再送100分
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;
}
CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与端
Re:CCNA_CCNP 思科网络认证 PAT NAT
端口
或地址转换 与
端口
映射 ====================== # 本章课程大纲 公网地址和私网地址 NAT应用场景 ...
Windows
查看
端口
是否已
打开
在默认状态下,Windows会
打开
很多“服务
端口
”,如果你想
查看
本机
打开
了哪些
端口
、有哪些电脑正在与
本机
连接,可以使用以下两种方法。1.利用netstat命令Windows提供了netstat命令,能够显示当前的 TCP/IP 网络连接...
怎样
查看
本机
打开
的
端口
?
怎样
查看
本机
打开
的
端口
? https://zhidao.baidu.com/question/203087246.html Netstat,显示协议统计和当前的 TCP/IP 网络连接。 -a,显示所有连接和侦听
端口
。服务器连接通常不显示。 -n,以数字格式显示地址...
Linux如何
查看
端口
是否
打开
?
在Linux系统中,
查看
端口
是否
打开
可以通过命令来完成,这其中比较常见的命令为lsof命令、netstat命令,本文重点为大家介绍一下lsof命令,我们一起来学习一下吧。lsof命令用于
查看
你进程
打开
的文件、
打开
文件的进程、...
如何
查看
计算机中的
端口
占用情况,电脑如何
查看
端口
是否被占用?CMD
查看
端口
占用开放情况...
端口
是很多软件和服务用于通讯的,但是实际上会有很多软件或服务
端口
使用同一个
端口
,这就导致一个
端口
被占用后,另一个也需要该
端口
的应用无法正常工作,那么如何
查看
端口
被占用呢?这里我们可以使用CMD命令来
查看
...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章