AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IP-ADAPTER_ADDRESS Structure

Offene Frage von "CodeX"
Ein Thema von quendolineDD · begonnen am 16. Nov 2008 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#11

Re: IP-ADAPTER_ADDRESS Structure

  Alt 9. Dez 2008, 09:01
Zitat von quendolineDD:
Aber ich hab ja nicht umsonst die API-Deklarationen mir vorgenommen um schlussletztlich die JEDI Units zu nutzen. Sicherlich sind diese in ihrer Form und Ausprägung dem Nutzen nach besser und effektiver, jedoch mache ich mir den Aufwand bewusst um gewisse Zusammenhänge zu verstehen und auch an sich zu lernen.
Ja klar, man sollte nur rechtzeitig aufhören, bevor die Umsetzung von C nach Pascal zur Quälerei wird.
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 von quendolineDD:
Aber die Klasse TAdapter macht in dem Sinne nichts weiter, als die Werte der Adapter "verbraucherfreundlich" zu präsentieren.
Genau so sollte es ja sein. Du wirst aber eher zwei Klassen brauchen (TAdapter=Info über einen konkreten Adapter , TAdapterList=Liste aller vorh. Adapter)
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: IP-ADAPTER_ADDRESS Structure

  Alt 9. Dez 2008, 13:41
Ja, das war ein Fehler in meinen Überlegungen und wäre mir bei weiterer Verwendung auch noch ausgebessert wurden.

Zitat:
Der Lerneffekt müsste ja inzwischen vorhanden sein.
In der Tat. Ich will mir nun auch erstmal in den Jedi-Komponenten die Einbindung dessen anschauen. Ob ich dann selber noch Klassen um die Jedi machen muss, weiß ich nicht. Ein Großteil ist ja selber schon in Klassen gefasst.

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.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#13

Re: IP-ADAPTER_ADDRESS Structure

  Alt 20. Mär 2009, 16:24
Zitat von quendolineDD:
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.
Hast Du eine Lösung gefunden?

Wenn ich mir das Beispiel hier anschaue, wird das in C so gemacht:
Code:
//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);
}
Was ich damit aber in Delphi mache, weiß ich leider nicht.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: IP-ADAPTER_ADDRESS Structure

  Alt 20. Mär 2009, 17:48
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 das hier an. Da steht die Enumeration für das AddressFamily.
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
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#15

Re: IP-ADAPTER_ADDRESS Structure

  Alt 20. Mär 2009, 20:01
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?
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#16

Re: IP-ADAPTER_ADDRESS Structure

  Alt 21. Mär 2009, 14:18
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:
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;
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.

Woran liegt das?
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: IP-ADAPTER_ADDRESS Structure

  Alt 21. Mär 2009, 16:30
Also Intellisense (Visual Studio 2008) will ein Bytearray haben, welches die IP-Addresse erhlät. Schuast du hier. Mit C# hab ich es halt einfach, weil alles schon enthalten ist

Musst du mal von Byte zu String umrechnen und schauen, was rauskommt Garantieren kann ich jedenfalls nichts.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz