Autor Zpráva
jtfcobra
Profil
Dobrý den prosím o radu převod IPV6 na IPV4 přes PHP

mám IPV6 a potřebuji převést na IPV4 máte radu?

tento web to má http://networktools.pro/ipv6-calculator-and-converter.php když zadám IPV6 přepočítá a ukáže IVP4

Poradíte?
Marschmallow
Profil
jtfcobra:
Verze IP adres jsou dány poskytovatelem - nejčastěji internetu. Ta nedá jen tak změnit. IPv4 je dražší, protože jich je čím dál tím méně. Proto vznikly nové IPv6 adresy.
xROAL
Profil
IPv4 a IPv6 sú rozdielne verzie IP protokolu, ktoré navzájom nie sú kompatibilné. IPv6 adresa sa nedá len tak "previesť" na IPv4 adresu. Neviem, akým spôsobom to robí odkázaný web, ale žiadna IPv6 adresa nezodpovedá žiadnej IPv4 adrese. Vždy to jednoducho budú dve rozdielne adresy, rozdielnych verzií protokolu.
jtfcobra
Profil
Jo ale to ipv6 nefunguje a když ho prelozim na ipv4 tak mohu normalne se připojit ke vzdálené plose

Tak nějaký script musí existovat


drue
Profil *
Nerozumím tvému způsobu přeložím. Nic takového nejde.
Asi za to překládání považuješ toto: Aha k té IPv6 adrese se mi nejde připojit. Zkusím tedy zase tu IPv4.

K té IPv6 se ti nejde připojit kvůli jednomu z těchto nejpravděpodobnějších důvodů:
1. Tvůj poskytovatel připojení nepodporuje IPv6
2. Nemáš IPv6 adresu nastavenou na serveru
Davex
Profil
jtfcobra:
Adresní prostor IPv6 je mnohem větší než adresní prostor IPv4 (asi o 34 * 10^37 adres) a adresy se přidělují nezávisle na IPv4, takže přímý převod není možný (pokud nepočítám adresy z rozsahu ::ffff:0:0/96 do kterého jsou namapované IPv4 adresy).

Nalezení IPv4 adresy by ale mohlo fungovat tak, že by se k IPv6 adrese našlo doménové jméno reverzním DNS dotazem a toto doménové jméno přeložilo na IPv4 adresu za předpokladu, že jí má přidělenu.
jtfcobra
Profil
Adresa kterou mam zasilanou pres
<?php $ipadresa=$_SERVER['REMOTE_ADDR']; echo $ipadresa.'</br>';


prijde jednou IPV6
2002:581e:2e35::581e:2e35


a podruhe IPV4
88.30.46.53


ale porad ve vysledku je to IPV4:88.30.46.53


Nasel jsem tento SCRIPT prevod z IP4 na IP6 ale potřeboval bych ho napsat opacne poradite jak?

jde o tu $ip[full]

<?
function ipv4_to_ipv6($ipv4){
 $ipv=$ipv4;
 $ipv4=explode(".",$ipv4);
 for ($i=0;$i<4;$i++){
  $ipv6[$i]=dechex($ipv4[$i]);
 }
 $ip[full]=strtoupper ("0000:0000:0000:0000:0000:0000:".$ipv6[0].$ipv6[1].":".$ipv6[2].$ipv6[3]);
 $ip[shorthand]=strtoupper("::".$ipv6[0].$ipv6[1].":".$ipv6[2].$ipv6[3]);
 $ip[dnfull]="0000:0000:0000:0000:0000:0000:".$ipv;
 $ip[dnshorthand]="::".$ipv;

 return $ip;
}
?>
<form>
    <p><b>IPv4:</B><input type="text" name="ip"><input type="submit" value="Convert">
</form>
<?
$ip=$_GET["ip"];
if ($ip){
 $data=ipv4_to_ipv6($ip);
 echo "<b>IPv6 Celá Adresa:</b><br>";
 echo $data[full]."<br>";
 //echo "<b>IPv6 Zkrácená Adresa:</b><br>";
 //echo $data[shorthand]."<br>";
 //echo "<b>IPv6 Celá Adresa & teèkový zápis:</b><br>";
 //echo $data[dnfull]."<br>";
 //echo "<b>IPv6 Zkrácená Adresa & teèkový zápis:</b><br>";
 //echo $data[dnshorthand]."<br>";
}
?>



Zkusil jsem to takle ale nefunguje to

<?
function ipv6_to_ipv4($ipv6){
 $ipv=$ipv6;
 $ipv6=explode(":",$ipv6);
 for ($i=0;$i<3;$i++){
  $ipv4[$i]=hexdec($ipv6[$i]);
 }
 $ip[shorthand]=strtoupper($ipv4[0].$ipv4[1].$ipv4[2].$ipv4[3]);
 return $ip;
}
?>
<form>
    <p><b>IPv6:</B>
      <input name="ip" type="text" value="581e:2e35"><input type="submit" value="Convert">
</form>
<?
$ip=$_GET["ip"];
if ($ip){
 $data=ipv6_to_ipv4($ip);
 echo "<b>Po prevodu IPv4:</b><br>";
 echo $data[shorthand]."<br>";
 echo "<br>";
  echo "<b>Spravna by mela byt:</b><br>";
 echo '88.30.46.53<br>';
}
?>
Amunak
Profil
Myslím, že stále nechápeš, co to vůbec IP adresa je a jak to funguje. IP adresa je ... adresa, kterou je počítač (přesněji řečeno síťové rozhraní) identifikované v internetu (nebo prostě nějaké síti). Jedno rozhraní může mít přiděleno i více adres. Dnes má typicky každý jednu IPv4 adresu (která je navíc obvykle daná jejich poskytovatelem internetu a jsou za ní často schované desítky jednotlivých počítačů).

Když máš štěstí, tvůj operační systém, poskytovatel internetu i server podporují IPv6, a ty máš přidělenou (kromě IPv4) taky jednu nebo více IPv6 adres. Prakticky se nedá zjistit, které IP adresy pocházejí ze stejného zařízení nebo které "patří k sobě". Může se to měnit. Za jednou IPv4 adresou může být několik počítačů, a třeba jen jeden z nich používá IPv6. Navíc systém klienta si vybírá, jestli použije IPv4 nebo IPv6 spojení, a teoreticky se to může změnit i v rámci několika požadavků. Stejně tak kdyby dotyčný měl více IPv4 adres, může si mezi nimi vybírat. Ber to prostě takhle: je to, jako kdyby jeden člověk měl dvě rozdílné IP adresy. Nedokážeš říct, že k sobě patří, pokud nevíš ještě něco víc.

Zkrátka - vzdej to, takový převod neexistuje. Čeho se vlastně snažíš docílit? K čemu je ti dobré spárovat IPv6 s IPv4 adresou? Respektivě jakoukoliv IP adresu s jinou? Kdybychom to věděli, možná dokážeme poradit lépe.
juriad
Profil
jtfcobra:
Pro jednoduchost 1 počítač = 1 síťová karta s jedním rozhraním, IP adresy jsou přidělovány jednotlivým rozhraním,
Ty to asi nechápeš. 1 počítač může mít maximálně 1 IPv4, ale může mít hromadu IPv6. Nebo také nemusí mít žádnou IPv4 nebo také žádnou IPv6. Jsou to dva na sobě úplně nezávislé systémy.
Jen v praxi je obvyklé, že domácí uživatel má jen jedno připojení do internetu a to vede k jednomu poskytovateli. Jenže IPv4 cílového počítače je obvykle za (často několika) překladem (NAT). Takže ani globální IPv4 adresa cílového počítače neexistuje. V síti IPv6 sice NAT také existuje, ale nepoužívá se k obcházení nedostatků adres, tedy na něj v praxi nejspíš nenarazíš. Tam pak může každý počítač mít svoji globální IP adresu.
IPv6 se od IPv4 také liší tím, jaký rozsah každá má z přidělených adres, některé lze použít jen v rámci lokální sítě, jiné globálně.

Ta funkce ipv4_to_ipv6 je nepoužitelná. Jen mění formát IPv4, tak aby vypadal podobně jako IPv6, ale nebude tak fungovat. Můžeš na ní tedy zapomenout.

Existuje možnost přidělení IPv6 adresy v závislosti na MAC adrese, ale to je užitečné jen v rámci lokální sítě a kvůli blbosti Microsoftu (automatická změna adresy každých pár hodin), ani tam ne.

Jediné místo, kde se vyskytují údaje o IP adresách je:
1) klientský počítač (ten je má přidělené),
2) pokud se jedná o veřejně dostupný server, pak to je i DNS server.

DNS server umí ke jménu přiřadit libovolný počet IPv4 (A záznam) a libovolný počet IPv6 (AAAA záznam). Umí také z IP adresy (libovolné) určit doménové jméno (reverzní záznam), pokud existuje.
Konverze jednotlivých IP lze tedy řešit tímto způsobem, ale kvůli různým DNS load balancerům (ani z principu odlišnosti sítí) nemáš jistotu, že adresa, kterou získáš, patří jednomu fyzickému stroji.

přikaz host mi vrací tyto výsledky:
seznam.cz has address 77.75.72.3
seznam.cz has IPv6 address 2a02:598:2::3
a po chvíli tyto:
seznam.cz has address 77.75.72.3
seznam.cz has IPv6 address 2a02:598:1::3
jtfcobra
Profil
Spis mi jde o to ze mi funguje a prenastavuje O2 jako statickou IP pro chod vzdalene plochy a kamery potrebuji IP4 kterou mi vzdy prideli.....

A jde o to ze obcas se mi zaznamena IPV6 ktera vypada tak jak rikam 581e:2e35 = 88.30.46.53 a na to bych prave potreboval ten prepocet toho scriptu....

Kdyz jsem tam zadal IP4 88.30.46.53 a prepocital vysel vysledek 0000:0000:0000:0000:0000:0000:581E:2E35 a nyni to potrebuji prepocitat zpet...

jestli vis jak to chci

prijde jednou IPV6
2002:581e:2e35::581e:2e35



a podruhe IPV4
88.30.46.53
Alphard
Profil
jtfcobra:
K prostému převodu formátu dle „581e:2e35 = 88.30.46.53“:
Transformaci lze naznačit jako HH:HH <=> D.D.D.D, kde H a D jsou po řadě odpovídající si čísla v šestnástkové a desítkové soustavě.

Požadovaný převod lze zapsat takhle:
function ipFormat6to4($ip6parts) { // funkce očekává jenom dva prvky pole, žádnou hromadu nul apod.
    for ($i=0;$i<2;$i++) $ip6parts[$i] = hexdec($ip6parts[$i]);
    $ip4Parts = [(int)($ip6parts[0]/0x100), $ip6parts[0]%0x100, (int)($ip6parts[1]/0x100), $ip6parts[1]%0x100];
    return implode('.', $ip4Parts);
}
echo ipFormat6to4(explode(':', '581e:2e35')); // vystupem je 88.30.46.53

Jestli si zbývající část budete mapovat podle masky ::ffff:0:0/96, přes tunel 2002::/16 nebo nějak jinak nechám na vás.
juriad_
Profil *
Aha. Ale to se jedna jen o O2, ze v pripade, kdy mas verejnou IPv4 a zaroven IPv6, tak ze IPv6 bude koncit adresou IPv4. Toto je spis vyjimka nez pravidlo. Urcite na to nemuzes obecne spolehat.
V IPv6 zahod dvojtecky a ponechej poslednich 8 znaku. Pak kazde dva znaky chapej jako zapis cisel v sestnactkove soustave.
jtfcobra
Profil
To je presne ono Alphard a poprosim jeste o to jak zjistim 2002:581e:2e35::581e:2e35 z toho 581e:2e35 abych to mohl prevest moc děkuji ...

A ještě se fakt omlouvám ...je to španělské O2 :)
jtfcobra
Profil
Hototovo super diky mooooooooooooooooooooooooooooooc a stasne vanoce

<?php
$pole=explode("::","2002:581e:cd4d::581e:cd4d");
echo($pole[1].'</br>'); // vypíše '12'
$rozdelena=$pole[1];

function ipFormat6to4($ip6parts) { // funkce očekává jenom dva prvky pole, žádnou hromadu nul apod.
    for ($i=0;$i<2;$i++) $ip6parts[$i] = hexdec($ip6parts[$i]);
    $ip4Parts = [(int)($ip6parts[0]/0x100), $ip6parts[0]%0x100, (int)($ip6parts[1]/0x100), $ip6parts[1]%0x100];
    return implode('.', $ip4Parts);
}
echo ipFormat6to4(explode(':', $rozdelena)); // vystupem je 88.30.46.53
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: