2014-09-06 48 views
0

Win7的當前IP比較預期IP

我做了一個腳本,通過註冊表改變我的代理設置一個小白,打開和關閉Internet Explorer,以強制代理設置生效,檢查我的公網IP,使確保代理設置工作,然後運行一個程序。我遇到問題,檢查是否發生變化。下面是部分:

function WAN_IP() 
    set http = createobject("Microsoft.XMLHTTP") 
    call http.open("get", "http://icanhazip.com/", false) 
    http.send() 
    IP = http.responsetext 
    set http = nothing 
    WAN_IP = trim(IP) 
end function 

myIP = WAN_IP() 

theIP = "0.0.0.0" 

IPCompare = StrComp(myIP, theIP, vbTextCompare) 


if IPCompare = 0 then 
    Wscript.Echo "it worked!" 
else 
    Wscript.Echo "something went wrong" 
end if 

注意,在我的實際腳本,theIP設置爲實際的代理IP,我試圖去檢查。我只是爲了安全而改變它。如果您正在測試此代碼,則必須將其更改爲您的公共IP。無論如何,問題是,IP和myIP會以同樣的字符串出現,但IPCompare會返回1,而不是像我所期望的那樣返回0。我測試每個變量通過執行在腳本副本以下:

Wscript.Echo theIP 

返回的正確的IP地址

Wscript.Echo myIP 

返回相同theIP

Wscript.Echo IPCompare 

返回1(這意味着string1> string2)當我期望0(string1 = string2)

我唯一的猜測是無論是IP還是myIP都有尾隨或領先的空間或者我看不到的東西。

回答

0

首先添加診斷輸出(巧妙設計,使無形可見):

myIP = WAN_IP() 
WScript.Echo "-----[" & myIP & "]-------", Len(myIP) 

你會看到類似這樣的:

cscript 25702895.vbs 
-----[12.123.12.123 
]------- 14 
something went wrong 

然後重新讀取文檔的Trim - 去掉空格贏得不影響尾隨的EOL。所以:

' WAN_IP = trim(IP) ' <-- removes only spaces 
    WAN_IP = Left(IP, Len(IP) - 1) ' assume EOL = vbLf 

現在它應該'工作',也許意外。

最後想使這個破解安全(檢查的假設,從IP的最後刪除非數字字符,穿越IP只要你發現數字或者,使用一個RegExp,...)

+0

謝謝。完美工作! – Nutshell 2014-09-06 19:48:16

+0

@Nutshell歡迎來到Stack Overflow!如果此答案有助於解決您的問題,請[考慮將其標記爲已接受](http://stackoverflow.com/help/someone-answers)。這是表示你的問題已經「解決」並且感謝幫助你的人的常規方式(另外,你們都會在聲譽上有所提升)。 – 2014-09-16 22:56:21

1

試試這樣的:

Option Explicit 
Dim Title,myIP,theIP 
Title = "Compare Two IP(s) Address" 
myIP = WAN_IP() 
theIP = "0.0.0.0" 
'MsgBox myIP,VbInformation,Title 
If IPCompare(myIP,theIP) = True Then 
    MsgBox "It worked ! The two IP(s) are the same !" & VbCrLF & "IP = " & myIP,VbInformation,Title 
else 
    Msgbox "Oupps, something went wrong. The two IP address dosen't match !" & VbCrLF &_ 
    "IP1 = " & myIP & " <> IP2 = " & theIP,VbCritical,Title 
end if 
'*************************************************** 
Function WAN_IP() 
    Dim http,IP 
    set http = createobject("Microsoft.XMLHTTP") 
    call http.open("get", "http://icanhazip.com/", false) 
    http.send() 
    IP = http.responsetext 
    set http = nothing 
    WAN_IP = trim(IP) 
End Function 
'*************************************************** 
Function IPCompare(IP1,IP2) 
    Dim aOctetIP1,sOctet11,sOctet12,sOctet13,sOctet14 
    Dim aOctetIP2,sOctet21,sOctet22,sOctet23,sOctet24 
    aOctetIP1 = Split(IP1,".") 
    sOctet11 = CInt(aOctetIP1(0)) 
    sOctet12 = CInt(aOctetIP1(1)) 
    sOctet13 = CInt(aOctetIP1(2)) 
    sOctet14 = CInt(aOctetIP1(3)) 

    aOctetIP2 = Split(IP2,".") 
    sOctet21 = CInt(aOctetIP2(0)) 
    sOctet22 = CInt(aOctetIP2(1)) 
    sOctet23 = CInt(aOctetIP2(2)) 
    sOctet24 = CInt(aOctetIP2(3)) 

    If sOctet11 = sOctet21 And sOctet12 = sOctet22 And sOctet13 = sOctet23 And sOctet14 = sOctet24 Then 
     IPCompare = True 
    else 
     IPCompare = False 
    end if 
End Function 
'************************************************************