端口与系统进程关联代码2

Windows进程系列文章(1) -- 系统中端口与进程之间的关联 如果发现一些从没见过的端口号,你怎样分辨出该端口是不是木马开放的端口?或者在进程列表中发现陌生的进程时,是否想知道该进程在你的系统中开了什么端口?    一、根据进程查端口号  首先在开始菜单的“运行”框中输入“cmd.exe”进入命令提示符窗口,先键入“tasklist”命令将列出系统正在运行的进程列表,把你要查的进程所对应的“PID”号记下或复制。    小资料:单击右键菜单中的标记,然后将你 阅读详情
这两天想系统的看一下N API,所以就找了一段代码读了一下。这段代码实现了端口与系统关联的作用。里面用了3个N API

NtQuerySystemInformation

NtQueryObject

NtDeviceIoControlFile

【2】

代码如下:

//
//
//Coded By Napalm ,
//Modified By ZwelL ,
//Note By Gxter             BLOG : gxter.bokee.com


//实现的功能:可以看做是端口与进程关联。

#include "windows.h"
#include "stdio.h"
#include "string.h"
#include <psapi.h>
#include <shlwapi.h>

#pragma comment(lib, "psapi.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "shlwapi.lib")


typedef LONG NTSTATUS;
typedef VOID *POBJECT;
#define SystemHandleInformation  16

typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR Buffer;
} UNICODE_STRING;

typedef UNICODE_STRING OBJECT_NAME_INFORMATION;
typedef UNICODE_STRING *POBJECT_NAME_INFORMATION;

#define STATUS_SUCCESS                ((NTSTATUS)0x00000000L)
#define STATUS_INFO_LENGTH_MISMATCH       ((NTSTATUS)0xC0000004L)


typedef
struct
_SYSTEM_HANDLE
{
    ULONG       uIdProcess;
    UCHAR       ObjectType;    // OB_TYPE_* (OB_TYPE_TYPE, etc.)
    UCHAR       Flags;        // HANDLE_FLAG_* (HANDLE_FLAG_INHERIT, etc.)
    USHORT         Handle;
    POBJECT         pObject;
    ACCESS_MASK    GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;

typedef
struct
_SYSTEM_HANDLE_INFORMATION
{
    ULONG           uCount;
    SYSTEM_HANDLE     Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;


//----------------------------------------------------------------------------------
typedef LONG TDI_STATUS;
typedef PVOID CONNECTION_CONTEXT;        // connection context

#define IOCTL_TDI_QUERY_INFORMATION      CTL_CODE(FILE_DEVICE_TRANSPORT, 4, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

#define TDI_QUERY_ADDRESS_INFO           0x00000003

//IRP 的 IO_STATUS_BLOCK   结构
typedef struct _IO_STATUS_BLOCK {
    union
{
        NTSTATUS Status;
        PVOID Pointer;
    };
    ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef void (WINAPI * PIO_APC_ROUTINE)(PVOID, PIO_STATUS_BLOCK, DWORD);


//下面这3个结构构造了一个TDI的信息结构
typedef struct _TDI_REQUEST
{
    union
{
        HANDLE AddressHandle;
        CONNECTION_CONTEXT ConnectionContext;
        HANDLE ControlChannel;
    } Handle;

    PVOID RequestNotifyObject;
    PVOID RequestContext;
    TDI_STATUS TdiStatus;
} TDI_REQUEST, *PTDI_REQUEST;

typedef struct _TDI_CONNECTION_INFORMATION
{
    LONG UserDataLength;        // length of user data buffer
    PVOID UserData;            // pointer to user data buffer
    LONG OptionsLength;        // length of following buffer
    PVOID Options;             // pointer to buffer containing options
    LONG RemoteAddressLength;   // length of following buffer
    PVOID RemoteAddress;        // buffer containing the remote address
} TDI_CONNECTION_INFORMATION, *PTDI_CONNECTION_INFORMATION;

typedef struct _TDI_REQUEST_QUERY_INFORMATION
{
    TDI_REQUEST Request;
    ULONG QueryType;             // class of information to be queried.
    PTDI_CONNECTION_INFORMATION RequestConnectionInformation;
} TDI_REQUEST_QUERY_INFORMATION, *PTDI_REQUEST_QUERY_INFORMATION;
//-----------------------------------NtDeviceIoControlFile
typedef
NTSTATUS
(WINAPI *tNTQSI)(DWORD SystemInformationClass,
     PVOID SystemInformation,
                 DWORD SystemInformationLength,
     PDWORD ReturnLength);

typedef
NTSTATUS
(WINAPI *tNTQO)(HANDLE ObjectHandle,
    DWORD ObjectInformationClass,
    PVOID ObjectInformation,
                DWORD Length,
    PDWORD ResultLength);

typedef
NTSTATUS
(WINAPI *tNTDIOCF)(HANDLE FileHandle,
       HANDLE Event,
       PIO_APC_ROUTINE ApcRoutine,
       PVOID ApcContext,
                   PIO_STATUS_BLOCK IoStatusBlock,
       DWORD IoControlCode,
                   PVOID InputBuffer,
       DWORD InputBufferLength,
                   PVOID OutputBuffer,
       DWORD OutputBufferLength);


//-----------------------------------NtQuerySystemInformation

#define ObjectNameInformation           1
#define STATUS_BUFFER_OVERFLOW           ((NTSTATUS)0x80000005L)

//-----------------------------------NtQueryObject


void EnableDebugPrivilege();
LPWSTR GetObjectName(HANDLE hObject);
void OutputConnectionDetails(HANDLE hObject, in_addr *ip, DWORD *port);

int main()
{
unsigned long pid = 0, newpid = 0;
EnableDebugPrivilege();

printf("Coded By Napalm , Modified By ZwelL , note by Gxter/n/n");
printf("Process   ,PID   ,HANDLE   ,DEVICE     ,IP ADDR   ,Port /n/n");

tNTQSI pNTQSI = (tNTQSI)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "NtQuerySystemInformation");
if(pNTQSI == NULL)
{
  printf("error  GetProcAddress !/n");
  getchar();
}

DWORD dwSize = sizeof(SYSTEM_HANDLE_INFORMATION);
PSYSTEM_HANDLE_INFORMATION  pSHinfo = (PSYSTEM_HANDLE_INFORMATION) new BYTE[dwSize];
NTSTATUS ntReturn = pNTQSI(SystemHandleInformation, pSHinfo, dwSize, &dwSize);

if(ntReturn == STATUS_INFO_LENGTH_MISMATCH)
{
         delete pSHinfo;
         pSHinfo = (PSYSTEM_HANDLE_INFORMATION) new BYTE[dwSize];

         ntReturn = pNTQSI(SystemHandleInformation, pSHinfo, dwSize, &dwSize);
    }
else
  printf("error pNTQSI !/n");

if(ntReturn == STATUS_SUCCESS)
{
  for(DWORD dwIdx = 0; dwIdx < pSHinfo->uCount; dwIdx++)
        {
   //printf("pid : %d", pSHinfo->Handles[dwIdx].uIdProcess);  //进程ID
   //printf("   handle:%d", pSHinfo->Handles[dwIdx].Handle);  //句柄
   //printf("   TYPE:%d", pSHinfo->Handles[dwIdx].ObjectType); //句柄的类型
   //printf("   access:%x/n", pSHinfo->Handles[dwIdx].pObject);
   
   //根据进程ID,打开进程
   HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                    FALSE, pSHinfo->Handles[dwIdx].uIdProcess);
   if(hProcess != INVALID_HANDLE_VALUE)
   {
    HANDLE hObject = NULL;
    //这个函数用处很大,大概的作用就是,复制一个个内核对象的句柄
    //从目标进程中复制一个句柄出来
    if(DuplicateHandle(hProcess, (HANDLE)pSHinfo->Handles[dwIdx].Handle,
     GetCurrentProcess(), &hObject, STANDARD_RIGHTS_REQUIRED, FALSE, 0) != FALSE)
                {
     //根据复制出来的句柄,得到句柄的类型名
     LPWSTR lpwsName = GetObjectName(hObject);
     if(lpwsName != NULL)
     {
      //printf("%S/n", lpwsName);
      //getchar();
      //过滤出用语网络通信的句柄
      
      if(!wcscmp(lpwsName, L"//Device//Tcp") || !wcscmp(lpwsName, L"//Device//Udp") || !wcscmp(lpwsName, L"//Device//RawIp"))
                        {
       LPSTR lpszProcess = new CHAR[MAX_PATH];
       struct in_addr ipaddr;
       DWORD port;
      
       OutputConnectionDetails(hObject, &ipaddr, &port);
       ZeroMemory(lpszProcess, MAX_PATH);
       //通过一个进程的句柄,来得出程序的完整路径 + 程序名
       GetModuleFileNameEx(hProcess, NULL, lpszProcess, MAX_PATH);

       //显示信息部分
       if(lpszProcess[0] == '?')
        printf("[SYSTEM]");
       else
        printf("%s/n", lpszProcess);
       printf("%6d", pSHinfo->Handles[dwIdx].uIdProcess);
       printf("%9d", pSHinfo->Handles[dwIdx].Handle);
       printf("%15S", lpwsName);
       printf("%18s", inet_ntoa(ipaddr));
       printf("%6d/n", port);
      
       delete lpszProcess;
                        }
      
      //printf("%15S/n", lpwsName);
                        delete lpwsName;
     }
     CloseHandle(hObject);
    }
    CloseHandle(hProcess);
   }
  }

  printf("当前共有 %d 个句柄/n",pSHinfo->uCount);
}
else
  printf("error for() !/n");

getchar();
return 0;
}

//
void EnableDebugPrivilege()
{
    HANDLE hToken;
    TOKEN_PRIVILEGES tokenPriv;
    LUID luidDebug;
    if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken) != FALSE) {
        if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luidDebug) != FALSE)
        {
             tokenPriv.PrivilegeCount            = 1;
             tokenPriv.Privileges [0].Luid       = luidDebug;
             tokenPriv.Privileges [0].Attributes = SE_PRIVILEGE_ENABLED;
             AdjustTokenPrivileges(hToken, FALSE, &tokenPriv, sizeof(tokenPriv), NULL, NULL);
        }
    }
}

//
LPWSTR GetObjectName(HANDLE hObject)
{
    LPWSTR lpwsReturn = NULL;
//get  NtQueryObject  address
    tNTQO pNTQO = (tNTQO)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "NtQueryObject");
    if(pNTQO != NULL)
{
        DWORD dwSize = sizeof(OBJECT_NAME_INFORMATION);
  //其实就是UNICODE 类型的指针
        POBJECT_NAME_INFORMATION pObjectInfo = (POBJECT_NAME_INFORMATION) new BYTE[dwSize];
        //调用  NtQueryObject    句柄      函数功能选择         是UNICODE格式的
  NTSTATUS ntReturn = pNTQO(hObject, ObjectNameInformation, pObjectInfo, dwSize, &dwSize);
        if(ntReturn == STATUS_BUFFER_OVERFLOW)
  {
             delete pObjectInfo;
             pObjectInfo = (POBJECT_NAME_INFORMATION) new BYTE[dwSize];
             //调用 NtQueryObject
    ntReturn = pNTQO(hObject, ObjectNameInformation, pObjectInfo, dwSize, &dwSize);
        }
        if((ntReturn >= STATUS_SUCCESS) && (pObjectInfo->Buffer != NULL))
        {
   //对UNICODE的处理
            lpwsReturn = (LPWSTR) new BYTE[pObjectInfo->Length + sizeof(WCHAR)];
            ZeroMemory(lpwsReturn, pObjectInfo->Length + sizeof(WCHAR));
            CopyMemory(lpwsReturn, pObjectInfo->Buffer, pObjectInfo->Length);
        }
        delete pObjectInfo;
    }
    return lpwsReturn;
}

//
void OutputConnectionDetails(HANDLE hObject, in_addr *ip, DWORD *port)
{
//得到  NtDeviceIoControlFile 地址
    tNTDIOCF pNTDIOCF = (tNTDIOCF)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "NtDeviceIoControlFile");
    if(pNTDIOCF != NULL)
{
  //这是一个IRP头的一部分,IO_STATUS_BLOCK 结构
        IO_STATUS_BLOCK IoStatusBlock;
        TDI_REQUEST_QUERY_INFORMATION  tdiRequestAddress = {{0}, TDI_QUERY_ADDRESS_INFO};
        BYTE tdiAddress[128];

        HANDLE hEvent2 = CreateEvent(NULL, TRUE, FALSE, NULL);
        NTSTATUS ntReturn2 = pNTDIOCF(hObject,  //一个复制出来的进程句柄
          hEvent2, //事件
          NULL,
          NULL,
          &IoStatusBlock,  //OUT 接受返回信息
          IOCTL_TDI_QUERY_INFORMATION, //TDI结构
          &tdiRequestAddress,
          sizeof(tdiRequestAddress),
          &tdiAddress, //OUT
          sizeof(tdiAddress));
        if(hEvent2)
   CloseHandle(hEvent2);

        if(ntReturn2 == STATUS_SUCCESS)
  {
   //读取  返回的信息
             struct in_addr *pAddr = (struct in_addr *)&tdiAddress[14];
             *ip = *pAddr;
             *port = ntohs(*(PUSHORT)&tdiAddress[12]);
        }
    }
}


/*

这个程序基本读完了,可是最后的疑问就是:  NtDeviceIoControlFile这个函数的作用和其参数的作用

也想知道从什么地方可以有每个 N API的介绍?????

NTSYSAPI
NTSTATUS
NTAPI
NtDeviceIoControlFile(

  IN HANDLE               FileHandle,
  IN HANDLE               Event OPTIONAL,
  IN PIO_APC_ROUTINE      ApcRoutine OPTIONAL,
  IN PVOID                ApcContext OPTIONAL,
  OUT PIO_STATUS_BLOCK    IoStatusBlock,
  IN ULONG                IoControlCode,
  IN PVOID                InputBuffer OPTIONAL,
  IN ULONG                InputBufferLength,
  OUT PVOID               OutputBuffer OPTIONAL,
  IN ULONG                OutputBufferLength );

我们感兴趣的成员变量有这几个:
FileHandle标明了要通信的设备的句柄,
IoStatusBlock指向接收最后完成状态和请求操作信息的变量,
IoControlCode是指定要完成的特定的I/O控制操作的数字,
InputBuffer包含了输入的数据,
长度为按字节计算的InputBufferLength,
相似的还有OutputBuffer和OutputBufferLength。



//-------------------------------------------------------------------------------

NTSYSAPI
NTSTATUS
NTAPI
NtQueryObject(

  IN HANDLE               ObjectHandle OPTIONAL,  //对象句柄
  IN OBJECT_INFORMATION_CLASS ObjectInformationClass, // *
  OUT PVOID               ObjectInformation,   // *
  IN ULONG                Length,
  OUT PULONG              ResultLength );

这是第2个参数的信息,每一个代表一个种类型的信息,也代表了一种信息结构
(也就是说,第2个参数,和第3个参数是,对应关系的)

typedef enum _OBJECT_INFORMATION_CLASS
{
  ObjectBasicInformation,   // Result is OBJECT_BASIC_INFORMATION structure
  ObjectNameInformation,   // Result is OBJECT_NAME_INFORMATION structure
  ObjectTypeInformation,   // Result is OBJECT_TYPE_INFORMATION structure
  ObjectAllInformation,   // Result is OBJECT_ALL_INFORMATION structure
  ObjectDataInformation   // Result is OBJECT_DATA_INFORMATION structure
  
} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;


这上函数是查询系统(内核)对象的,(在WIN系统中,有两类对象,一个是内核对象,一个是用户对象)

*/


/*
NTSYSAPI
NTSTATUS
NTAPI
NtQuerySystemInformation(

  IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
  OUT PVOID               SystemInformation,
  IN ULONG                SystemInformationLength,
  OUT PULONG              ReturnLength OPTIONAL );


//------------------------------------------------------------------------------

BOOL DuplicateHandle(
  HANDLE hSourceProcessHandle,  // handle to the source process  源进程句柄
  HANDLE hSourceHandle,         // handle to duplicate   
  HANDLE hTargetProcessHandle,  // handle to process to duplicate to
  LPHANDLE lpTargetHandle,  // pointer to duplicate handle
  DWORD dwDesiredAccess,    // access for duplicate handle
  BOOL bInheritHandle,      // handle inheritance flag
  DWORD dwOptions           // optional actions
);

我想,你大概是想知道DuplicateHandle()该如何用.

在系统中,对象分两类:核心对象和用户对象.如进程对象,线程对象,文件映射
对象等就是核心对象;而向窗口,菜单等都是用户对象.

   两者是有差别的,用于标示用户对象的句柄是系统唯一的,也就是说,一个进程
完全可以对另外一个进程中的用户对象进行操作,比如两个进程间通信的方法之一,
就是发送消息.正是由于窗口是用户对象,所以句柄是系统唯一,通过FindWindow(),
得到另外一个进程的窗口句柄,然后用SendMessage(),让hWnd的窗口过程来处理消
息,实现了进程间的通信.因此,对于用户对象,你根本不用DuplicateHandle(),直接
把句柄拿来用就行了.

   而核心对象则不一样.核心对象是为了加强系统的稳定性,因此,核心对象句柄是
进程相关的,在每一个进程中都有一个核心对象表,每一个对象的索引(不完全是)作为
内核对象的句柄,从而实现进程相关.同一个对象在不同的进程中可能有不同的索引,即句柄.
对核心对象进行操作时,系统还要进行安全检验,看一下你是否有权来操作这个对象.
因此你不能同用户对象一样,直接把句柄拿过来用.比方说,你想操作另一个进程中的文件映射对象,
这个文件映射对象句柄在那个进程中假设是0x000001,但在你的进程中,很有可能0x00000001时表示
另一个核心对象,此时的操作就永远不会成功,甚至会产生灾难性的后果.此时,就有必要用DuplicateHandle().

DuplicateHandle(),要涉及到三个进程,(一般很少有这种情况,最多的是两个进程).
第一个是你调用DuplicateHandle()函数的线程.第二个是你的源进程,第三个是目的进程.
hSourceHandle,是你要复制的核心对象句柄.调用这个函数后,系统将检索对象名空间,
找到内核对象,增加计数,然后在你的目的进程中的核心对象表中,为这个对象分配一个
索引,这个索引作为目的进程中该内核对象的句柄.然后你还要通知(发消息)目的进程说
"喂,你现在可以用这个核心对象了",目的进程才可以操作该对象.
  
不知道,我回答的清不清楚?

一句话,用于复制进程或线程句柄
netstat命令实战:快速定位端口占用与进程关联 在计算机网络管理与系统运维中,端口是进程间通信的关键端点。理解端口与进程的映射关系,是排查网络故障、优化资源配置的基础。通过TCP/IP协议栈,操作系统内核维护着端口状态机,如LISTEN、ESTABLISHED等,这些状态直接反映了网络连接的生命周期。掌握端口占用情况的诊断技术,对于保障服务可用性、分析安全威胁具有重要价值。netstat作为跨平台的内置网络统计工具,能够直观展示本地地址、远程地址、连接状态及进程PID等核心信息,是实现“由进程查端口”和“由端口查进程”的经典方案。本文聚焦于netstat 阅读详情

相关推荐

系统进程与端口监控工具:查看与管理端口占用

在现代计算机系统中,进程是运行中的程序实例,是系统资源分配和调度的独立单位。一个进程可以拥有多个线程,而线程是进程中的执行单元,负责执行程序的代码。理解进程的定义对于系统性能管理和故障诊断至关重要。端口是计算机网络中的一个逻辑概念,它主要用来标识主机中的一个进程或服务。在计算机网络通信中,端口被分配给网络应用或服务,以区分不同的数据流,确保数据能够准确地发送给目标应用程序。端口通过端口号来识别,端口号是一个16位的无符号整数,其取值范围为0到65535。

weixin_30021053的博客 958

TDI过滤获取IP及端口

TDI过滤驱动获取IP地址及连接端口要涉及关于TDI的一些结构体,当接收到含有TDI的TDI_CONNECT连接IRP请求时,IRP请求栈顶的的参数parameters就是指向TDI_REQUEST_KERNEL_CONNECT结构体的指针,实际上,这个结构体就是TDI_REQUEST_KERNEL。这个结构体定义在tdikrnl.h中定义如下: typedef struct _TDI_REQU

TrustNature 1788

Windows XP端口与进程管理工具使用指南

在开始深入探讨Windows XP中的进程管理之前,让我们先揭开进程与端口这两个IT领域基本概念的神秘面纱。在操作系统中,进程是系统进行资源分配和调度的一个独立单位,是应用程序运行时的抽象表示。每个进程都有自己的地址空间、内存、系统资源和其他进程间的交互方式。进程是程序的一次执行,可以理解为执行中的程序。在Windows XP操作系统中,进程管理负责监视和控制所有进程,确保系统的稳定运行。进程的作用是多方面的:资源分配:操作系统通过进程来管理CPU、内存、I/O设备等资源的分配。

weixin_42607969的博客 879

NtQueryObject 在 win8 x86 x64 下获取不到指定句柄文件名的原因

由于研发的需要,碰到了这样一个问题,用 NtQueryInformationFile 列出系统的所有句柄,然后找到指定句柄的文件名,然后将文件拷贝出来。但是  在 win8 x86  x64 下却获取不到指定句柄文件名,在国外论坛 与 MSDN 中到处疯狂搜索都没找到原因。调试了 N 次,才发现在 win8 x86  x64 系统下 ObjectTypeNumber 不再等于 28,  win7

sffdsafsf的专栏 1828

XCAT集群管理实战:从裸机到节点批量部署

在数据中心与HPC集群运维中,裸机配置与操作系统批量部署是关键环节。PXE引导、IPMI带外管理等基础技术为自动化装机提供了底层支持,而集群管理工具则将这些能力整合为可扩展的运维体系。XCAT作为一款开源集群管理工具,通过数据库驱动的方式统一管理DHCP、TFTP、HTTP等服务,实现从裸机发现、系统安装到电源控制的全流程自动化。本文从XCAT的核心设计出发,详细介绍了环境准备、安装配置、节点定义、镜像分发及常见问题排查,帮助运维人员快速构建高效的集群部署流程,降低规模化管理的复杂度。

weixin_30899023的博客 241

基于Lora的一主多从监测与控制系统

题目:基于Lora的远程农业监测与控制系统 目的:通过Lora子节点采集好各种传感器的信息,发送给汇聚节点,汇聚节点将数据通过ESP8266上传至云端,使用了微信小程序进行监测与控制

热爱生活、奋斗前行 7841

进程-端口-IP地址关联演示2

声明:        此份代码参考了“Hook 系统服务隐藏端口”和http://topic.youkuaiyun.com/t/20050105/17/3701810.html#|的一些代码片断和内容,以及对iphlpapi的反汇编才有了这份代码。并且是在原文章"进程-端口-IP地址关联演示"补充和扩展。在"进程-端口-IP地址关联演示"中是没法获取远程IP地址和端口的,现在这份代码已经算比较完美的解决了

chenhui530的专栏 5339

AArch64 ARM64 寄存器介绍

除了上述通用寄存器,还有FPSR(浮点状态寄存器)和 FPCR(浮点控制寄存器)等。X29寄存器和X30寄存器在函数调用和堆栈帧的管理中扮演着关键角色。AArch64架构提供了31个通用寄存器,每个寄存器都可以用作64位X寄存器(X0~X30)或32位W寄存器(W0~W30)。使用X寄存器将导致64位的计算,使用W寄存器将导致32位的计算。EL0、EL1、EL2和EL3是AArch64架构中定义的四个特权级别(Exception Levels),用于支持不同的执行环境和特权级别。

lml435035844的博客 1万+

在Windows系统中,你可以通过以下方法查看被占用的端口及其关联的进程

通过以上方法,你可以快速定位并管理Windows中被占用的端口。某些端口可能被系统服务或安全软件占用,需确认后再操作。操作需谨慎,终止系统关键进程可能导致系统不稳定。(可选)以管理员身份运行,确保获取完整信息。:以数字形式显示地址和端口(不解析域名)。:显示占用端口的进程ID(PID)。切换到“详细信息”选项卡,找到对应。列表,直接显示端口号及对应的进程。在“详细信息”选项卡中找到对应。过滤特定端口(例如查看端口。:显示所有连接和监听端口。替换为实际进程ID,(管理员权限更佳)。

GuoGuoABC 4875

【PLIO学习总结】laserMapping中的时间戳与状态更新逻辑

本文仅用于个人学习总结记录。如有错误,请批评指正。

larrydong的博客 1646

如何玩转腾讯云轻量级服务器(新手向)

如何玩转腾讯云轻量级服务器(新手向) ​ 相信不少同学都想将自己的服务器部署到云服务器,让别人通过自己的域名就可以访问到自己的项目,而腾讯云轻量级服务器作为一个小型的应用,支持域名解析和可视化运维等。比较适合新手入门 ​ 本文服务器操作系统为Centos7 一. 购买以及基本配置 1.购买方式 ​ 本文主要面向新手,毕竟一般只有新手才会购买轻量级服务器。所以可以选择购买一年的来学习,以后再根据需要换,前提提示(轻量级服务器没有安全组的,开放端口直接开启防火墙里的即可) ​ 购买连接 购买完成后点击控制

qq_46160687的博客 1万+

端口关联进程-在核心态的实现方法

很多关于端口关联进程的方法都是在用户态实现的,如fport等,结合大虾们的方法,这里给出一种在核心态实现的方法,方法可能比较笨 ^_^大概是1.用ZwQuerySystemInformation列出系统所有的句柄2.找出类型为SOCKET的句柄3.根据SYSTEM_HANDLE_INFORMATION.object的一些数据,用NtDeviceIoControlFile得到端口相关信息这种方法在用

2290

TriCore架构-如何将系统刷成HSM

本文介绍了芯片刷写操作流程:首先加载project_Merge.s19文件,进入UCB界面展开BMHD0_ORIG和BMHD1_ORIG。重点说明需要将STAD地址从原始值A0000000修改为0XA00A0000,并详细描述了编辑、更新和写入芯片的步骤。最后提示在HSM刷写过程中如遇错误可能需要输入密码。该操作涉及关键地址修改,需谨慎执行。

xiandang8023的博客 95

进程--端口关联(源代码)

//////////////////////////////////////////////////////////////////////////////////////////// 作者 beiyu http://beiyu.bokee.com// 内核态实现进程和端口关联,在WINDOWS2000.xp,2003下可以用。// 感谢Leven公布了他的代码,增加了区分tcp,udp,增加了操

mk1721的专栏 566

置顶必读(1) |《YOLOv11实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 12万+

【数据集】米级别热红外卫星合集:SDGSAT-1、HotSat-1等

米级别热红外卫星合集:SDGSAT-1、HotSat-1等

WW、forever的博客 1248

利用未公开函数枚举进程及其关联的端口系列之(二)

 .flyoutMenu { background-color: #FFFFFF; border-color: #6699cc; border-width: 1px 1px 1px 1px; border-style: solid;}.flyoutMenu TD.flyoutLink { border-color: #F0F0F0; border-width:

Civet148的专栏 2057

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

内核态实现进程和端口关联

////////////////////////////////////////////////////////////////////////////////////////////  作者 beiyu http://beiyu.bokee.com//  内核态实现进程和端口关联,在WINDOWS2000.xp,2003下可以用。//  感谢Leven公布了他的代码,增加了区分tcp,udp,增

1210

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Window 通过cmd查看端口占用、相应进程、杀死进程等的命令

参考 博文01:https://blog.youkuaiyun.com/qq_35923749/article/details/83786794 博文02:https://blog.youkuaiyun.com/qq_24754061/article/details/82660756 1.查看所有进程的端口使用信息 Windows键 + R ,在弹出的运行窗口中输入cmd,在cmd窗口中输入netstat -ano显示协...

博雅勇士的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Linux系统之查看进程监听端口方法

Linux系统之查看进程监听端口方法

jks212454的博客 1万+

如何通过端口号快速定位进程

在工作中经常会遇到需要根据端口号来确认所在进程的场景,一般来说可以使用lsof命令和netstat命令结合来确认,这篇文章通过具体示例来进行使用说明。

知行合一 止于至善 3091

linux系统命令 losf详解(查看当前系统上所有打开的文件和与之关联的进程)

lsof`(List Open Files)命令在Linux系统中用于查看当前系统上所有打开的文件和与之关联的进程。每个进程在系统中都有文件描述符,用于指向打开的文件,这些文件可以是磁盘文件、网络套接字、管道等。`lsof`命令可以帮助用户了解哪些文件被哪个进程打开,以及这些文件的状态信息。命令可以帮助系统管理员或者开发人员诊断和排查各种与文件访问相关的问题。

weixin_70208651的博客 5999

【TCP/IP】【调试】Linux下进程与端口号相互查看的方法

- 本文整理了Linux下进程及其占用端口号的相互查看的方法。

一介草民,只为生活。 964

进程--端口关联(源代码)收藏!!

//////////////////////////////////////////////////////////////////////////////////////////// 作者 beiyu http://beiyu.bokee.com// 内核态实现进程和端口关联,在WINDOWS2000.xp,2003下可以用。// 感谢Leven公布了他的代码,增加了区分tcp,udp,增加了操

FISH 的专栏 2461

netstat 查看网络连接关联进程

netstat 查看进程的核心是关联网络连接与进程平台关联进程的核心命令关键参数Linux(监听端口)/ `sudo netstat -anpgrep ESTABLISHED`(已连接)macOS(显示PID)+(查进程名)-p(仅PID)Windows(PID)/(进程名,需管理员)-o(PID)、-b(进程名)ps -ef(所有进程)、top(实时进程);tasklist(命令行)、任务管理器(图形界面)。

保持热爱。 1346
上一篇: Win2K下关联进程/端口之代码初步分析
下一篇: 用C实现简单的EPO
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值