2010-08-25 15 views
5

Mam listę adresów IP w formacie IPv4, które zebrałem z poprzednich obiektów HttpRequest, które odebrał mój serwer WWW. Mam aplet java, który podaje adresy IP w formacie Ipv6 (aplet java zwraca kilka danych wraz z adresem IP). Muszę sprawdzić, czy adres IP zwrócony przez aplet pasuje do dowolnego elementu z listy.Konwersja IPv6 na IPv4 w C#

W jaki sposób można konwertować formaty IPv6 i IPv4?

Moja aplikacja internetowa zbudowana na ASP.Net C#

EDIT

tu jest problem, że jestem stoi. Aplet Java zwraca kilka adresów IP od klienta, które zakładam w zależności od liczby kart sieciowych, jakie posiada komputer klienta.

Wraz z tym otrzymuję adres IP z obiektu ASP.Net HTTPRequest. Muszę się dowiedzieć, który adres IP był rzeczywiście używany do łączenia się z moją witryną i wykonywania niektórych zadań.

Problem polega na tym, że otrzymuję tylko jeden adres IP z javaapplet w formacie IPv6, gdzie jako IP otrzymuję od obiektu HTTPRequest jest w formacie IPv4, więc porównanie nie powiedzie się.

Odpowiedz

4

Mówisz o mapowaniu IPv4-IPv6 lub osadzaniu adresów IPv4.

adres IPv4 osadczy służy do tworzenia relacji między IPv4 adres, adres IPv6 w celu ułatwienia przejścia od IPv4 na IPv6. Jeden typ , adres IPv6 kompatybilny z IPv4, jest używany dla urządzeń o numerach zgodnych zarówno z IPv4, jak i IPv6; to zaczyna się od 96 zer bitów. Drugi adres, odwzorowany przez IPv4, jest używany do mapowania urządzeń IPv4 , które nie są zgodne z IPv6 z przestrzenią adresową IPv6 ; zaczyna się od 80 zer, a następnie 16 znaków.

..

Różnica pomiędzy tymi dwoma rodzajami adresów jest subtelna, ale znaczenie. Pierwsze 80 bitów to zawsze zero, więc kiedy to widzisz, wiesz, że jest to jakiś wbudowany adres IPv4 . Adresy IPv6 zgodne z IPv4: są używane tylko dla urządzeń , które są w rzeczywistości świadome IPv6; Adres zgodny z IPv4 jest dodatkowo na swój konwencjonalny adres IPv6. W przypadku kontrastu , jeśli "FFFF" jest widoczny dla 16 bitów po początkowym 80, to oznacza konwencjonalne urządzenia IPv4 , których adres IPv4 został zmapowany do formatu IPv6. To nie jest urządzenie z obsługą protokołu IPv6.

Tak więc podstawą jest to, że nie są one zmapowane razem, nie będzie można dokonać konwersji do/z. Potrzebujesz translator.

+0

Proszę sprawdzić zaktualizowane pytanie –

2

Załóżmy, że pracujesz z jakąś platformą bezprzewodową lub masz możliwość bezprzewodowego połączenia. IPV6 ma związek z ulepszeniem sieci komórkowych AKA "Wireless". Konwersja IPV6 na IPV4 nie jest tym, czego szukasz. IPV6 to prawdziwy adres. Jest to nowy standard Advanced dla adresów IP w dzisiejszych czasach. Spójrz na Here i sam zdecyduj. Możesz również zrobić to ręcznie here. IPV6 ma maskować twój IPV4.

Nadzieję, że pomaga.

+0

Proszę sprawdzić zaktualizowane pytanie –

3

0A0D już wydawało się odpowiedzieć na to pytanie, ale dam mu szansę:

Jeśli pierwsze 10 bajtów (80 bitów) adresu IPv6 są zerowe, to można porównać ostatnie 4 bajty Europejska 4 bajty adresu IPv4.

bool AreEquivalent(IPAddress ip6addr, IPAddress ip4addr) 
{ 
    byte[] ip6bytes = ip6addr.GetBytes(); 
    byte[] ip4bytes = ip4addr.GetBytes(); 
    for (int i = 0; i < 10; i++) 
    { 
    if (ip6bytes[i] != 0) 
     return false; 
    } 
    for (int i = 0; i < 4; i++) 
    { 
    if (ip6bytes[i + 12] != ip4bytes[i]) 
     return false; 
    } 
    return true; 
} 

Zakłada się, że już wiesz, co to są ipv6 i ipv4. W razie potrzeby dodaj dodatkową logikę, jeśli chcesz porównać dowolne adresy.

+0

Powyższy kod nie wydaje się być kompletny. Zgodnie z [standardem] (http://tools.ietf.org/html/rfc3513), oprócz powyższego, musisz również sprawdzić bajty 10 i 11 na adresie IPv6. Muszą mieć wartość 0 dla "adresu IPv6 zgodnego z IPv4" i FF dla "adresu IPv6 odwzorowanego w IPv4". –