Gå til innhold

IP-checker - Forenkle script?


Anbefalte innlegg

Hei, jeg lurer på om noen her har peiling på å effektivisere og forenkle dette vbscriptet?

Jeg har bare mekket sammen noe som jeg vet fungerer, men jeg tviler sterkt på at det er særlig effektivt:

 

Edit: Vet jeg kan bruke Select Case, men er litt usikker på hvordan fremgangsmåten da blir?

 

Option Explicit
Dim IP_Address : IP_Address = GetIP()

If kuttet = "0.0.0.0" OR IP_Address = "" Then

 InputBox vbcrlf & "Du har ingen tilkobling " &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

ElseIf kuttet = "192.168." Then

InputBox vbcrlf & "Du er koblet til et privat nettverk." & vbcrlf & "Din IP-adresse er:" &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

ElseIf kuttet = "169.254." Then

InputBox vbcrlf & "Du har ingen tilkobling." & vbcrlf & "Din IP-adresse er:" &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

ElseIf kuttet = "10.216." Then

InputBox vbcrlf & "Du er koblet til hovednettet." & vbcrlf & "Din IP-adresse er:" &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

ElseIf kuttet = "10.217." Then

InputBox vbcrlf & "Du er koblet til hovednettet via VPN." & vbcrlf & "Din IP-adresse er:" &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

Else

InputBox vbcrlf & "Nettverket du er koblet til gjenkjennes ikke." & vbcrlf & "Din IP-adresse er:" &  IP_Address & _
	   vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
	   "(Trykk Ctrl + C for å kopiere IP-adressen)", _
	   "Finn min IP-adresse", IP_Address

End If

Function GetIP()
 Dim ws : Set ws = CreateObject("WScript.Shell")
 Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
 Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
 Dim ThisLine, IP
 If ws.Environment("SYSTEM")("OS") = "" Then
ws.run "winipcfg /batch " & TmpFile, 0, True
 Else
ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
 End If
 With fso.GetFile(TmpFile).OpenAsTextStream
Do While NOT .AtEndOfStream
  ThisLine = .ReadLine
  If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2)
Loop
.Close
 End With
 If IP <> "" Then
If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, Len(IP) - 1)
 End If
 GetIP = IP
 fso.GetFile(TmpFile).Delete  
 Set fso = Nothing
 Set ws = Nothing
End Function

Function kuttet()
 Dim ws : Set ws = CreateObject("WScript.Shell")
 Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
 Dim TmpFile : TmpFile = fso.GetSpecialFolder(2) & "/ip.txt"
 Dim ThisLine, IP
 If ws.Environment("SYSTEM")("OS") = "" Then
ws.run "winipcfg /batch " & TmpFile, 0, True
 Else
ws.run "%comspec% /c ipconfig > " & TmpFile, 0, True
 End If
 With fso.GetFile(TmpFile).OpenAsTextStream
Do While NOT .AtEndOfStream
  ThisLine = .ReadLine
  If InStr(ThisLine, "Address") <> 0 Then IP = Mid(ThisLine, InStr(ThisLine, ":") + 2)
Loop
.Close
 End With
 If IP <> "" Then
If Asc(Right(IP, 1)) = 13 Then IP = Left(IP, 7)
 End If
 kuttet = IP
 fso.GetFile(TmpFile).Delete  
 Set fso = Nothing
 Set ws = Nothing
End Function

Endret av Kenny Bones
Lenke til kommentar
Videoannonse
Annonse

Hei!

 

Her er mitt forslag som ser ut til å fungere. Det bruker WMI for å gå igjennom nettverkskort i systemet. Har du f.eks to nettverkskort vil det dukke opp 2 inputbokser.

 

 

 

----- Kode

 

 

On Error Resume Next

 

IsIpSet = false

 

 

 

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

 

For Each objItem In colItems

For Each objValue In objItem.IPAddress

If objValue <> "" and Instr(objValue, ":") = 0 Then

 

isIpSet = true

 

Select Case Left(objValue, 7)

 

Case "192.168"

 

 

InputBox vbcrlf & "Du er koblet til et privat nettverk." & vbcrlf & "Din IP-adresse er:" & objValue & _

vbcrlf & vbcrlf & vbcrlf & vbcrlf & _

"(Trykk Ctrl + C for å kopiere IP-adressen)", _

"Finn min IP-adresse", objValue

 

Case "169.254"

 

 

InputBox vbcrlf & "Du har ingen tilkobling." & vbcrlf & "Din IP-adresse er:" & objValue & _

vbcrlf & vbcrlf & vbcrlf & vbcrlf & _

"(Trykk Ctrl + C for å kopiere IP-adressen)", _

"Finn min IP-adresse", objValue

 

Case "10.216."

 

InputBox vbcrlf & "Du er koblet til hovednettet." & vbcrlf & "Din IP-adresse er:" & objValue & _

vbcrlf & vbcrlf & vbcrlf & vbcrlf & _

"(Trykk Ctrl + C for å kopiere IP-adressen)", _

"Finn min IP-adresse", objValue

 

Case "10.217."

 

InputBox vbcrlf & "Du er koblet til hovednettet via VPN." & vbcrlf & "Din IP-adresse er:" & objValue & _

vbcrlf & vbcrlf & vbcrlf & vbcrlf & _

"(Trykk Ctrl + C for å kopiere IP-adressen)", _

"Finn min IP-adresse", objValue

 

 

Case Else

 

InputBox vbcrlf & "Nettverket du er koblet til gjenkjennes ikke." & vbcrlf & "Din IP-adresse er:" & objValue & _

vbcrlf & vbcrlf & vbcrlf & vbcrlf & _

"(Trykk Ctrl + C for å kopiere IP-adressen)", _

"Finn min IP-adresse", objValue

 

End select

 

End If

Next

Next

 

if IsIpSet = false Then ' Ingen ip ble funnet

 

Msgbox "Det ble ikke funnet noen ip"

 

End if

 

 

-----------------------------------

 

 

Et par notater.

 

If objValue <> "" and Instr(objValue, ":") = 0 Then

 

Her bruker jeg AND Instr(objValue,":") = 0 for å filtrere bort ipv6 som vista gir meg. Den kan du fjerne hvis du vil ha med det.

 

Du kan bruke objItem.MACAddress for å få macaddressen til nettverkskortet som har ip'en.

Lenke til kommentar

Det neste logiske steget vil vel være å forenkle koden noe. Ingen vits i å gjenta alle de inputbokskommandoene

 

 

 

On Error Resume Next

IsIpSet = false



strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

For Each objItem In colItems
For Each objValue In objItem.IPAddress
If objValue <> "" and Instr(objValue, ":") = 0 Then

isIpSet = true

Select Case Left(objValue, 7)

Case "192.168": Message = "Du er koblet til et privat nettverk."

Case "169.254": Message = "Du har ingen tilkobling."

Case "10.216.": Message = "Du er koblet til hovednettet."

Case "10.217.": Message = "Du er koblet til hovednettet via VPN." 

Case Else: Message = "Nettverket du er koblet til gjenkjennes ikke."


End select



InputBox vbcrlf & Message & vbcrlf & "Din IP-adresse er:" &  objValue & _
          vbcrlf & vbcrlf & vbcrlf & vbcrlf & _
          "(Trykk Ctrl + C for å kopiere IP-adressen)", _
          "Finn min IP-adresse", objValue



End If
Next
Next

if IsIpSet = false Then  ' Ingen ip ble funnet

Msgbox "Det ble ikke funnet noen ip"

End if

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...