2015-12-23 101 views
2

我想要做的是指定幾個端口,然後檢查它們是否存在已建立的連接。我發現下面的腳本,它運行但它只列出了3個端口,我不明白爲什麼。我驗證了有關端口的活動規則(以及其他很多未在下面的輸出中列出的規則)。檢查TCP端口是否連接/建立?

Set objFirewall = CreateObject("HNetCfg.FwMgr") 
Set objPolicy = objFirewall.LocalPolicy.CurrentProfile 

Set colPorts = objPolicy.GloballyOpenPorts 

For Each objPort in colPorts 
    Wscript.Echo "Port name: " & objPort.Name 
    Wscript.Echo "Port number: " & objPort.Port 
    Wscript.Echo "Port protocol: " & objPort.Protocol 
    Wscript.Echo "Port enabled: " & objPort.Enabled 
Next 

我想我找到了the objectobjPort,但我甚至不看狀態屬性,所以我認爲這是錯誤的方向呢。

+1

嘗試http://ss64.com/nt/netstat.html – JosefZ

+0

我熟悉用netstat但沒有做一些重大的拼搶,這是不是一個真正的解決方案。除非有沒有無證的功能才能列出某些端口? –

+0

其餘的不會打開,可能是由於Windows防火牆 – Lankymart

回答

0

這很好。但是,我決定使用-b參數netstat來查找可執行文件名稱中的字符串(本例中爲「vnc」),而不是端口。

strCommand = "cmd /C ""netStat -n -b | find ""vnc""""" 
Set StdOut = WScript.StdOut 
Set objShell = CreateObject("WScript.Shell") 
found = 0 
wscript.echo "Waiting for connection..." 

Do Until found = 1 
    set objScriptExec = objShell.Exec (strCommand) 

    strResults = LCase(objScriptExec.StdOut.ReadAll) 

    if len (strResults) > 0 then 
     MsgBox "Found VNC connection!" 
     found = 1 
    else 
     WScript.Sleep(5000) 
    End if 
Loop 

這裏是一個bat文件,它將監視一個特定的端口。不幸的是,你必須從具有提升特權的命令提示符運行它。

@echo off 
SET "strPort=1972" 
:LOOP 
cls 
netStat -n | find ":%strPort%" 
ping -n 5 127.0.0.1 > nul 
GOTO LOOP 
+0

這是如何準確告訴你哪個端口?你已經想出了一個與問題中的要求不同的解決方案。 – Lankymart

+0

請閱讀答案。我解決這個問題。 –

+0

我會更新,但解釋未來讀者的兩種選擇 –