社区
网络编程
帖子详情
如何查看本机有哪些端口被打开?
flyinwuhan
2005-06-08 02:02:17
编程实现,不是用netstat -a命令
如果能得到打开此端口的进程的信息,再送100分
...全文
339
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;
}
Linux如何
查看
端口
是否
打开
?
在Linux系统中,
查看
端口
是否
打开
可以通过命令来完成,这其中比较常见的命令为lsof命令、netstat命令,本文重点为大家介绍一下lsof命令,我们一起来学习一下吧。lsof命令用于
查看
你进程
打开
的文件、
打开
文件的进程、...
查看
本机
开放的
端口
号,
查看
某个
端口
号是否被占用,
查看
被占用的
端口
号被哪个进程所占用,如何结束该进程
利用快捷键win+R键
打开
运行窗口。...1:
查看
本机
开放的
端口
,即已被占用的
端口
号。 命令: netstat -an 部分结果列表: Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0
Linux如何
查看
端口
是否开放?
在Linux系统,
查看
端口
是否开放是非常基本的需求,而且通过
查看
端口
开放的状态,可以了解哪些服务正在运行,那么Linux如何
查看
端口
是否开放?如果输出中包含了80
端口
的信息,并且状态为LISTEN,则表示该
端口
处于监听...
本地
端口
被占用?
查看
端口
被谁占用了?
怎么
查看
被占用的
端口
以windows举例。
如何
查看
本机
开放
端口
如何
查看
本机
开放
端口
默认状态下,Windows XP系统会
打开
很多“服务
端口
”,同时在你上网的时候也会
打开
一些动态窗口。想要
查看
本地电脑
打开
了哪些
端口
、有哪些电脑正在与本地电脑交换数据,盖茨大叔已经在windows ...
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章