Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Hinzufügen von statischen IP-Routen (https://www.delphipraxis.net/166101-hinzufuegen-von-statischen-ip-routen.html)

Guntram 30. Jan 2012 13:32

Hinzufügen von statischen IP-Routen
 
Hallo zusammen,
ich bin gerade dabei ein Programm zu schreiben, in dem ich unter Anderem eine Lösung zum setzen statischer IP-Routen realisieren muss. Bisher habe ich einfach einen externen Aufruf des "ROUTE ADD" Konsolenbefehls benutzt, möchte nun aber auf die Funktionalität der WinAPI umsteigen. Die passende Anweisung hatte ich auch gleich gefunden, zusammen mit einer fertigen Implementierung in Delphi, allerdings schaffe ich es einfach nicht eine Route zu setzen. Ich habe inzwischen so ziemlich jede Wertekombination der benötigten Parameter durchgespielt, erhalte als Ergebnis der Funktion jedoch immer nur Fehler 87 ("The parameter is incorrect"). Hoffe jemand von euch kann mir beim parametrieren des MIB_IPFORWARDROW Records helfen.

Vielen Dank im Voraus!

Delphi-Quellcode:
procedure RouteTest;
var ipRoute: MIB_IPFORWARDROW;
var result: DWORD;
begin
  ipRoute.dwForwardDest := inet_addr('193.100.133.5');
  ipRoute.dwForwardMask := inet_addr('255.255.255.255');
  ipRoute.dwForwardPolicy := 0;
  ipRoute.dwForwardNextHop := inet_addr('198.19.0.11');
  ipRoute.dwForwardNextHopAS := 0;
  ipRoute.dwForwardIfIndex := 1;
  ipRoute.dwForwardType := 3;
  ipRoute.dwForwardProto := 3;
  ipRoute.dwForwardAge := 86400000;
  ipRoute.dwForwardMetric1 := 10;
  ipRoute.dwForwardMetric2 := 0;
  ipRoute.dwForwardMetric3 := 0;
  ipRoute.dwForwardMetric4 := 0;
  ipRoute.dwForwardMetric5 := 0;

  result := CreateIpForwardEntry(ipRoute);

  if result <> 0 then
  begin
    ShowMessage(SysErrorMessage(result));
  end;
end;

Luckie 30. Jan 2012 13:38

AW: Hinzufügen von statischen IP-Routen
 
Und wird result und LResult zugewiesen?

Guntram 30. Jan 2012 13:58

AW: Hinzufügen von statischen IP-Routen
 
Zitat:

Zitat von Luckie (Beitrag 1148284)
Und wird result und LResult zugewiesen?

Hoppla, kleiner Kopierfehler. Hab es eben bereinigt.

Luckie 30. Jan 2012 14:14

AW: Hinzufügen von statischen IP-Routen
 
Dir ist schon klar, dass result immer noch nichts zugewiesen wird? Und da es nicht initialisiert ist, steht da irgendwas drin.

Guntram 30. Jan 2012 14:41

AW: Hinzufügen von statischen IP-Routen
 
Zitat:

Zitat von Luckie (Beitrag 1148324)
Dir ist schon klar, dass result immer noch nichts zugewiesen wird? Und da es nicht initialisiert ist, steht da irgendwas drin.

Oh, das ist ja mehr als peinlich. Beim schnellen schreiben der RouteTest Prozedur für diesen Thread ist ausgerechnet der relevante Funktionsaufruf unter den Tisch gefallen. Quellcode wurde korrigiert, in meinem Programm ist der Aufruf natürlich enthalten.

Luckie 30. Jan 2012 14:47

AW: Hinzufügen von statischen IP-Routen
 
Doku schon gelesen: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

DeddyH 30. Jan 2012 14:48

AW: Hinzufügen von statischen IP-Routen
 
Die hat er oben sogar verlinkt.

Luckie 30. Jan 2012 14:54

AW: Hinzufügen von statischen IP-Routen
 
Na ja, das heißt ja nicht, dass sie auch komplett gelesen wurde. ;)

Klaus01 30. Jan 2012 15:07

AW: Hinzufügen von statischen IP-Routen
 
.. da ipRoute ein Pointer auf einen Speicherbereich ist, sollte
da nicht irgendwo auch Speicher angefordert werden?

Oder liege ich total falsch?

Grüße
Klaus

DeddyH 30. Jan 2012 15:19

AW: Hinzufügen von statischen IP-Routen
 
Bei den Metrics-Feldern habe ich gerade gelesen:
Zitat:

If this metric is not used, its value should be set to -1
Im Beispiel sind sie aber auf 0 gesetzt.

Luckie 30. Jan 2012 17:06

AW: Hinzufügen von statischen IP-Routen
 
Zitat:

Zitat von Klaus01 (Beitrag 1148355)
.. da ipRoute ein Pointer auf einen Speicherbereich ist, sollte
da nicht irgendwo auch Speicher angefordert werden?

Oder liege ich total falsch?

Oder ein Zeiger auf die Struktur übergeben werden.

Guntram 31. Jan 2012 07:57

AW: Hinzufügen von statischen IP-Routen
 
Zitat:

Zitat von DeddyH (Beitrag 1148358)
Bei den Metrics-Feldern habe ich gerade gelesen:
Zitat:

If this metric is not used, its value should be set to -1
Im Beispiel sind sie aber auf 0 gesetzt.

metric ist wie alle übrigen Variablen der MIB_IPFORWARDROW-Struktur vom Typ DWord, 0 ist also der kleinste mögliche Wert.

Luckie 31. Jan 2012 08:20

AW: Hinzufügen von statischen IP-Routen
 
Setz ihn trotzdem mal auf -1. Bei DWORD kommt es dann zu einem Integerüberlauf. Und vielleicht ist das ja dann der gewünschte Wert.

Guntram 31. Jan 2012 09:09

AW: Hinzufügen von statischen IP-Routen
 
So, der Fehler ist gefunden! Obwohl im MSDN-Artikel zu MIB_IPFORWARDROW ausdrücklich MIB_IPPROTO_NETMGMT (3) als Protokoll für statische Routen angegeben ist, bin ich beim stöbern auf dieses Beispiel gestoßen. Und siehe da: mit MIB_IPPROTO_RIP (8) hat es funktioniert! Trotzdem Danke für eure Hilfe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 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