I have the following vbscript code that returns the local IP address. It works great. I am trying to provide the same functionality in my winform .net app.
All the solutions I have come across involve using DNS. Any ideas on how to "port" this script for use in .net?
A different way to do this maybe?
Thanks!
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
I personally would recommend using the DNS, but if you absolutely don't want to you can get the information from a call to the System.Management namespace
That should correctly get the ip but may need some tweaking.
[edit] hmmmm...just realized that you mentioned you don't want to use DNS...why is that?
[edit] moving up from comments....
Simpler version if you only care about local, empty string pass to GetHostEntry will by default return local only
You can scroll through this to find all ip addresses.
You can do this by querying the network interfaces, though this will include all local addresses so you may have to add a
where
clause to select the one you want if there are multiple interfaces (which there likely will be). It's certainly not a direct port of your script, but hopefully will be of some use:Note: If you only want IPv4 addresses, then you could alter the query to:
It looks like your script is calling ipconfig, saving the output to a file, and then parsing the file. If you want to do that, you would do something like this:
Note that I'm not particularly fond of this method -- you would probably be better served with some of the other solutions listed in this thread -- but it is a more direct translation of your original script.