Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1. února 11:16

Mam stary redakcni system, ktery uklada uzivatelovu ipv4 jako string 15 znaku.

Nove, dostanu ipv6 adresu. Co si s ni pocit?

  • oriznout na 15 znaku?
  • pouzit prevod ipv6 na ipv4, kde, odkud, jaky? Marne googluji asi 2h. Kazde reseni zatim dava odliznou adresu od predchoziho :)
js: 90.37.242.224
php:32.1.113.8
  • rozsirit sloupec v db? na kolik? Opet, info z googlu se rozchazeji. 31, 45, 64 znaku
  • take jsem nasel jakesi prevody pres inet_pton(), to moc nechapu
  • prevody pomoci ipv6_numeric + unpack + ipv6_numeric, kde to prevede na cislo. Opet se zdroje rozchazeji
"42540632052080616404664666488224882400" string(38)
"42540632052080619037266011618785227488" string(37)
"42540632052080619037266011618785227488.0000000000"
  • nebo nejake jine reseni?

V tuto chvili program nefunguje :) Do db ulozi pri loginu 15 znaku z ip. A pri update session porovnava 15 znaku s celou ip a pak se pokusi pridat novy zaznam INSERT. Jenze ten ocese ip na 15 znaku a hlasi duplicate entry :)
A s ip se pracuje treba pri ukladani zpravy na forku od uzivatele. Takze, idealni by byla funkce ivp6toipv4 a nemusi se hledat, ve ktere tabulce je ta adresa.

va_dump($_SERVER['REMOTE_ADDR']); // 2001:718:2601:258:4dbc:3838:5a25:f2e0

Zkusil jsem: .

Chci docílit: .

Editováno 1. února 11:16
 
Odpovědět 1. února 11:16
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:1. února 11:22

to cislo by melo tu vyhodu, ze se da zapsat jako 15 mozna 16 znaku. takze by to vyhovelo v podstate puvodnmu formatu.

 
Nahoru Odpovědět 1. února 11:22
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1. února 12:32

Ted jsem objevil tuto stranku, ktera asi problem pekne shrnuje, ohledne tech funkci, ktere jsem prilis nechapal.
https://intsystem.org/…-ipv6-v-php/

if( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ){
    // IPv4
}

if( filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ){
    // IPv6
}

var_dump( inet_pton( $ip4 ) ); // string(4) " c"
var_dump( inet_pton( $ip6 ) ); // string(16) "i?1 i?1"

function dtr_pton( $ip ){

    if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){
        return current( unpack( "A4", inet_pton( $ip ) ) );
    }
    elseif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){
        return current( unpack( "A16", inet_pton( $ip ) ) );
    }

    throw new \Exception("Please supply a valid IPv4 or IPv6 address");
}
 
Nahoru Odpovědět 1. února 12:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1. února 12:44

16 znaku, na urovni sql, to vypada slibne

SELECT INET6_NTOA(`ip_address`) AS `ip` FROM `log_table` WHERE INET6_ATON(`ip_address`) = ?;
 
Nahoru Odpovědět 1. února 12:44
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:1. února 13:02

oprava, samozrejme varbinary(16) je nutne.

 
Nahoru Odpovědět 1. února 13:02
Avatar
Odpovídá na Peter Mlich
Uživatel sítě :1. února 15:51

Nestačilo by pouze změnit sloupci max. počet znaků?

Jak může být ipv6 maximálně dlouhá jako řetězec, 39 znaků?

Nahoru Odpovědět 1. února 15:51
Chybami se člověk učí, běžte se učit jinam!
Avatar
V-D.sk
Člen
Avatar
Odpovídá na Peter Mlich
V-D.sk:1. února 16:41

Prevod IPv6 na IPv4 by nemal byt mozny, uz len z toho hladiska, ze pocet IPv4 je 232 a IPv6 je 2128.

Takze ostava ti len zvacsit retazec na 39 znakov, nakolko IPv6 obsahuje 8 skupin 4 hexadecimalnych cislic oddelenymi ":", cize to mas 8*4 + 7

 
Nahoru Odpovědět 1. února 16:41
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jakub Hýža
Redaktor
Avatar
Jakub Hýža:1. února 19:05

Není možné převádět mezi IPv4 a IPv6 protože se jedná o dva různé systémy/údaje. Nemůžeš že zařízení které má pouze IPv4 poslat data na zařízení které má pouze IPv6 a naopak.

Nahoru Odpovědět 1. února 19:05
Sleep(); Eat();. Code(); Repeat();
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Hýža
Marek Uhlik:1. února 19:24

Vím že tohle vlákno není o tom, ale lze udělat komunikaci mezi sítí která je pouze ipv4 a ipv6.
Nepůjde 100% všechno, ale základní komunikace lze.
Ale pravda že převést ipv6 na ipv4 nelze
Nebo taky záleží jak do podrobna to bereš no.

Editováno 1. února 19:26
 
Nahoru Odpovědět 1. února 19:24
Avatar
Jakub Hýža
Redaktor
Avatar
Odpovídá na Marek Uhlik
Jakub Hýža:1. února 20:46

Je možné že základní komunikace lze, ale na SŠ ti řeknou že to nelze. Ale brzo bude IPv10 což umožní plnohodnotnou komunikaci mezi IPv4 a IPv6

Nahoru Odpovědět 1. února 20:46
Sleep(); Eat();. Code(); Repeat();
Avatar
V-D.sk
Člen
Avatar
Odpovídá na Jakub Hýža
V-D.sk:1. února 22:45

Neviem, kde si cital o tom, ze coskoro bude IPv10, ale podla vsetkeho to bol len navrh, ktory sa realizovat nebude nakolko je to uplny nezmysel.

 
Nahoru Odpovědět 1. února 22:45
Avatar
Jakub Hýža
Redaktor
Avatar
Odpovídá na V-D.sk
Jakub Hýža:3. února 16:54

Říkal nám to učitel. Kde to četl nevím.

Nahoru Odpovědět 3. února 16:54
Sleep(); Eat();. Code(); Repeat();
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. února 11:58

Nechtel jsem zasahovat do db. Ale bracha mne ukecal, ze to natahne na 39 znaku. Takze je to ok.
Ja vetsinou uvazuji uspornejsim zpusobem. IP je tam jako index. Cim mene znaku, tim lepe. Proto jsem to cele chtel konvertovat na varbinary. Ale, vzhledem k tomu, ze se jedna asi o 10 radku ban tabulky a 100 radku zprav je to asi celkem jedno.

Ano, navody na prevod ipv6 na ipv4 mi nedavali smysl, podle toho, co o tom vim. Ale neni to ma oblast zajmu, tak jsem se zeptal. Nepotrebuji nutne uzivatele identifikovat velkou ip adresu, abych mu dal ban. Stacila by mi cast adresy.
No, ale puvodni kod orezaval adresu na 15 znaku, takze SELECT ip15=ip39 rekl, ze se ip neshoduji a pokusil se vytvorit dalsi radek do tabulky pomoci INSERT. A tam to cele zkapalo na duplicity-id-ip :) Promarnil jsem furu casu nez mi doslo, co je spatne :)

 
Nahoru Odpovědět 4. února 11:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.