2010-05-28 30 views
7

pytanie: Kiedy przekonwertować 192.168.115.67 adresów IP do numeru, to się robi tak:
192 * 256 + 168 * 256 +115 * 256 + 67 * 256 = 3232265027

lub jak poniżej:
192 * 256 + 168 * 256 + 115 * 256 + 67 * 256 = 1131653312
Znajduję oba warianty w Internecie, i szczerze mówiąc, nie ma to znaczenia, dopóki wykonuję wszystkie wewnętrzne porównanie zakresu IP przy użyciu tego samego wariantu procesu konwersji. Ale chcę obliczyć IP V6 z adresu IPv4 i wydaje się, że oba warianty są w Internecie ... powodujące różne adresy IPv6 i tylko jedno może być poprawne ...

Używam 1131653312 wariant, ponieważ 1131653312 jest wariantem, który widziałem .NET daje mi, ale 3232265027 jest wariantem, którego użyłem, gdy zrobiłem to w C++, i że jest to również wariant, który znajduję w Internecie dla konwersji IPv4 na IPv6, i który użyłem wcześniej Widziałem, że .NET używa wariantu 1131653312 ...Konwersja adresu IP na numer:

Odpowiedz

5

Sposób powodując 3232265027 muszą być prawidłowo, jako pierwszy numer znajduje się w najwyższych bitów zgodności części IPv4 IPv6:

0000: 0000: 0000: 0000: 0000: FFFF: AABB: CCDD

gdzie

AA = 192
BB = 168
CC = 0
DD = 1

etc.

http://wikipedia.org/wiki/IPv6

Ponadto, nie może mieć 256 w adresie IP. Wartości wynoszą 0 - 255 każda.

0

Numery są wysyłane w kolejności wielko-endianowej przez przewód, który jest taki sam jak sposób ich zapisu (192 jest najbardziej znaczącym bajtem). Tak więc pierwsza liczba jest "poprawna". Drugi wariant polega na tym, że te same bajty będą interpretowane na architekturze małego endianu, stąd zachowanie .Net.

Powiedziawszy to wszystko, nie jestem do końca pewien, jakie jest to pytanie, więc mogę tylko mieć nadzieję, że ta ekspozycja stanowi pewnego rodzaju odpowiedź.

+0

Pytanie brzmi, jak wygląda (poprawny) IP v6 dla danego IP v4. –

+0

Quandary, popraw odpowiedź, aby było jasne. –

5

to zdecydowanie pierwsza. możesz pingować i zobaczyć, jak narzędzie ping konwertuje je do notacji a.b.c.d. jeśli zamierzasz wykonać tę konwersję, polecam wyrażenie: (a << 24) | (b << 16) | (c << 8) | d

+0

dlaczego downvoting? – Andrey

+0

Nie można tak naprawdę powiedzieć; zależy to od endianiczności jego platformy. OK, cóż, przypuszczam, że możesz, ponieważ .NET nie jest dokładnie przeniesiony na wiele różnych platform. Ale w zasadzie nie można tego tak naprawdę powiedzieć. –

+0

@ T.E.D. jako liczba będzie wyglądać jak 3232265027. Drugie pytanie dotyczy sposobu, w jaki jest ono przechowywane w pamięci, a ten punkt w ogóle nie wspominałem. – Andrey

0

Różnica polega na endianness. Przechowywany jest on w postaci liczby całkowitej, ale różne procesory mają różne kolejność bajtów dla ich liczb całkowitych (najpierw duży lub mały koniec). Jednak liczba ta musi wyjść poza linię, więc adres IP ma określoną kolejność potrzebną do przesłania bajtów. Ta kolejność wygląda inaczej w przypadku maszyn bigendowskich i littleendian.

+0

Nie wiem zbyt wiele o .net cross różnych sprzętu, jednak nie jest .net suposed do abstrakcyjnego przesunięcia bajt dla liczb całkowitych? –