Was genau bzw. wie wurde IPAddress.Address gebaut?

  • Allgemein

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von daniel303.

    Was genau bzw. wie wurde IPAddress.Address gebaut?

    Hallo ihr,

    ich arbeite mit IP-Adressen und benutze das Objekt IPAddress.
    Das Objekt hat eine Eigenschaft namens "Address" in der eine Zahlenkombination enthalten ist, welche sich zu einer IP-Adresse umwandelt lässt indem man IPAddress.ToString benutzt. Ich könnte diese Eigenschaft benutzen, da diese aber veraltet ist, möchte ich sie nicht benutzen. Weiterhin nutze ich die DLL "iphlpapi.dll" welche mir die MAC-Adresse mithilfe der IP eines Computers gibt.
    Diese IP soll als UInteger-Datentyp übergeben werden. Zuvor habe ich folgenden code benutzt:

    VB.NET-Quellcode

    1. SendARP(CUInt(ip.Address), 0, mac, len)


    Das Objekt IPAddress stellt mir außerdem die Methode "GetIPBytes" zu verfügung also ein byte-array wo dann z.B. bei index 0 = 172, index 1 = 16, index 2 = 0, index 3 = 111 ...
    Ich könnte jetzt natürlich alles zusammenbauen aber ich würde gerne wissen (in der Doku steht nüx) wie denn IPAddress.Address zustande kommt.
    Wenn die IP-Adresse 172.16.0.111 ist, dann steht in Address: 186227524

    Folgendes habe ich schon ausprobiert:

    .GetIPBytes() in binär umwandeln
    [0] -> 172 = 10101100
    [1] -> 16 = 00010000
    [2] -> 0 = 00000000
    [3] -> 111 = 01101111
    ________________________
    Den Binärcode als gesamten zurück ins Dezimalsystem:
    10101100 00010000 00000000 01101111 = 2886729839
    passt nicht...:(
    Anders herum hab ich es auch schon probiert also 186227524 ins Binärsystem und dann in 4 8-bit teile geteilt und dabei kommt dann raus:

    11011110 0 222
    00000000 = 0
    00100001= 33
    0101100 = 44
    _____________
    222.0.33.44 -> ergibt keinen sinn :pinch:


    Weiß nicht ob jemand damit etwas anfangen kann oder gar helfen kann aber ein versuch ist es Wert ^^

    Danke und viele Grüße,
    Daniel303

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „daniel303“ ()

    "Diese IP soll als UInteger-Datentyp übergeben werden. Zuvor habe ich folgenden code benutzt"

    Du weisst, eine ip kann von 0.0.0.0 bis 255.255.255.255 gehen, ja?
    Und ein byte ist maximal 255 groß. Das heisst, die IP besteht aus 4 bytes.
    Du weisst, dass 10101010 oder so etwa so in ein Byte umgewandelt wird.
    1, 2, 4, 8, 16, 32, 64, 128 sind die einzelnen bits.
    Das heißt:
    1 + 0 + 4 + 0 + 16 + 0 + 64
    10101010 wäre also 85, aber das stimmt nicht.
    Man liest ein Bitcode rückwärts.
    Also 01010101 was so aussäße:
    0 + 2 + 0 + 8 + 0 + 32 + 0 + 128
    10101010 wird rückwärts gelesen und entspricht 170.

    Wenn man nun 4 bytes hat, ist der byte code auf 4 mal so lang!
    Mal angenommen wir haben den bitcode:
    10101100 00010000 00000000 01101111


    #edit warte warte warte.
    Wo ist das problem?! o.o
    Dim IP As New Net.IPAddress(DeinUInteger)
    Oh ja stimmt hab da einen dreher drinnen aber es kommt trotzdem nicht hin... :pinch:

    #edit warte warte warte.
    Wo ist das problem?! o.o
    Dim IP As New Net.IPAddress(DeinUInteger)


    Ich hab den UInteger nicht ich habe wahlweise einen String oder diese Nummer bzw. ein Byte Array wie oben beschrieben.
    Ich wollte es aber vermeiden den UInteger mit dem Byte Array zusammenzubauen... ;)

    Gruß,
    Daniel303
    D172 = B10101100
    D16 = B00010000
    D0 = B00000000
    D111 = B01101111

    Das ganze umkehren:

    D111 = B01101111
    D0 = B00000000
    D16 = B00010000
    D172 = B10101100

    Dann zusammen:
    01101111000000000001000010101100

    Ins Dezimale umwandeln:
    1862275244

    Eine 4 mehr als Samus Arans Zahl...

    Nebenbei:

    UInt ist ein unsigned (ohne Vorzeichen) Integer, also eine 4byte Zahl.

    "Speichert 32-Bit-(4-Byte-)Ganzzahlen ohne Vorzeichen mit einem Wert zwischen 0 und 4.294.967.295."

    Max: 4294967295
    Wert:1862275244

    Das kommt prima hin.

    Die Zahlen sind als Little Endian kodiert, also die Bytes genau verkehrt herum ;)