2010-05-28 4 views
7

Вопрос: Когда я преобразовать IP-адрес 192.168.115.67 к ряду, это делается так:
192 * 256 + 168 * 256 +115 * 256 + 67 * 256 = 3232265027

или как это:
192 * 256 + 168 * 256 + 115 * 256 + 67 * 256 = 1131653312

Я нахожу оба варианта онлайн, и, откровенно говоря, это не имеет значения, если я делаю все внутреннее сравнение диапазона IP, используя тот же вариант конверсии. Но я хочу, чтобы вычислить IP V6 с адреса IPv4, и, кажется, оба варианта в Интернете ... в результате различных адресов IPv6, и только один может быть правильным ...

Я использую 1131653312 вариант, поскольку 1131653312 - это вариант, который я видел .NET, дающий мне, но 3232265027 - это вариант, который я использовал, когда я делал это на C++, и это также вариант, который я нахожу в Интернете для преобразования IPv4 в IPv6 и который я использовал до Я видел, что .NET использует вариант 1131653312 ...Преобразование IP-адреса в номер:

ответ

5

Способ приводит к 3232265027 должен быть правильным, поскольку первое число хранится в самых высоких битах совместимости части IPv6 IPv4:

0000: 0000: 0000: 0000: 0000: FFFF: АА: CCDD

где

А.А. = 192
BB = 168
CC = 0
ДД = 1

т.д.

http://wikipedia.org/wiki/IPv6

Кроме того, вы не можете иметь в качестве IP-адреса в 256. Значения равны 0 - 255.

0

Номера отправляются по большому порядку по проводу, что аналогично тому, как они написаны (192 - самый старший байт). Таким образом, первое число является «правильным». Другим вариантом является то, как одни и те же байты будут интерпретироваться по малоинтенсивной архитектуре, следовательно, поведение .Net.

Сказав все это, я действительно не уверен, в чем вопрос, поэтому я могу только надеяться, что это изложение представляет собой ответ рода.

+0

Вопрос в том, как (правильный) IP v6 ищет данный IP v4. –

+0

Quandary, внесите поправки, чтобы понять это. –

5

это, безусловно, первый. вы можете выполнить ping и посмотреть, как утилита ping преобразует ее в нотацию a.b.c.d. если вы собираетесь сделать это преобразование, я рекомендую выражение: (a << 24) | (b << 16) | (c << 8) | d

+0

почему downvoting? – Andrey

+0

Вы не можете так сказать; это зависит от конъюнктуры его платформы. Хорошо, я полагаю, вы можете, так как .NET не точно переносится на множество разных платформ. Но в принципе вы не можете этого сказать. –

+0

@ T.E.D. как номер он будет выглядеть как 3232265027. Второй вопрос в том, как он хранится в памяти, и этот момент я вообще не упоминал. – Andrey

0

Разница связана с endianness. Вы храните его в целочисленном виде, но разные процессоры имеют разные порядки байтов для своих целых чисел (сначала большой или маленький). Тем не менее, это число должно выходить за линию, поэтому IP имеет конкретный порядок, в котором ему нужны переданные байты. Этот порядок отличается от биендианских и малочисленных машин.

+0

Я не знаю много о .net перекрестке различных аппаратных средств, однако не .net подмечено к абстрактному смещению байтов для целых чисел? –