正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- !include "Ports.nsh"
- XPStyle on
- OutFile "Nsistest.exe"
- Name "test"
- Section "test"
- ${Unless} ${TCPPortOpen} 8000
- MessageBox MB_OK "httpd running"
- ${EndUnless}
- ${If} ${UDPPortOpen} 1337
- MessageBox MB_OK "leet port open :)"
- ${EndIf}
- SectionEnd
- # Usage:
- # Push "Tcp" or "Udp"
- # Push "port_number"
- # Call IsPortOpen
- # Pop $0 ; "open" or "closed" or anything else for error
- #
- # Or with the LogicLib
- # ${If} ${TCPPortOpen} 80
- # ${EndIf}
- # ${If} ${UDPPortOpen} 137
- # ${EndIf}
- #
- !include LogicLib.nsh
- Function IsPortOpen
- Exch $R0 # port to check
- Exch
- Exch $R1
- Push $0
- Push $1
- Push $2
- System::Call 'iphlpapi::Get$R1Table(*i.r0, *i .r1, i 1) i .r2'
- ${If} $2 != 122 # ERROR_INSUFFICIENT_BUFFER
- StrCpy $R0 ""
- Pop $2
- Pop $1
- Pop $0
- Exch $R1
- Exch
- Exch $R0
- Return
- ${EndIf}
- System::Alloc $1
- Pop $0
- System::Call 'iphlpapi::Get$R1Table(ir0, *i r1, i 1) i .r2'
- ${If} $2 != 0 # NO_ERROR
- System::Free $0
- StrCpy $R0 ""
- Pop $2
- Pop $1
- Pop $0
- Exch $R1
- Exch
- Exch $R0
- Return
- ${EndIf}
- Push $3
- Push $4
- Push $5
- System::Call *$0(i.r2)
- IntOp $2 $2 - 1
- ${For} $3 0 $2
- IntOp $4 $0 + 4 # skip dwNumEntries
- ${If} $R1 == "Tcp"
- IntOp $5 $3 * 20 # sizeof(MIB_TCPROW)
- IntOp $4 $4 + $5 # skip to entry
- System::Call *$4(i.r1,i,i.r4,i,i)
- ${If} $1 <> 2 # $1 = dwState, 2 = MIB_TCP_STATE_LISTEN
- ${Continue}
- ${EndIf}
- ${Else}
- IntOp $5 $3 * 8 # sizeof(MIB_UDPROW)
- IntOp $4 $4 + $5 # skip to entry
- System::Call *$4(i,i.r4)
- ${EndIf}
- System::Call ws2_32::ntohs(ir4)i.r4
- ${If} $4 = $R0
- StrCpy $R0 "open"
- ${Break}
- ${EndIf}
- ${Next}
- ${If} $R0 != "open"
- StrCpy $R0 "closed"
- ${EndIf}
- System::Free $0
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- Exch $R1
- Exch
- Exch $R0
- FunctionEnd
- # LogicLib macros for IsPortOpen
- !macro _PortOpen _a _b _t _f
- !insertmacro _LOGICLIB_TEMP
- Push `${_a}`
- Push `${_b}`
- Call IsPortOpen
- Pop $_LOGICLIB_TEMP
- !insertmacro _== $_LOGICLIB_TEMP "open" `${_t}` `${_f}`
- !macroend
- !define PortOpen `PortOpen`
- !macro _TCPPortOpen _a _b _t _f
- !insertmacro _PortOpen Tcp `${_b}` `${_t}` `${_f}`
- !macroend
- !define TCPPortOpen `"" TCPPortOpen`
- !macro _UDPPortOpen _a _b _t _f
- !insertmacro _PortOpen Udp `${_b}` `${_t}` `${_f}`
- !macroend
- !define UDPPortOpen `"" UDPPortOpen`
复制代码
|