杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2095|回复: 0

NSIS检测端口是否被占用

[复制链接]
发表于 2019-3-1 21:56:48 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. !include "Ports.nsh"
  2. XPStyle on
  3. OutFile "Nsistest.exe"
  4. Name "test"
  5. Section "test"
  6. ${Unless} ${TCPPortOpen} 8000
  7. MessageBox MB_OK "httpd running"
  8. ${EndUnless}
  9. ${If} ${UDPPortOpen} 1337
  10. MessageBox MB_OK "leet port open :)"
  11. ${EndIf}
  12. SectionEnd
  13. # Usage:
  14. # Push "Tcp" or "Udp"
  15. # Push "port_number"
  16. # Call IsPortOpen
  17. # Pop $0 ; "open" or "closed" or anything else for error
  18. #
  19. # Or with the LogicLib
  20. # ${If} ${TCPPortOpen} 80
  21. # ${EndIf}
  22. # ${If} ${UDPPortOpen} 137
  23. # ${EndIf}
  24. #
  25. !include LogicLib.nsh
  26. Function IsPortOpen
  27. Exch $R0 # port to check
  28. Exch
  29. Exch $R1
  30. Push $0
  31. Push $1
  32. Push $2
  33. System::Call 'iphlpapi::Get$R1Table(*i.r0, *i .r1, i 1) i .r2'
  34. ${If} $2 != 122 # ERROR_INSUFFICIENT_BUFFER
  35. StrCpy $R0 ""
  36. Pop $2
  37. Pop $1
  38. Pop $0
  39. Exch $R1
  40. Exch
  41. Exch $R0
  42. Return
  43. ${EndIf}
  44. System::Alloc $1
  45. Pop $0
  46. System::Call 'iphlpapi::Get$R1Table(ir0, *i r1, i 1) i .r2'
  47. ${If} $2 != 0 # NO_ERROR
  48. System::Free $0
  49. StrCpy $R0 ""
  50. Pop $2
  51. Pop $1
  52. Pop $0
  53. Exch $R1
  54. Exch
  55. Exch $R0
  56. Return
  57. ${EndIf}
  58. Push $3
  59. Push $4
  60. Push $5
  61. System::Call *$0(i.r2)
  62. IntOp $2 $2 - 1
  63. ${For} $3 0 $2
  64. IntOp $4 $0 + 4 # skip dwNumEntries
  65. ${If} $R1 == "Tcp"
  66. IntOp $5 $3 * 20 # sizeof(MIB_TCPROW)
  67. IntOp $4 $4 + $5 # skip to entry
  68. System::Call *$4(i.r1,i,i.r4,i,i)
  69. ${If} $1 <> 2 # $1 = dwState, 2 = MIB_TCP_STATE_LISTEN
  70. ${Continue}
  71. ${EndIf}
  72. ${Else}
  73. IntOp $5 $3 * 8 # sizeof(MIB_UDPROW)
  74. IntOp $4 $4 + $5 # skip to entry
  75. System::Call *$4(i,i.r4)
  76. ${EndIf}
  77. System::Call ws2_32::ntohs(ir4)i.r4
  78. ${If} $4 = $R0
  79. StrCpy $R0 "open"
  80. ${Break}
  81. ${EndIf}
  82. ${Next}
  83. ${If} $R0 != "open"
  84. StrCpy $R0 "closed"
  85. ${EndIf}
  86. System::Free $0
  87. Pop $5
  88. Pop $4
  89. Pop $3
  90. Pop $2
  91. Pop $1
  92. Pop $0
  93. Exch $R1
  94. Exch
  95. Exch $R0
  96. FunctionEnd
  97. # LogicLib macros for IsPortOpen
  98. !macro _PortOpen _a _b _t _f
  99. !insertmacro _LOGICLIB_TEMP
  100. Push `${_a}`
  101. Push `${_b}`
  102. Call IsPortOpen
  103. Pop $_LOGICLIB_TEMP
  104. !insertmacro _== $_LOGICLIB_TEMP "open" `${_t}` `${_f}`
  105. !macroend
  106. !define PortOpen `PortOpen`
  107. !macro _TCPPortOpen _a _b _t _f
  108. !insertmacro _PortOpen Tcp `${_b}` `${_t}` `${_f}`
  109. !macroend
  110. !define TCPPortOpen `"" TCPPortOpen`
  111. !macro _UDPPortOpen _a _b _t _f
  112. !insertmacro _PortOpen Udp `${_b}` `${_t}` `${_f}`
  113. !macroend
  114. !define UDPPortOpen `"" UDPPortOpen`
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-17 21:02 , Processed in 0.107618 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表