ip, mask and broadcast address...
Posted: Sun Aug 21, 2011 1:28 pm
Here is code to get ip, mask and broadcast for connected network interfaces (on Windows):
It would be better if this was built-in to the Network lib though...
Code: Select all
Structure IP_ADDR_STRING
pNext.l
IpAddress.b[16]
IpMask.b[16]
Context.l
EndStructure
Structure IP_ADAPTER_INFO
Next.l
ComboIndex.l
AdapterName.b[260] ; MAX_ADAPTER_NAME_LENGTH + 4
Description.b[132] ; MAX_ADAPTER_DESCRIPTION_LENGTH + 4
AdressLength.l
Address.b[8] ; MAX_ADAPTER_ADDRESS_LENGTH
Index.l
Type.l
DhcpEnabled.l
CurrentIpAddressPTR.l
IpAddressList.IP_ADDR_STRING
GatewayList.IP_ADDR_STRING
DhcpServer.IP_ADDR_STRING
HaveWins.l
PrimaryWinsServer.IP_ADDR_STRING
SecondaryWinsServer.IP_ADDR_STRING
LeaseObtained.l
LeaseExpires.l
EndStructure
Procedure ConvertIPAddress(string$)
ProcedureReturn MakeIPAddress(Val(StringField(string$,1,".")),Val(StringField(string$,2,".")),Val(StringField(string$,3,".")),Val(StringField(string$,4,".")))
EndProcedure
memlength.l=0
If GetAdaptersInfo_(0,@memlength)=#ERROR_BUFFER_OVERFLOW
membuffer=AllocateMemory(memlength)
If membuffer
If GetAdaptersInfo_(membuffer,@memlength)=#ERROR_SUCCESS
adapters=memlength/SizeOf(IP_ADAPTER_INFO)
For loop=0 To adapters-1
ip=ConvertIPAddress(PeekS(membuffer+(loop*SizeOf(IP_ADAPTER_INFO))+OffsetOf(IP_ADAPTER_INFO\IpAddressList)+OffsetOf(IP_ADDR_STRING\IpAddress)))
If ip
description$=PeekS(membuffer+(loop*SizeOf(IP_ADAPTER_INFO))+OffsetOf(IP_ADAPTER_INFO\Description))
mask=ConvertIPAddress(PeekS(membuffer+(loop*SizeOf(IP_ADAPTER_INFO))+OffsetOf(IP_ADAPTER_INFO\IpAddressList)+OffsetOf(IP_ADDR_STRING\IpMask)))
broadcast=(mask!$ffffffff)|ip
Debug("description: "+description$+" ip: "+IPString(ip)+" mask: "+IPString(mask)+" broadcast: "+IPString(broadcast))
EndIf
Next
EndIf
FreeMemory(membuffer)
EndIf
EndIf