现在的位置: 首页 > 综合 > 正文

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

2013年11月23日 ⁄ 综合 ⁄ 共 11515字 ⁄ 字号 评论关闭

声明:

        此份代码参考了“Hook 系统服务隐藏端口”和http://topic.csdn.net/t/20050105/17/3701810.html#|的一些代码片断和内容,以及对iphlpapi的反汇编才有了这份代码。并且是在原文章"进程-端口-IP地址关联演示"补充和扩展。在"进程-端口-IP地址关联演示"中是没法获取远程IP地址和端口的,现在这份代码已经算比较完美的解决了一系列问题。程序重新封装了GetTcpTable和GetUdpTable两个API函数,并且增加了两个函数的扩展版本GetTcpTableEx和GetUdpTableEx,主要的区别是前两个函数不能从端口关联到进程,后两个函数成功解决此问题。目前代码只在win2k/winxp/win2003上测试通过,由于本人没有vista就没办法测试了,有条件的朋友可以去测试一下。如果你还发现有什么bug请于我联系,谢谢!如果能把你修改的更完美的代码发给我一份的话,就更好了!!

        先贴关键代码,需要完整代码的可以下载,地址是:http://p.blog.csdn.net/images/p_blog_csdn_net/chenhui530/EntryImages/20080803/GetNetInfo.jpg

 

  1. Public Function GetTcpTable(ByVal Handle As LongAs MIB_TCPTABLE
  2.     Dim TcpRows() As MIB_TCPROW
  3.     Dim objQuery As TCP_REQUEST_QUERY_INFORMATION_EX
  4.     Dim hEvent As Long, hEvent1 As Long
  5.     Dim ntStatus As Long
  6.     Dim objIoStatusBlock As IO_STATUS_BLOCK
  7.     Dim TcpStats As MIB_TCPSTATS
  8.     hEvent = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  9.     If hEvent Then
  10.         objQuery.ID.toi_entity.tei_entity = &H400 'CO_TL_ENTITY;   tcp
  11.         objQuery.ID.toi_entity.tei_instance = 0
  12.         objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  13.         objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  14.         objQuery.ID.toi_id = &H1 'TCP_STATS_ID
  15.         ntStatus = NtDeviceIoControlFile(Handle, _
  16.                                         hEvent, _
  17.                                         ByVal 0&, _
  18.                                         ByVal 0&, _
  19.                                         objIoStatusBlock, _
  20.                                         &H120003, _
  21.                                         objQuery, _
  22.                                         LenB(objQuery), _
  23.                                         TcpStats, _
  24.                                         LenB(TcpStats))
  25.         If NT_SUCCESS(ntStatus) Then
  26.             hEvent1 = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  27.             If hEvent1 Then
  28.                 ZeroMemory objQuery, LenB(objQuery)
  29.                 ZeroMemory objIoStatusBlock, LenB(objIoStatusBlock)
  30.                 objQuery.ID.toi_entity.tei_entity = &H400 'CO_TL_ENTITY;   tcp
  31.                 objQuery.ID.toi_entity.tei_instance = 0
  32.                 objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  33.                 objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  34.                 objQuery.ID.toi_id = &H101 'TCP_MIB_ADDRTABLE_ENTRY_ID
  35.                 ReDim TcpRows(TcpStats.dwNumConns - 1)
  36.                 ntStatus = NtDeviceIoControlFile(Handle, _
  37.                                 hEvent1, _
  38.                                 ByVal 0&, _
  39.                                 ByVal 0&, _
  40.                                 objIoStatusBlock, _
  41.                                 &H120003, _
  42.                                 objQuery, _
  43.                                 LenB(objQuery), _
  44.                                 TcpRows(0), _
  45.                                 TcpStats.dwNumConns * LenB(TcpRows(0)))
  46.                 If NT_SUCCESS(ntStatus) Then
  47.                     GetTcpTable.dwNumEntries = objIoStatusBlock.uInformation / LenB(TcpRows(0))
  48.                     ReDim GetTcpTable.table(TcpStats.dwNumConns - 1)
  49.                     CopyMemory GetTcpTable.table(0), TcpRows(0), TcpStats.dwNumConns * LenB(TcpRows(0))
  50.                 End If
  51.             End If
  52.         End If
  53.     End If
  54.     If hEvent Then NtClose hEvent
  55.     If hEvent1 Then NtClose hEvent1
  56. End Function
  57. Public Function GetTcpTableEx(ByVal Handle As LongAs MIB_TCPTABLEEX
  58.     Dim TcpRows() As MIB_TCPROWEX
  59.     Dim objQuery As TCP_REQUEST_QUERY_INFORMATION_EX
  60.     Dim hEvent As Long, hEvent1 As Long
  61.     Dim ntStatus As Long
  62.     Dim objIoStatusBlock As IO_STATUS_BLOCK
  63.     Dim TcpStats As MIB_TCPSTATS
  64.     hEvent = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  65.     If hEvent Then
  66.         objQuery.ID.toi_entity.tei_entity = &H400 'CO_TL_ENTITY;   tcp
  67.         objQuery.ID.toi_entity.tei_instance = 0
  68.         objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  69.         objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  70.         objQuery.ID.toi_id = &H1 'TCP_STATS_ID
  71.         ntStatus = NtDeviceIoControlFile(Handle, _
  72.                                         hEvent, _
  73.                                         ByVal 0&, _
  74.                                         ByVal 0&, _
  75.                                         objIoStatusBlock, _
  76.                                         &H120003, _
  77.                                         objQuery, _
  78.                                         LenB(objQuery), _
  79.                                         TcpStats, _
  80.                                         LenB(TcpStats))
  81.         If NT_SUCCESS(ntStatus) Then
  82.             hEvent1 = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  83.             If hEvent1 Then
  84.                 ZeroMemory objQuery, LenB(objQuery)
  85.                 ZeroMemory objIoStatusBlock, LenB(objIoStatusBlock)
  86.                 objQuery.ID.toi_entity.tei_entity = &H400 'CO_TL_ENTITY;   tcp
  87.                 objQuery.ID.toi_entity.tei_instance = 0
  88.                 objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  89.                 objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  90.                 objQuery.ID.toi_id = &H102 'TCP_MIB_ADDRTABLE_ENTRY_EX_ID
  91.                 ReDim TcpRows(TcpStats.dwNumConns - 1)
  92.                 ntStatus = NtDeviceIoControlFile(Handle, _
  93.                                 hEvent1, _
  94.                                 ByVal 0&, _
  95.                                 ByVal 0&, _
  96.                                 objIoStatusBlock, _
  97.                                 &H120003, _
  98.                                 objQuery, _
  99.                                 LenB(objQuery), _
  100.                                 TcpRows(0), _
  101.                                 TcpStats.dwNumConns * LenB(TcpRows(0)))
  102.                 If NT_SUCCESS(ntStatus) Then
  103.                     GetTcpTableEx.dwNumEntries = objIoStatusBlock.uInformation / LenB(TcpRows(0))
  104.                     ReDim GetTcpTableEx.table(TcpStats.dwNumConns - 1)
  105.                     CopyMemory GetTcpTableEx.table(0), TcpRows(0), TcpStats.dwNumConns * LenB(TcpRows(0))
  106.                 End If
  107.             End If
  108.         End If
  109.     End If
  110.     If hEvent Then NtClose hEvent
  111.     If hEvent1 Then NtClose hEvent1
  112. End Function
  113. Public Function GetUdpTable(ByVal Handle As LongAs MIB_UDPTABLE
  114.     Dim UdpRows() As MIB_UDPROW
  115.     Dim objQuery As TCP_REQUEST_QUERY_INFORMATION_EX
  116.     Dim hEvent As Long, hEvent1 As Long
  117.     Dim ntStatus As Long
  118.     Dim objIoStatusBlock As IO_STATUS_BLOCK
  119.     Dim UdpStats As MIB_UDPSTATS
  120.     hEvent = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  121.     If hEvent Then
  122.         objQuery.ID.toi_entity.tei_entity = &H401 'CO_TL_ENTITY;   udp
  123.         objQuery.ID.toi_entity.tei_instance = 0
  124.         objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  125.         objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  126.         objQuery.ID.toi_id = &H1 'TCP_STATS_ID
  127.         ntStatus = NtDeviceIoControlFile(Handle, _
  128.                                         hEvent, _
  129.                                         ByVal 0&, _
  130.                                         ByVal 0&, _
  131.                                         objIoStatusBlock, _
  132.                                         &H120003, _
  133.                                         objQuery, _
  134.                                         LenB(objQuery), _
  135.                                         UdpStats, _
  136.                                         LenB(UdpStats))
  137.         If NT_SUCCESS(ntStatus) Then
  138.             hEvent1 = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  139.             If hEvent1 Then
  140.                 ZeroMemory objQuery, LenB(objQuery)
  141.                 ZeroMemory objIoStatusBlock, LenB(objIoStatusBlock)
  142.                 objQuery.ID.toi_entity.tei_entity = &H401 'CO_TL_ENTITY;   udp
  143.                 objQuery.ID.toi_entity.tei_instance = 0
  144.                 objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  145.                 objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  146.                 objQuery.ID.toi_id = &H101 'TCP_MIB_ADDRTABLE_ENTRY_ID
  147.                 ReDim UdpRows(UdpStats.dwNumAddrs - 1)
  148.                 ntStatus = NtDeviceIoControlFile(Handle, _
  149.                                 hEvent1, _
  150.                                 ByVal 0&, _
  151.                                 ByVal 0&, _
  152.                                 objIoStatusBlock, _
  153.                                 &H120003, _
  154.                                 objQuery, _
  155.                                 LenB(objQuery), _
  156.                                 UdpRows(0), _
  157.                                 UdpStats.dwNumAddrs * LenB(UdpRows(0)))
  158.                 If NT_SUCCESS(ntStatus) Then
  159.                     GetUdpTable.dwNumEntries = objIoStatusBlock.uInformation / LenB(UdpRows(0))
  160.                     ReDim GetUdpTable.table(UdpStats.dwNumAddrs - 1)
  161.                     CopyMemory GetUdpTable.table(0), UdpRows(0), UdpStats.dwNumAddrs * LenB(UdpRows(0))
  162.                 End If
  163.             End If
  164.         End If
  165.     End If
  166.     If hEvent Then NtClose hEvent
  167.     If hEvent1 Then NtClose hEvent1
  168. End Function
  169. Public Function GetUdpTableEx(ByVal Handle As LongAs MIB_UDPTABLEEX
  170.     Dim UdpRows() As MIB_UDPROWEX
  171.     Dim objQuery As TCP_REQUEST_QUERY_INFORMATION_EX
  172.     Dim hEvent As Long, hEvent1 As Long
  173.     Dim ntStatus As Long
  174.     Dim objIoStatusBlock As IO_STATUS_BLOCK
  175.     Dim UdpStats As MIB_UDPSTATS
  176.     hEvent = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  177.     If hEvent Then
  178.         objQuery.ID.toi_entity.tei_entity = &H401 'CO_TL_ENTITY;   udp
  179.         objQuery.ID.toi_entity.tei_instance = 0
  180.         objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  181.         objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  182.         objQuery.ID.toi_id = &H1 'TCP_STATS_ID
  183.         ntStatus = NtDeviceIoControlFile(Handle, _
  184.                                         hEvent, _
  185.                                         ByVal 0&, _
  186.                                         ByVal 0&, _
  187.                                         objIoStatusBlock, _
  188.                                         &H120003, _
  189.                                         objQuery, _
  190.                                         LenB(objQuery), _
  191.                                         UdpStats, _
  192.                                         LenB(UdpStats))
  193.         If NT_SUCCESS(ntStatus) Then
  194.             hEvent1 = CreateEvent(ByVal 0&, 0, 1, vbNullString)
  195.             If hEvent1 Then
  196.                 ZeroMemory objQuery, LenB(objQuery)
  197.                 ZeroMemory objIoStatusBlock, LenB(objIoStatusBlock)
  198.                 objQuery.ID.toi_entity.tei_entity = &H401 'CO_TL_ENTITY;   udp
  199.                 objQuery.ID.toi_entity.tei_instance = 0
  200.                 objQuery.ID.toi_class = &H200 'INFO_CLASS_PROTOCOL
  201.                 objQuery.ID.toi_type = &H100 'INFO_TYPE_PROVIDER
  202.                 objQuery.ID.toi_id = &H102 'TCP_MIB_ADDRTABLE_ENTRY_EX_ID
  203.                 ReDim UdpRows(UdpStats.dwNumAddrs - 1)
  204.                 ntStatus = NtDeviceIoControlFile(Handle, _
  205.                                 hEvent1, _
  206.                                 ByVal 0&, _
  207.                                 ByVal 0&, _
  208.                                 objIoStatusBlock, _
  209.                                 &H120003, _
  210.                                 objQuery, _
  211.                                 LenB(objQuery), _
  212.                                 UdpRows(0), _
  213.                                 UdpStats.dwNumAddrs * LenB(UdpRows(0)))
  214.                 If NT_SUCCESS(ntStatus) Then
  215.                     GetUdpTableEx.dwNumEntries = objIoStatusBlock.uInformation / LenB(UdpRows(0))
  216.                     ReDim GetUdpTableEx.table(UdpStats.dwNumAddrs - 1)
  217.                     CopyMemory GetUdpTableEx.table(0), UdpRows(0), UdpStats.dwNumAddrs * LenB(UdpRows(0))
  218.                 End If
  219.             End If
  220.         End If
  221.     End If
  222.     If hEvent Then NtClose hEvent
  223.     If hEvent1 Then NtClose hEvent1
  224. End Function
【上篇】
【下篇】

抱歉!评论已关闭.