mrowwy Posted June 7, 2013 Share Posted June 7, 2013 I'm having a problem with @IPAddress1 & @IPAddress2 where it seems like @IPAddress1 refers to the first active IP address but isn't necessarily tied to a specific network adapter. I have a script that checks the IP address of each at each index then posts them to a listview, however if I disconnect the first NIC, the IP address that was listed at @IPAddress2 is now shows at @IPAddress1. Which also results in @IPAddress2 reporting "0.0.0.0" for its IP. Is this something I should expect to happen? Is there a way to get the address of a specific NIC easily? #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> Opt("GUIOnEventMode", 1) ; Change to OnEvent mode $mainwindow = GUICreate("IP Check", 240, 120) GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked") $ip1 = @IPAddress1 $ip2 = @IPAddress2 $listview = GUICtrlCreateListView("| IP 1 | IP 2", 10, 10, 220, 100, $LVSCW_AUTOSIZE) $listviewitem = GUICtrlCreateListViewItem(" | " & $ip1 & " | " & $ip2, $listview) GUISetState(@SW_SHOW) While 1 If @IPAddress1 <> $ip1 Or @IPAddress2 <> $ip2 Then GUICtrlSetData($listviewitem, " | " & @IPaddress1 & " | " & @IPAddress2) $ip1 = @IPAddress1 $ip2 = @IPAddress2 Else Sleep(1000) EndIf WEnd Func CLOSEClicked() ;Note: at this point @GUI_CTRLID would equal $GUI_EVENT_CLOSE, ;@GUI_WINHANDLE will be either $mainwindow or $dummywindow If @GUI_WINHANDLE = $mainwindow Then Exit EndIf EndFunc Link to comment Share on other sites More sharing options...
orbs Posted June 7, 2013 Share Posted June 7, 2013 quick and dirty: call ipconfig, redirect output to text file, parse it. not hard, provided you know what is your NIC name. Signature - my forum contributions: Spoiler UDF: LFN - support for long file names (over 260 characters) InputImpose - impose valid characters in an input control TimeConvert - convert UTC to/from local time and/or reformat the string representation AMF - accept multiple files from Windows Explorer context menu DateDuration - literal description of the difference between given dates Apps: Touch - set the "modified" timestamp of a file to current time Show For Files - tray menu to show/hide files extensions, hidden & system files, and selection checkboxes SPDiff - Single-Pane Text Diff Link to comment Share on other sites More sharing options...
DW1 Posted June 8, 2013 Share Posted June 8, 2013 Check out >this post. It should have what you need. AutoIt3 Online Help Link to comment Share on other sites More sharing options...
DW1 Posted June 8, 2013 Share Posted June 8, 2013 (edited) If all you are looking for is IP in relation to adapter name, try this out. expandcollapse popup#include <array.au3> $aTest = GetNics() _ArrayDisplay($aTest) Func GetNics() Local $NETWORK_REG_KEY = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" Local $tagIP_ADDRESS_STRING = "char IPAddress[16];" Local $tagIP_MASK_STRING = "char IPMask[16];" Local $tagIP_ADDR_STRING = "ptr Next;" & $tagIP_ADDRESS_STRING & $tagIP_MASK_STRING & "DWORD Context;" Local $tagIP_ADAPTER_INFO = "ptr Next; DWORD ComboIndex; char AdapterName[260];char Description[132]; UINT AddressLength; BYTE Address[8]; dword Index; UINT Type;" & _ " UINT DhcpEnabled; ptr CurrentIpAddress; ptr IpAddressListNext; char IpAddressListADDRESS[16]; char IpAddressListMASK[16]; DWORD IpAddressListContext; " & _ "ptr GatewayListNext; char GatewayListADDRESS[16]; char GatewayListMASK[16]; DWORD GatewayListContext; " & _ "ptr DhcpServerNext; char DhcpServerADDRESS[16]; char DhcpServerMASK[16]; DWORD DhcpServerContext; " & _ "int HaveWins; " & _ "ptr PrimaryWinsServerNext; char PrimaryWinsServerADDRESS[16]; char PrimaryWinsServerMASK[16]; DWORD PrimaryWinsServerContext; " & _ "ptr SecondaryWinsServerNext; char SecondaryWinsServerADDRESS[16]; char SecondaryWinsServerMASK[16]; DWORD SecondaryWinsServerContext; " & _ "DWORD LeaseObtained; DWORD LeaseExpires;" Local $dll = DllOpen("Iphlpapi.dll") Local $ret = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", 0, "dword*", 0) Local $adapterBuffer = DllStructCreate("byte[" & $ret[2] & "]") Local $adapterBuffer_pointer = DllStructGetPtr($adapterBuffer) Local $return = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", $adapterBuffer_pointer, "dword*", $ret[2]) Local $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $adapterBuffer_pointer) If Not @error Then Dim $aAdapters[100][3] $i = 0 Do $aAdapters[$i][0] = DllStructGetData($adapter, "Description") $aAdapters[$i][1] = RegRead($NETWORK_REG_KEY & DllStructGetData($adapter, "AdapterName") & "\Connection", "Name") $aAdapters[$i][2] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPAddress") $i += 1 $ptr = DllStructGetData($adapter, "Next") $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $ptr) Until @error ReDim $aAdapters[$i][3] EndIf Return $aAdapters EndFunc ;==>GetNics NOTE: >All thanks to the work done by ProgAndy in this thread. Edited June 8, 2013 by danwilli mrowwy 1 AutoIt3 Online Help Link to comment Share on other sites More sharing options...
mrowwy Posted June 18, 2013 Author Share Posted June 18, 2013 (edited) If all you are looking for is IP in relation to adapter name, try this out. expandcollapse popup#include <array.au3> $aTest = GetNics() _ArrayDisplay($aTest) Func GetNics() Local $NETWORK_REG_KEY = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" Local $tagIP_ADDRESS_STRING = "char IPAddress[16];" Local $tagIP_MASK_STRING = "char IPMask[16];" Local $tagIP_ADDR_STRING = "ptr Next;" & $tagIP_ADDRESS_STRING & $tagIP_MASK_STRING & "DWORD Context;" Local $tagIP_ADAPTER_INFO = "ptr Next; DWORD ComboIndex; char AdapterName[260];char Description[132]; UINT AddressLength; BYTE Address[8]; dword Index; UINT Type;" & _ " UINT DhcpEnabled; ptr CurrentIpAddress; ptr IpAddressListNext; char IpAddressListADDRESS[16]; char IpAddressListMASK[16]; DWORD IpAddressListContext; " & _ "ptr GatewayListNext; char GatewayListADDRESS[16]; char GatewayListMASK[16]; DWORD GatewayListContext; " & _ "ptr DhcpServerNext; char DhcpServerADDRESS[16]; char DhcpServerMASK[16]; DWORD DhcpServerContext; " & _ "int HaveWins; " & _ "ptr PrimaryWinsServerNext; char PrimaryWinsServerADDRESS[16]; char PrimaryWinsServerMASK[16]; DWORD PrimaryWinsServerContext; " & _ "ptr SecondaryWinsServerNext; char SecondaryWinsServerADDRESS[16]; char SecondaryWinsServerMASK[16]; DWORD SecondaryWinsServerContext; " & _ "DWORD LeaseObtained; DWORD LeaseExpires;" Local $dll = DllOpen("Iphlpapi.dll") Local $ret = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", 0, "dword*", 0) Local $adapterBuffer = DllStructCreate("byte[" & $ret[2] & "]") Local $adapterBuffer_pointer = DllStructGetPtr($adapterBuffer) Local $return = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", $adapterBuffer_pointer, "dword*", $ret[2]) Local $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $adapterBuffer_pointer) If Not @error Then Dim $aAdapters[100][3] $i = 0 Do $aAdapters[$i][0] = DllStructGetData($adapter, "Description") $aAdapters[$i][1] = RegRead($NETWORK_REG_KEY & DllStructGetData($adapter, "AdapterName") & "\Connection", "Name") $aAdapters[$i][2] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPAddress") $i += 1 $ptr = DllStructGetData($adapter, "Next") $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $ptr) Until @error ReDim $aAdapters[$i][3] EndIf Return $aAdapters EndFunc ;==>GetNics NOTE: >All thanks to the work done by ProgAndy in this thread. This was massively helpful! Thank you. I'm still a bit new at this, how would I go about adding the correlating Subnet Masks to a 4th column? I've tried to expand the array to [100][4] and include another column: $aAdapters[$i][3] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListMASK")), "IPAddress") However, what is returned is "0.0" for disconnected adapters and is missing the first octet for connected ones "255.255.0". What am I missing? Thanks again! Edited June 18, 2013 by mrowwy Link to comment Share on other sites More sharing options...
Solution DW1 Posted June 18, 2013 Solution Share Posted June 18, 2013 (edited) This was massively helpful! Thank you. I'm still a bit new at this, how would I go about adding the correlating Subnet Masks to a 4th column? Thanks again! expandcollapse popup#include <array.au3> $aTest = GetNics() _ArrayDisplay($aTest) Func GetNics() Local $NETWORK_REG_KEY = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" Local $tagIP_ADDRESS_STRING = "char IPAddress[16];" Local $tagIP_MASK_STRING = "char IPMask[16];" Local $tagIP_ADDR_STRING = "ptr Next;" & $tagIP_ADDRESS_STRING & $tagIP_MASK_STRING & "DWORD Context;" Local $tagIP_ADAPTER_INFO = "ptr Next; DWORD ComboIndex; char AdapterName[260];char Description[132]; UINT AddressLength; BYTE Address[8]; dword Index; UINT Type;" & _ " UINT DhcpEnabled; ptr CurrentIpAddress; ptr IpAddressListNext; char IpAddressListADDRESS[16]; char IpAddressListMASK[16]; DWORD IpAddressListContext; " & _ "ptr GatewayListNext; char GatewayListADDRESS[16]; char GatewayListMASK[16]; DWORD GatewayListContext; " & _ "ptr DhcpServerNext; char DhcpServerADDRESS[16]; char DhcpServerMASK[16]; DWORD DhcpServerContext; " & _ "int HaveWins; " & _ "ptr PrimaryWinsServerNext; char PrimaryWinsServerADDRESS[16]; char PrimaryWinsServerMASK[16]; DWORD PrimaryWinsServerContext; " & _ "ptr SecondaryWinsServerNext; char SecondaryWinsServerADDRESS[16]; char SecondaryWinsServerMASK[16]; DWORD SecondaryWinsServerContext; " & _ "DWORD LeaseObtained; DWORD LeaseExpires;" Local $dll = DllOpen("Iphlpapi.dll") Local $ret = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", 0, "dword*", 0) Local $adapterBuffer = DllStructCreate("byte[" & $ret[2] & "]") Local $adapterBuffer_pointer = DllStructGetPtr($adapterBuffer) Local $return = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", $adapterBuffer_pointer, "dword*", $ret[2]) Local $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $adapterBuffer_pointer) If Not @error Then Dim $aAdapters[100][4] $i = 0 Do $aAdapters[$i][0] = DllStructGetData($adapter, "Description") $aAdapters[$i][1] = RegRead($NETWORK_REG_KEY & DllStructGetData($adapter, "AdapterName") & "\Connection", "Name") $aAdapters[$i][2] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPAddress") $aAdapters[$i][3] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPMask") $i += 1 $ptr = DllStructGetData($adapter, "Next") $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $ptr) Until @error ReDim $aAdapters[$i][4] EndIf Return $aAdapters EndFunc ;==>GetNics Edited June 18, 2013 by danwilli mrowwy 1 AutoIt3 Online Help Link to comment Share on other sites More sharing options...
mrowwy Posted June 18, 2013 Author Share Posted June 18, 2013 expandcollapse popup#include <array.au3> $aTest = GetNics() _ArrayDisplay($aTest) Func GetNics() Local $NETWORK_REG_KEY = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" Local $tagIP_ADDRESS_STRING = "char IPAddress[16];" Local $tagIP_MASK_STRING = "char IPMask[16];" Local $tagIP_ADDR_STRING = "ptr Next;" & $tagIP_ADDRESS_STRING & $tagIP_MASK_STRING & "DWORD Context;" Local $tagIP_ADAPTER_INFO = "ptr Next; DWORD ComboIndex; char AdapterName[260];char Description[132]; UINT AddressLength; BYTE Address[8]; dword Index; UINT Type;" & _ " UINT DhcpEnabled; ptr CurrentIpAddress; ptr IpAddressListNext; char IpAddressListADDRESS[16]; char IpAddressListMASK[16]; DWORD IpAddressListContext; " & _ "ptr GatewayListNext; char GatewayListADDRESS[16]; char GatewayListMASK[16]; DWORD GatewayListContext; " & _ "ptr DhcpServerNext; char DhcpServerADDRESS[16]; char DhcpServerMASK[16]; DWORD DhcpServerContext; " & _ "int HaveWins; " & _ "ptr PrimaryWinsServerNext; char PrimaryWinsServerADDRESS[16]; char PrimaryWinsServerMASK[16]; DWORD PrimaryWinsServerContext; " & _ "ptr SecondaryWinsServerNext; char SecondaryWinsServerADDRESS[16]; char SecondaryWinsServerMASK[16]; DWORD SecondaryWinsServerContext; " & _ "DWORD LeaseObtained; DWORD LeaseExpires;" Local $dll = DllOpen("Iphlpapi.dll") Local $ret = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", 0, "dword*", 0) Local $adapterBuffer = DllStructCreate("byte[" & $ret[2] & "]") Local $adapterBuffer_pointer = DllStructGetPtr($adapterBuffer) Local $return = DllCall($dll, "dword", "GetAdaptersInfo", "ptr", $adapterBuffer_pointer, "dword*", $ret[2]) Local $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $adapterBuffer_pointer) If Not @error Then Dim $aAdapters[100][4] $i = 0 Do $aAdapters[$i][0] = DllStructGetData($adapter, "Description") $aAdapters[$i][1] = RegRead($NETWORK_REG_KEY & DllStructGetData($adapter, "AdapterName") & "\Connection", "Name") $aAdapters[$i][2] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPAddress") $aAdapters[$i][3] = DllStructGetData(DllStructCreate($tagIP_ADDR_STRING, DllStructGetPtr($adapter, "IpAddressListNext")), "IPMask") $i += 1 $ptr = DllStructGetData($adapter, "Next") $adapter = DllStructCreate($tagIP_ADAPTER_INFO, $ptr) Until @error ReDim $aAdapters[$i][4] EndIf Return $aAdapters EndFunc ;==>GetNics Thanks danwilli! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now