DNS konfiguration einer Netzwerkkarte abfragen.

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

DNS konfiguration einer Netzwerkkarte abfragen.

Beitrag von jpd »

Hi Leute,

versuche verzweifelt über GetPerAdapterInfo die Info's
der konfigurierten DNS Server einer Netzwerkkarte zu kriegen

leider habe ich kein erfolg :-(

anbei ein link zur funktion MSDN:

http://msdn.microsoft.com/en-us/library ... S.85).aspx


und meinen nicht funktionierenden beispiel:

Code: Alles auswählen


Structure IP_ADDR_STRING 
  pNext.l
  IpAddress.b[16] 
  IpMask.b[16] 
  Context.l 
EndStructure 



#MAX_ADAPTER_NAME_LENGTH=256 
#MAX_ADAPTER_DESCRIPTION_LENGTH=128 
#MAX_ADAPTER_ADDRESS_LENGTH=8 


Structure IP_ADAPTER_INFO 
  pNext.l 
  ComboIndex.l 
  AdapterName.b[#MAX_ADAPTER_NAME_LENGTH+4] 
  Description.b[#MAX_ADAPTER_DESCRIPTION_LENGTH+4] 
  AddressLength.l 
  Address.b[#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 


Structure IP_PER_ADAPTER_INFO
  AutoconfigEnabled.b;  UINT 
  AutoconfigActive.b
  CurrentDnsServer.IP_ADDR_STRING 
  DnsServerList.IP_ADDR_STRING 
EndStructure

Procedure GetDNSInfo(Index.l)
length.l=0 
Result=GetPerAdapterInfo_(Index,0,@length) ; Get the length for Buffer 
If Result=#ERROR_BUFFER_OVERFLOW And length 
  *Buffer=AllocateMemory(length)
  If *Buffer And GetPerAdapterInfo_(Index,*Buffer,@length)=#ERROR_SUCCESS 
    *ipinfo.IP_PER_ADAPTER_INFO=*Buffer 
      Debug *ipinfo\AutoconfigEnabled
      Debug *ipinfo\AutoconfigActive
   
      *iplist.IP_ADDR_STRING=*ipinfo\DnsServerList
      
      While *iplist 
        Debug PeekS(@*iplist\IpAddress);,-1,#PB_Ascii) 
       *iplist.IP_ADDR_STRING=*iplist\pNext 
      Wend 
  EndIf
  If *Buffer 
    FreeMemory(*Buffer) 
  EndIf 
  EndIf
  EndProcedure

Procedure GetAdaptersID()
length.l=0 
Result=GetAdaptersInfo_(0,@length) ; Get the length for Buffer 
If Result=#ERROR_BUFFER_OVERFLOW And length 
  *Buffer=AllocateMemory(length) 
  If *Buffer And GetAdaptersInfo_(*Buffer,@length)=#ERROR_SUCCESS 
    *ipinfo.IP_ADAPTER_INFO=*Buffer 
    
    
    While *ipinfo 
      
      
      Debug "---------------------------------"
      Debug "Index : "+Str(*ipinfo\Index) 
      GetDNSInfo(*ipinfo\Index)
      
      *ipinfo.IP_ADAPTER_INFO=*ipinfo\pNext 
    Wend 
    
  Else 
    Debug "GetLastError="+Str(GetLastError_()) 
  EndIf 
  
  If *Buffer 
    FreeMemory(*Buffer) 
  EndIf 
EndIf 
EndProcedure
GetAdaptersID()
hoffe das jemand weiterhelfen kann.

Ciao
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
HeX0R
Beiträge: 3055
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

So scheint es zu gehen:

Code: Alles auswählen

Structure IP_ADDR_STRING
	pNext.l
	IpAddress.b[16]
	IpMask.b[16]
	Context.l
EndStructure


#MAX_ADAPTER_NAME_LENGTH        = 256
#MAX_ADAPTER_DESCRIPTION_LENGTH = 128
#MAX_ADAPTER_ADDRESS_LENGTH     = 8


Structure IP_ADAPTER_INFO
	pNext.l
	ComboIndex.l
	AdapterName.b[#MAX_ADAPTER_NAME_LENGTH + 4]
	Description.b[#MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
	AddressLength.l
	Address.b[#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

Structure IP_PER_ADAPTER_INFO
	AutoconfigEnabled.i;  UINT
	AutoconfigActive.i
	*CurrentDnsServer
	DnsServerList.IP_ADDR_STRING
EndStructure

Procedure GetDNSInfo(Index)
	Protected Result, Length, *Buffer, *iplist.IP_ADDR_STRING, *ipinfo.IP_PER_ADAPTER_INFO

	Result = GetPerAdapterInfo_(Index, 0, @Length) ; Get the length for Buffer
	If Result = #ERROR_BUFFER_OVERFLOW And Length
		*Buffer = AllocateMemory(Length)
		If *Buffer
			If GetPerAdapterInfo_(Index, *Buffer, @Length) = #ERROR_SUCCESS
				*ipinfo = *Buffer
				Debug *ipinfo\AutoconfigEnabled
				Debug *ipinfo\AutoconfigActive

				*iplist = *ipinfo\DnsServerList

				While *iplist
					Debug PeekS(@*iplist\IpAddress, -1, #PB_Ascii)
					*iplist = *iplist\pNext
				Wend
			EndIf
			FreeMemory(*Buffer)
		EndIf
	EndIf
EndProcedure

Procedure GetAdaptersID()
	Protected Result, Length, *Buffer, *ipinfo.IP_ADAPTER_INFO

	Result = GetAdaptersInfo_(0, @Length) ; Get the length for Buffer

	If Result = #ERROR_BUFFER_OVERFLOW And Length
		*Buffer = AllocateMemory(Length)
		If *Buffer
			If GetAdaptersInfo_(*Buffer, @Length) = #ERROR_SUCCESS
				*ipinfo = *Buffer

				While *ipinfo

					Debug "---------------------------------"
					Debug "Index : " + Str(*ipinfo\Index)
					GetDNSInfo(*ipinfo\Index)

					*ipinfo = *ipinfo\pNext
				Wend

			Else
				Debug "GetLastError = " + Str(GetLastError_())
			EndIf

			FreeMemory(*Buffer)
		EndIf
	EndIf

EndProcedure
GetAdaptersID()
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

spitze!! :allright:

ich hätte warscheinlich noch viele stunden gesucht ...

ohne erfolg!

Vielen Vielen Dank!
jpd
PB 5.10 Windows 7 x64
Antworten