Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

Aus Int64 die Oktette einer IP Adresse berechnen

  Alt 15. Aug 2006, 23:19
Moin Moin,

Ich benutze die Funktion MakeIpAddress aus der commctr.pas um den "Wert" einer IP Adresse (String) zu ermitteln.

Delphi-Quellcode:
function GetIpValue(IPS:String):int64;
  var sl:TStringList;
begin
  sl:=TStringList.create;
  try
    // Oktette der IP Adresse splitten
    sl.Delimiter:='.';
    sl.DelimitedText:=IPS;
    if sl.count=4 then
    begin
      // 4 Oktette > IP String könnte gültig sein
      try
        result:=MakeIpAddress(strToInt(sl[0]),strToInt(sl[1]),strToInt(sl[2]),strToInt(sl[3]));
      except
        // ungültiger IP String (IPS) > Result auf Broadcastadresse setzen
        result:=4294967296; // 255.255.255.255
      end;
    end
    else begin
      // ungültiger IP String (IPS) > Result auf Broadcastadresse setzen
      result:=4294967296; // 255.255.255.255
    end;
  finally
    sl.free;
  end;
end;
Die Funktion liefert folgende Ergebnisse

167772161 // 10.0.0.1
167772162 // 10.0.0.2
3232235777 // 192.168.1.1
3232235778 // 192.168.1.2

Die Ergebnisse entsprechen dem Deizmalwert der IP Adresse.

Code:
Rechenbeispiel 192.168.1.1:

---Oktett 4 - Wert Dezimal 1 ------------------------
  2^0   *  1 = 1
  2^1   *  0
  2^2   *  0
  2^3   *  0
  2^4   *  0
  2^5   *  0
  2^6   *  0
  2^7   *  0
---Oktett 3 - Wert Dezimal 1 ------------------------
  2^8   *  1 = 256
  2^9   *  0
  2^10  *  0
  2^11  *  0
  2^12  *  0
  2^13  *  0
  2^14  *  0
  2^15  *  0
---Oktett 2 - Wert Dezimal 168 ------------------------
  2^16  *  0
  2^17  *  0
  2^18  *  0
  2^19  *  1 = 524288
  2^20  *  0
  2^21  *  1 = 2097152
  2^22  *  0
  2^23  *  1 = 8388608
---Oktett 1 - Wert Dezimal 192 ------------------------
  2^24  *  0
  2^25  *  0
  2^26  *  0
  2^27  *  0
  2^28  *  0
  2^29  *  0
  2^30  *  1 = 1073741824       
  2^31  *  1 = 2147483648
=============================================================
             = 3232235777  // 192.168.1.1

Ich scheitere jetzt den Weg zurück (vom int64 zum String).

Delphi-Quellcode:
function GetAddressString(value:int64):String;
  var okt1,okt2,okt3, okt4: integer;
begin
  
  // Das 4. Oktett kann ich noch selber. :mrgreen:
  okt4 := Value mod 256;
  okt3 := :coder2:
  okt2 := :coder2:
  okt1 := :coder2:
  
  result:=inttostr(okt1)+'.'+inttostr(okt2)+'.'+inttostr(okt3)+'.'+inttostr(okt4);


end;

Kann mir bei den Oktetten 1 bis 3 jemand helfen ?
  Mit Zitat antworten Zitat