Jump to content

Auto decide which @IPAddress1-4 to take


Go to solution Solved by LWC,

Recommended Posts

I have multiple network adapters but only one is actually connected.
I thus use @IPAddress1 in my scripts whereas @IPAddress2-4 return 0.0.0.0

But recently I've installed the VirtualBox emulator and it took over @IPAddress1 which means my real connection is now @IPAddress2.
Why is that? Is there a way to make AutoIt skip to @IPAddress2 if @IPAddress1 is used by an emulator?

In the attached screenshot it's temporarily disabled so I can revive my scripts which all already use @IPAddress1.

network adapters.png

 

Edited by LWC
Unlinked to solution now that it's automated linked
Link to comment
Share on other sites

Try and look around in this post, you may find something useful. I'm not the type of person to deal with these, so I will just supply you with the link and maybe the guide will help you change or possibly explain how it works...

Tell me if you find anything. :)

 

Regards,

Supra

Link to comment
Share on other sites

If you want the external IP address which is visible to other computers/servers, you can use the _GetIP function:

_GetIP

 

EasyCodeIt - A cross-platform AutoIt implementation - Fund the development! (GitHub will double your donations for a limited time)

DcodingTheWeb Forum - Follow for updates and Join for discussion

Link to comment
Share on other sites

  • Solution

TCPNameToIP(@ComputerName)  actually matches @IPAddress1 (the emulated one), not @IPAddress2 (the actual internal one), so it doesn't change anything.

_GetIP() is not relevant as I need the right internal address, not an external one.

So I've ended up successfully using the following code, which finds the first adapter which has a gateway, as it seems like emulated ones don't have gateways.

But I do wish @IPAddress1-4 would have just given priority to non emulated addresses over emulated ones.

$internal_not_emulated_ip_address=_GetGateway()[0]

Func _GetGateway()
    ; Based on:
    ; Rajesh V R
    ; v 1.0 01 June 2009

       ; use the adapter name as seen in the network connections dialog...
    Const $wbemFlagReturnImmediately = 0x10
    Const $wbemFlagForwardOnly = 0x20
    Local $colNICs="", $NIC, $strQuery, $objWMIService

    $strQuery = "SELECT * FROM Win32_NetworkAdapterConfiguration"
    $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
    $colNICs = $objWMIService.ExecQuery($strQuery, "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    Local $output[2]

    If IsObj($colNICs) Then
        For $NIC In $colNICs
            if isstring($NIC.DefaultIPGateway(0)) then
                $output[0] = $NIC.IPAddress(0)
                $output[1] = $NIC.DefaultIPGateway(0)
                ExitLoop
            endif
        Next
    Else
        Return SetError(-1, 0, "No WMI Objects Found for class: Win32_NetworkAdapterConfiguration")
    EndIf
    Return $output
EndFunc

 

Edited by LWC
Rephrased
Link to comment
Share on other sites

Just now, supraaxdd said:

Did the site I sent at the beginning help in any way? I'm just curious :)

Oh sorry, not really, as it seems to be about internal settings within VirtualBox, which affect the guest virtual machines, not the host.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...