AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IP mit netsh sichern/wiederherstellen
Thema durchsuchen
Ansicht
Themen-Optionen

IP mit netsh sichern/wiederherstellen

Ein Thema von Fusel · begonnen am 7. Feb 2007 · letzter Beitrag vom 8. Feb 2007
Antwort Antwort
Fusel

Registriert seit: 27. Okt 2006
8 Beiträge
 
#1

IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 11:44
Moin.

Habe mich jetzt durch alle relevanten Foren gewühlt.

Wenn ich folgenden Befehl

ShellExecute(Application.Handle, 'open', 'netsh', 'interface dump >C:\ip_config.txt', nil, SW_SHOW); ausführe listet er im Command-Fenster die Konfiguration auf - speichert diese aber nicht auf C:\

Auch das Setzen der Konfiguration mittels

ShellExecute(Application.Handle, 'open', 'netsh', '-f C:\ip_config.txt', nil, SW_SHOW); funktioniert nicht.

Was mache ich falsch?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:07
Versuche es mal bitte so:

ShellExecute(Application.Handle, 'open', pchar('netsh'), pchar('interface dump >C:\ip_config.txt'), nil, SW_SHOW); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Fusel

Registriert seit: 27. Okt 2006
8 Beiträge
 
#3

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:21
Negativ - klappt nicht

Wenn ich den Befehl in der Cmd-Umgebung starte, listet er mir die Daten nicht auf, sondern schreibt sie in die Datei.
Durch Delphi ausgeführt, werden die Daten in der Umgebung aufgelistet.
Ist bald so, als ob er dann den dump-Parameter ignoriert.
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:26
Das kenn ich führe einfach CMD stat netsh aus dann gehts
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#5

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:29
Ash shit.....

Ich hab da mal nen Dienst geschrieben der dem Rechner beim starten ne neue / zusätzliche IP verpasst und beim beenden wieder wegnimmt. Das ging allerdings glaub ich nicht über netsh sondern via API.

Nur wo hab ich nur die Soße...?


Geb mir ein, zwei Stündchen...
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:49
Wer suchet der findet:

Hiermit geht es:

Delphi-Quellcode:
Procedure ExecuteShellCommand( const cmdline: String; hidden: Boolean );
Const
  flags : Array [Boolean] of Integer = (SW_SHOWNORMAL, SW_HIDE);
Var
  cmdbuffer: Array [0..MAX_PATH] of Char;
Begin
  GetEnvironmentVariable( 'COMSPEC', cmdBUffer, Sizeof(cmdBuffer));
  StrCat( cmdbuffer, ' /C ');
  StrPCopy( StrEnd(cmdbuffer), cmdline );
  WinExec( cmdbuffer, flags[hidden] );
End;

ExecuteShellCommand('netsh.exe interface dump > C:\ip_config.txt',false);
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#7

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 13:56
Ging doch flotter

Also, ich hab die IPHelperAPI aus den Jedis benutzt.

die Lokale IP Adresse erhältst Du dort mit VVGetIpAddrTable:

Delphi-Quellcode:
//------------------------------------------------------------------------------
// Datum : 19.06.2006
// Author: Sebastian Gingter
procedure TMyService.getLocalIpAddresses(var addr: TStringList; var idx: TStringList);
var
  size: ulong;
  p: PMibIpAddrTable;
  i: integer;
begin
  VVGetIpAddrTable(p, size, true);
  if p <> nil then
  begin
    try
      with p^ do
      begin
        for i := 0 to dwNumEntries-1 do
          with table[i] do
          begin
            addr.Add(Format('%s', [IpAddressToString(dwAddr)]));
            idx.Add(Format('%d', [dwIndex]));
          end;
      end;
    finally
      freeMem(p);
    end;
  end;
end;
Das IpAddressToString ist was kurzes eigenes:

Delphi-Quellcode:
//------------------------------------------------------------------------------
// Datum : 19.06.2006
// Author: Sebastian Gingter
function TMyService.IpAddressToString(Addr: DWORD): string;
var
  InAddr: TInAddr;
begin
  InAddr.S_addr := Addr;
  Result := inet_ntoa(InAddr);
end;
Und dann das setzen:

Delphi-Quellcode:
//------------------------------------------------------------------------------
// Datum : 19.06.2006
// Author: Sebastian Gingter
function TMyService.CheckAndObtainIPAdress: boolean;
var
  l_addresses: TStringList;
  l_indices: TStringList;
  i: integer;
begin
  // Handle on new IP Address
  m_NTEContext := 0;
  m_NTEInstance := 0;

  m_IpSelfSet := false;
  l_addresses := TStringList.Create;
  l_indices := TSTringList.Create;
  try
    // First check local IP addresses for target address (store in result):
    getLocalIpAddresses(l_addresses, l_indices);
    i := l_addresses.IndexOf(IPAddress);
    result := (i <> -1);
    m_ipAlreadySet := result;

    if not m_ipAlreadySet then
    begin
      if true { isIpAvailable } then
      begin
        // Get interface to set:
        i := l_addresses.IndexOf(m_referenceIP);
        if (i <> -1) then
        begin
          result := ObtainIPAddress( StrToInt(l_indices[i]) );
        end;
      end;
    end;
  finally
    FreeAndNil(l_addresses);
    FreeAndNil(l_indices);
  end;
end;
Wichtig dabei ist, dass Du in der oben gezeigten Variante mindestens eine IP Adresse kennst, die schon auf dem Interface sitzt (in m_referenceIP). Sonst wird es Dir zwangsläufig passieren, dass Du die IP auf dem falschen Interface setzt und damit ggf. auf dem WLAN eine IP setzt die eigentlich am Kabel anliegen sollte.

Naja.. ich denke das dürfte schonmal ein Stückchen helfen.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Fusel

Registriert seit: 27. Okt 2006
8 Beiträge
 
#8

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 14:45
Ich danke euch allen.
Jetzt funktioniert es
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: IP mit netsh sichern/wiederherstellen

  Alt 7. Feb 2007, 17:46
@Klasu: MSDN-Library durchsuchenWinExec ist nur noch aus kompatibilitäts Gründen für 16-Bit Programme vorhanden und schon seit langen von Microosft als obsolte gekennzeichnte. Da Vista keine 16-Bit Programme mehr unterstützt, kann e dort schon nicht mehr vorhanden sein. Stattdessen sollte man CreateProcess oder Shellexecute nehmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Fusel

Registriert seit: 27. Okt 2006
8 Beiträge
 
#10

Re: IP mit netsh sichern/wiederherstellen

  Alt 8. Feb 2007, 02:37
Habe eine Mischung von Klaus + CreateProcess genommen.
Und die funzt sehr gut.

ICH DANKE ALLEN, DIE SICH IHREN KOPF ZERBROCHEN HABEN !!!!
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:09 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