Announcement

Collapse
No announcement yet.

Inet Ip auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Inet Ip auslesen

    Hi hat wer ne Idee, wie ich die aktuelle Ip auslese??
    Ich brauche ein Programm, dass regelmässig die IP checked und bei bedarf sie in eine cfg schreibt.
    Bisher hatte ich nur die Idee einen Ipconfig in eine Datei zu schreiben, diese Datei zu öffnen und nach der richtigen Stelle zu suchen.
    Hat wer noch eine andere eventuell bessere Idee??

    Thx

    CC

  • #2
    Hallo Christopher,<br>schau mal unter
    GetHostName(Buffer, SizeOf(Buffer));
    http://www.entwickler-forum.de\webx?13@@.ee7def3/0
    Die zweite Funktion listet alle IP-Adressen auf. Mein Rechner hat z.Z. zwei IP-Adressen. Die statische LAN-Adresse und die dynamische von T-Online

    Comment


    • #3
      nenene, warum muss sowas nur so kompliziert sein. Da finde ich meine Behilfsmethode echt fast besser. Die funktioniert ohne großen Schnickschnack und ist zudem noch extrem kurz.

      var f : textfile;<br>
      zeile, hilf: string;<br>
      i : integer;<br>

      Begin<br>
      ShellExecute(Handle, 'open', 'c:\test.bat', 0, 0, SW_SHOWNORMAL);<br>
      assignfile(f, 'c:\ip.txt');<br>
      reset(f);<br>
      For i := 1 to 7 do<br>
      readln(f,zeile);<br>
      edit1.text := copy(zeile,pos(':',zeile)+2,15);<br>
      closefile(f);<br>
      end;<br>
      das ist quasi alles.

      In der test.bat steht dann lediglich ein ipconfig >c:\ip.txt drin. Leider funktioniert, der Befehl nicht direkt mit Shellexecute. Irgendwie macht der da mist. Aber so gehts auf jedenfall.
      Wenn man noch ein bissel verändert, kann man auch die anderen Ips des Pcs so auslesen. Hierzu muss lediglich der Wert bei der For to schleife erhöht werden

      Comment


      • #4
        Hallo,

        hast du schon mal was von den X2000 Komponenten gehört?? Da ist auch eine komponente für die Nezwerkkarte dabei, mit der man die verwendeten IP Adressen auslesen kann!! <br>
        <br>
        mfg<br>
        Simon Rot

        Comment


        • #5
          @Christopher, jeder so wie'ers mag. In deiner methode wird vorausgesetzt das auf dem Rechner ipconfig.exe existiert und der Zugriff darauf gestattet ist. Leider ist beides des öfteren NICHT der Fall. Zudem wird vorausgesetzt das es keinen ShellExecute() Hook gibt der verhindert das diese programm ausgeführt wird oder schlimmer noch das es nicht durch ein anderes falsches tool ersetzt wurde.<br>
          All diese "Einschränkungen" wären für mich unakzeptabel und deshalb würde ich wiederum Jens Hinweis vorziehen.

          Gruß Hage

          Comment


          • #6
            da das Prog eine erweiterung zu einem Win2k Service ist, muss der BEfehl ipconfig so oder so da sein. Der Zugriff ist eventuell ein Problem, da es aber um einen Server geht, der administriert werden muss, wird der eh von einem Admin betreut, der dann auch diese rechte setzt.
            Zudem ist es bisher erstmal nur für den privaten gebrauch bestimmt und soll nicht von 5000 Personen genutzt werden. Wenn es dazu kommt, werde ich es wohl nocheinmal umschreiben. Doch bis dahin reicht mir meine Version, die ich wenigens verstehe und wo ich weiß, welcher Aufruf was macht.

            Dennoch Thx

            Comment


            • #7
              @Christopher: Du hattest aber ganz am Anfang nach einer besseren Idee gefragt. Auch wenn´s für Privatzwecke ist - als Teil oder Erweiterung eines NT-Dienstes mit DOS-Aufrufen rumfummeln ... | ... Ich weiß nicht ... Mit der Funktion, die Jens und Hagen vorgeschlagen haben, bist du in jedem Fall auf der sicheren Seite.

              @Jens: Danke für den Link. Ich habe auch schon überlegt, wie ich an meine zweite, dynamische IP rankomme. Aber diese zweite Funktion hat IMHO leichte Schwächen.
              Zum einen erfolgt keine Kontrolle ob "WsaStartup" erfolgreich war. Aber problematischer dürfte wohl diese Sache sein:

              <PRE>
              if phe = nil then
              begin
              exit;
              end;
              </PRE>

              Sollte aus irgendeinem Grund diese Bedingung erfüllt sein (und bei Windows muss man ja leider mit Fehlern aller Art rechnen), dann wird die Funktion beendet, ohne die StringListe freizugeben und "WsaCleanup" aufzurufen.
              Mein Mittelteil der Funktion sieht deshalb jetzt so aus:

              <PRE>
              <b>begin</b>
              <font color=#0000ff><i>// default result (Leerstring zuweisen)</i></font>
              Result := '';<br>
              <font color=#0000ff"><i>// try to init Network functions</i></font>
              <b>if</b>(WsaStartup(MAKEWORD(1,1),GInitData) <> 0) <b>then</b> exit;<br>
              <font color=#0000ff"><i>// go ahead!</i></font>
              TempList := TStringList.Create;
              <b>with</b> TempList <b>do</b>
              <b>try</b>
              Clear; GetHostName(buffer,sizeof(buffer)); phe := GetHostByName(buffer);<br>
              <b>if</b>(phe <> <b>nil</b>) <b>then</b>
              <b>begin</b>
              pPtr := PaPInAddr(phe^.h_addr_list);
              i := 0;<br>
              <b>while</b>(pPtr^[i] <> nil) <b>do</b>
              <b>begin</b>
              Add(inet_ntoa(pPtr^[i]^)); inc(i);
              <b>end</b>;<br>
              <font color=#0000ff"><i>// alle IPs komma-separiert zurückliefern</i></font>
              Result := CommaText;
              <b>end</b>;
              <b>finally</b>
              Free;
              <b>end</b>;<br>
              WsaCleanup;
              <b>end</b>;
              </PRE>

              Müsste doch so besser sein?!

              Gruß,
              Mathias.

              <i>PS: Hm, die PRE-Formatierung verschluckt wohl einige Zeichen. Ich vertraue mal darauf, dass ihr wisst was ich meine, denn der Code ist eigentlich Delphi-erprobt und fehlerfrei.</i&gt

              Comment


              • #8
                Hallo Mathias,<br>
                das mit if phe nil then begin exit; end; ist nicht problematisch, da<br>
                es innerhalb eines Try/Finally Blocks aufgerufen wird. Wenn Du Exit innerhalb eines Try/Finally Blöcks aufrufst,<br>
                wird der Finally-Abschnitt abgearbeitet !!! Teste es mal mit dem Debugger. Ach ja, wer weiß was D6 macht. Bei D5 ist es aber so.<br&gt

                Comment


                • #9
                  wird ein geschützer Codeblock (try finally end) auf IRGENDEINE Weise, sei es per Exit oder Exception, verlassen MUSS immer der finalization code zwischen finally end; ausgeführt werden. Das ist ein Grundlage des Exceptionhandlings/Codeblockschutzes. Damit muß D6 auch so reagieren. In Kylix gibt es aber generelle Problem mit geschachtelten try finally end; und try except end; Blöcken. D.h. Kylix Code in diesem Sinne ist bad.

                  Gruß Hage

                  Comment


                  • #10
                    Aha! Das habe ich noch nicht gewusst. Ich gehe da wohl immer auf Nummer (zu) sicher? ;o) Ich habe da eben im Hinterkopf, dass man mit "exit" aus den Funktionen raus geht und den nachfolgenden Code nicht mehr ausführen lässt.<br><br>
                    Danke für den Hinweis.<br><br>
                    Mathias

                    Comment


                    • #11
                      Bei folgendem Test springt mein Debugger direkt ans Ende der Precedure:<br>
                      <br>
                      <PRE>
                      procedure Test;
                      var
                      slTest, slTest1: TStringList;
                      begin
                      slTest := TStringList.Create;
                      try
                      slTest1 := TStringList.Create;
                      try
                      if not bAllesOK then Exit;
                      finally
                      slTest1.Free;
                      end;
                      finally
                      slTest.Free;
                      end;
                      end;

                      begin
                      bAllesOK := False;
                      Test;
                      end.
                      </PRE&gt

                      Comment


                      • #12
                        Korrekt, ich nehme mal an du nutzt D5 oder D6 ?
                        Der Debugger zeigt dir aber NICHT den korrekten Ausführungspfad an. Der "Intergrierte" Debugger ist sein D4 durch einen "Externen" debugger ersetzt wurden, "BorDbk*.dll", ist nichts anderes als ein COM. Dieser Debugger zeigt seit D4 "erstaunliche Merkwürdigkeiten" und die einzigste mir bekannte Methode exakt zu erkennen was auch abläuft ist mit Hilfe des CPU Fensters. Also, CPU-View aufgemacht und in diesem mit F7 weiterdebuggt, oder einfach mal bei den TStringList.Free ein MessageBeep(-1) reingesetzt.<br>

                        Auf alle Fälle wirst Du sehen das sehr wohl die finally end. Blöcke ausgeführt werden.<br>

                        Hagen

                        PS: das ist einer der Gründe warum ich noch am liebsten mit D3 arbeite D3 reagiert so wie ich es im sage, das was ich code und sehe passiert auch

                        Comment


                        • #13
                          Hallo Hagen,<BR>
                          <BR>
                          richtig es war D5 Prof. Mit einem ShowMessage habe ich die Richtigkeit Deiner Aussage feststellen können.<BR>
                          <BR>
                          Also, trau keinem Debugger über drei(ßig).<BR&gt

                          Comment


                          • #14
                            @Hallo Jens,<br>
                            <br>
                            ich kenne mich mit der Materie leider nicht besonders aus!<br>
                            Daher die Frage, wie bekomme ich die richtige Adresse um innerhalb des <br>unseres Firmennetzes (Intranet - LAN) agieren zu können. <br>
                            Sprich, angenommen ein Rechner hat mehrere Netzwerkkarten: <br>
                            eine davon ist für das Internet (DSL) eine weitere für das LAN <br>konfiguriert. Welche IP ist dann von den andern Rechnern der Firma <br>erreichbar. Gibt es eine Regelmäßigkeit? Kann man über die <br>Funktion "function getIP: String;" von Jim Bean arbeiten, und welcher <br>Eintrag der Liste ist dann maßgeblich?<br>
                            <br>
                            Gruß Stefa

                            Comment

                            Working...
                            X