![]() |
Re: IP-ADAPTER_ADDRESS Structure
Zitat:
Der Lerneffekt müsste ja inzwischen vorhanden sein. Die mechanische Umsetzung macht nicht wirklich Spass; wenn man die API benützen kann allerdings schon. Zitat:
|
Re: IP-ADAPTER_ADDRESS Structure
Ja, das war ein Fehler in meinen Überlegungen und wäre mir bei weiterer Verwendung auch noch ausgebessert wurden.
Zitat:
Trotzdem fand ich immer noch nicht, in welcher Struktur nun die IP des Adapters gespeichert ist? Wird diese mit in SOCKADDR unter sa_data abgelegt und von mir nur falsch Interpretiert? Bisher hab ich darin keine sinnvoll zu verwendenden Daten gefunden. Auch Sprach die iSockAddrLength nicht unbedingt dafür. Family repräsentiert mit Sicherheit wieder den Typ Ipv4 bzw. Ipv6. |
Re: IP-ADAPTER_ADDRESS Structure
Zitat:
Wenn ich mir das Beispiel ![]()
Code:
Was ich damit aber in Delphi mache, weiß ich leider nicht.
//Check if the address family is IPV4
if (sockaddr.sa_family == (Int32)System.Net.Sockets.AddressFamily.InterNetwork) { ipaddr = new IPAddress(sockaddr.sa_data); } else if (sockaddr.sa_family == (Int32)System.Net.Sockets.AddressFamily.InterNetworkV6) { //Marshal memory pointer into a struct sockaddripv6 = (SOCKADDRIPV6)Marshal.PtrToStructure(sock_addr.lpSockAddr, typeof(SOCKADDRIPV6)); ipaddr = new IPAddress(sockaddripv6.sa_data); } |
Re: IP-ADAPTER_ADDRESS Structure
Der Code ist C#
Habe die Übersetzung aufgegeben gehabt und selber mit der JwaIpHlpApi weiter gearbeitet. Obwohl ich eher selber zu C#-Programmierung tendiere als mit Delphi zu arbeiten. Schau dir mal ![]() Die (Int32)... davor ist ein Typecast in Delphi. Damit du mit dem Quelltext arbeiten kannst, müsstest du extremst viel Arbeit investieren, was sich meiner Meinung nach auch damals nicht lohnte. Aus ipaddr = new IPAddress(sockaddr.sa_data); wird zum Bsp. in Delphi ipaddr := IPAddress.Create (sockaddr.sa_data); usw. Viel Spaß noch dabei :) |
Re: IP-ADAPTER_ADDRESS Structure
Naja, es geht mir ja in erster Linie sa_data in einer lesbaren Form zu erhalten. Da steht aber (wie Du oben schon geschrieben hattest) nur irgendein Quatsch drin. Schade, dass Du da nicht weiter gemacht hast. Weiß vielleicht sonst jemand, was falsch ist bzw. was noch gemacht werden muss, damit da die Adressen anzeigbar sind?
|
Re: IP-ADAPTER_ADDRESS Structure
Ich muss doch nochmal konkreter nachfragen.
So sieht mein Code-Ausschnitt zum Auslesen der Adressen aus (Aufs Nötigste zurechtgekürzt, aber zum Nachvollziehen, sollte das ausreichend sein):
Delphi-Quellcode:
Die Ausgabe von sa_data bringt nichts lesbares zum Vorschein. Wenn ich es debugge, steht sowas wie (#0, #0, #0, #0, #0, #0, ' ', #1, #13, '¸', '…', '£', #8, 'Ó') drin.
var
adapter, a : PIP_ADAPTER_ADDRESSES; BUFFER, ERROR : DWORD; UnicastAddress : PIP_ADAPTER_UNICAST_ADDRESS; begin ERROR := GetAdaptersAddresses(0, 0, nil, nil, @buffer); if error <> ERROR_BUFFER_OVERFLOW then ShowMessage('Memory'); adapter := AllocMem(buffer); ERROR := GetAdaptersAddresses(0, 0, nil, adapter, @buffer); if ERROR = ERROR_SUCCESS then begin a := adapter; while a <> nil do begin Memo1.Lines.Add(a.FriendlyName); UnicastAddress := a.FirstUnicastAddress; while UnicastAddress <> nil do begin Memo1.Lines.Add('[' + UnicastAddress.Address.lpSockaddr.sa_data + ']'); UnicastAddress := UnicastAddress.Next; end; end; end; Woran liegt das? |
Re: IP-ADAPTER_ADDRESS Structure
Also Intellisense (Visual Studio 2008) will ein Bytearray haben, welches die IP-Addresse erhlät. Schuast du
![]() Musst du mal von Byte zu String umrechnen und schauen, was rauskommt ;-) Garantieren kann ich jedenfalls nichts. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz