WINDOWS下获得端口对应的进程名1

原创 2007年09月13日 22:34:00
 

#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;
}

查找Windows端口号对应的进程

  • 2013年09月21日 16:07
  • 685KB
  • 下载

一周乱弹(1,摸态框增加纵向滚动条2,jQuery 鼠标点击事件3,通过ajax实现批量导出。4,windows查询占用某个端口号程序并杀死其进程)

1,摸态框增加纵向滚动条 在摸态框的body标签上增加:style="height: 600px;overflow: auto" 2 jQuery 鼠标点击事件。 $(function(){...

linux下查看监听端口对应的进程

方法一  1.通过lsof命令查看PID  ipv4  [root@test proc]# lsof -Pnl +M -i4           COMMAND     PID     USE...

Android根据本地端口号寻找对应的用户UID和进程PID

1. 查看端口号 - adb shell 进入shell环境 - netstat命令查看本地端口号 2. 查找对应UID - 端口6259对应的16进制为1873 - cat /proc/ne...

win7 xp vista 下获取进程对应的ip地址和端口信息

win7 vista xp 获取进程id对应ip地址,端口 C++实现

linux下查看监听端口对应的进程

原文链接
  • awatm
  • awatm
  • 2014年05月31日 19:02
  • 372

查询端口号和对应进程

原文转载至:http://hi.baidu.com/linkinperk/item/9d365ebe2535d4412bebe36a 查询端口号和对应进程 一、根据进程查端口号   首...

获取tcp/udp端口对应的进程pid

可能有一些朋友想要做一些监视流量工具却不知道如何根据端口获取到进程的PID,如果你搜了一圈也没有找到满意的答案,希望我的这个文章可以帮到你。 1、获取当前活动的TCP/UDP端口值。 你会...

lsof 查看端口对应进程号详解

http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316599.html 简介 lsof(list open files)是一个列出当前...

linux下根据端口号查询对应进程

linux下根据端口号查询对应进程 2012-09-05 10:16:03     我来说两句       作者:zhongweijian收藏    我要投稿 linux下根据端口...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS下获得端口对应的进程名1
举报原因:
原因补充:

(最多只允许输入30个字)