Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: php ip, ipv6 to ipv4

Aktivity
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.2.2019 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.2.2019 11:16
 
Odpovědět
1.2.2019 11:16
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:1.2.2019 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.2.2019 11:22
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.2.2019 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.2.2019 12:32
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:1.2.2019 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.2.2019 12:44
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Peter Mlich
Peter Mlich:1.2.2019 13:02

oprava, samozrejme varbinary(16) je nutne.

 
Nahoru Odpovědět
1.2.2019 13:02
Avatar
Odpovídá na Peter Mlich
Uživatel sítě :1.2.2019 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.2.2019 15:51
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Peter Mlich
Vladislav Domin:1.2.2019 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.2.2019 16:41
Avatar
Jakub Hýža
Člen
Avatar
Jakub Hýža:1.2.2019 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.2.2019 19:05
Sleep(); Eat();. Code(); Repeat();
Avatar
Marek Uhlik
Člen
Avatar
Odpovídá na Jakub Hýža
Marek Uhlik:1.2.2019 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.2.2019 19:26
 
Nahoru Odpovědět
1.2.2019 19:24
Avatar
Jakub Hýža
Člen
Avatar
Odpovídá na Marek Uhlik
Jakub Hýža:1.2.2019 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.2.2019 20:46
Sleep(); Eat();. Code(); Repeat();
Avatar
Odpovídá na Jakub Hýža
Vladislav Domin:1.2.2019 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.2.2019 22:45
Avatar
Jakub Hýža
Člen
Avatar
Odpovídá na Vladislav Domin
Jakub Hýža:3.2.2019 16:54

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

Nahoru Odpovědět
3.2.2019 16:54
Sleep(); Eat();. Code(); Repeat();
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.2.2019 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.2.2019 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.