gdtcc特产

导航

详细的查询进程和端口的 API 的方法

查询进程和端口的 API 介绍:

                         

好,上面说的有点离题了,这篇博文的目的在应用层而不在内核层,

所以我们无须去体会 Windows 网络层的这种变化。

一般来说,要完成进程和端口的映射,我们使用的是由 IPHlpapi.dll 中导出的 API 来完成的,

在 Vista 之前的操作系统中,要查询进程和端口的信息,容易很多,

你可以通过调用 IPHlpapi.dll 中导出的下面两个 API 来完成查询 TCP 和 UDP 端口的信息,

下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,

(下面的两个 API 仅适用于 XP 和 Server 2003,在 Vista 以及 7 中,这两个 API 被移除)

   1: DWORD WINAPI AllocateAndGetTcpExTableFromStack(
   2:   __out         PVOID* ppTcpTable,
   3:   __in          BOOL bOrder,
   4:   __in          HANDLE hHeap,
   5:   __in          DWORD dwFlags,
   6:   __in          DWORD dwFamily
   7: );
   8:  
   9: DWORD WINAPI AllocateAndGetUdpExTableFromStack(
  10:   __out         PVOID* ppUDPTable,
  11:   __in          BOOL bOrder,
  12:   __in          HANDLE hHeap,
  13:   __in          DWORD dwFlags,
  14:   __in          DWORD dwFamily
  15: );
  16:  

参数说明:

第一个参数:很显然,为输出参数,带回我们查询到的 TCP 或者 UDP 信息;

第二个参数:也很显然,判断输出结果是否排序;

第三个参数:指定在哪个 Heap 上分配内存;

第四个参数:指定用来控制 Heap 的标识;

第四个参数:指定 IP_V4 还是 IP_V6,具体看下面的截图:

image

                         

不过要完成进程和端口的映射在 Vista 和 7 下确实也没那么容易,至于原因呢,

就是 IPHlpapi.dll 中关于查询进程和端口信息的 API 没有公开,即为 UnDocument API,

不过我们还是可以通过 UnDocument API 来完成这个查询的工作,具体涉及到下面的两个 API,

当然,下面的这两个 API 由于是 UnDocumnet API,自然你查什么 MSDN 啊之类都找不到这个 API 的声明的,

下面的两个 API 分别用来查询 TCP 和 UDP 端口信息,

   1: //=====================================================================================//
   2: //Name: DWORD InternalGetTcpTable2()                                                   //
   3: //                                                                                     //
   4: //Descripion: 该函数在 Windows Vista 以及 Windows 7 下面效                                    //
   5: //                                                                                     //
   6: //=====================================================================================//
   7: typedef DWORD (WINAPI *PFNInternalGetTcpTable2)(
   8:     PMIB_TCPEXTABLE_VISTA *pTcpTable_Vista,
   9:     HANDLE heap,
  10:     DWORD flags
  11:     );
  12:  
  13: //=====================================================================================//
  14: //Name: DWORD InternalGetUdpTableWithOwnerPid()                                        //
  15: //                                                                                     //
  16: //Descripion: 该函数在 Windows Vista 以及 Windows 7 下面效                                    //
  17: //                                                                                     //
  18: //=====================================================================================//
  19: typedef DWORD (WINAPI *PFNInternalGetUdpTableWithOwnerPid)(
  20:     PMIB_UDPEXTABLE *pUdpTable,
  21:     HANDLE heap,
  22:     DWORD flags
  23:     );

参数说明:

第一个参数:pTcpTable_Vista 或者 pUdpTable 则不需要多说,其为输出参数,带回查询到的值;

第二个参数:heap 也不需要多说,其指示要从哪个 Heap 上面分配内存;

第三个参数:flags 则未知,一般都设置为 1,不过貌似设置为 2 啊之类的好像又多影响不大;

posted on 2012-02-20 17:04  gdtcc特产  阅读(722)  评论(0)    收藏  举报