abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 9
dnes 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 0
včera 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 5
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 46
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 18
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 7
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 775 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: C rozdělení ip rozsahu inet_net_ntop s AF_INET6

2.11.2015 19:20 foldy
C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Přečteno: 450×

Mám problém s rozdělením rozsahu ipv6, potřebuji rozdělit ip rozsahy dle potřeby, s ipv4 mi to funguje v pořádku pomocí :
inet_net_ntop(AF_INET,odkud,24,kam,INET_ADDRSTRLEN); a vše je ok výstup: A.B.C.0/24 apod.

Knihovna arpa/inet.h to ale neumí s AF_INET6, snažil jsem se to nějak implementovat s postgresql databáze s knihovnou inet_net_ntop.c, ale nechci kvůli tomu includovat celý postgresql a tu část svobodné knihovny se mi nepodařilo správně vyvázat a rozchodit.

Potřebuju rozsekat ipv6 dle potřeby např.:
A:B:C:D:E:F:G:H/128 -> A:B:C:D::/64 apod.
Znáte nějakou jinou knihovnu/metodu, (nejlépe aby byla malá a v rámci GPL) jak na to ?
Díky

Odpovědi

3.11.2015 06:03 Sten
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Vždyť je to celkem triviální to napsat, ne? Vezmeš adresu, vymaskuješ ji daným počtem bitů a vypíšeš, u IPv6 hexadecimálně v blocích po 16 bitech.
3.11.2015 07:31 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
No to si úplně nemyslím, můžou tam být zkráceniny, vynechány kvůli tomu některé bloky a další pravidla pro parsování, které jsou v ipv6 zavedené. Ten alg. z postgre to i zkracuje. Měl by vyrobit i výstup : 2001:ABCD::/64 apod..
3.11.2015 08:13 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6

Zkracování je jen možnost, není to povinné. Např.

  ::
  0000:0000:0000:0000:0000:0000:0000:0000
  0:0:0:0:0:0:0:0
  0:00:000:0000:0000:000:000:0
  0::0

jsou všechno korektní zápisy stejné adresy.

3.11.2015 10:10 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
joo to vím, ale to zkracování se mi právě docela hodí, budu to vkládat do DB.
3.11.2015 10:15 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Pro potřeby ukládání do databáze by mi přišla vhodnější nativní reprezentace než textová.
3.11.2015 11:27 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Zkracena textova bude právě zabírat méně, proto potřebuji to zkrácení a ten alg. to bude zkracovat stále na stejné dělky, pokud ten rozsah bude stejný. Jde mi také o velikost.
3.11.2015 11:40 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Jste si opravdu jistý, že vám to statisticky bude vycházet kratší než 16 B? A pokud ano, bude to o tolik kratší, aby to vyvážilo složitější (a pomalejší) práci s těmi adresami?
3.11.2015 11:41 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
(Nebo 17 B, pokud se bavíme o adrese a délce prefixu.)
3.11.2015 11:54 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Právě pro sqlite se doporučuje to mít ve stringu.
3.11.2015 12:52 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Miluju zdůvodnění typu "se doporučuje"…
3.11.2015 15:44 Sten
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
„Doporučuje se“ to, jen pokud nad těmi adresami nebudou prováděny žádné operace, takže je není potřeba parsovat a formátovat. Když už jsou naparsované, tak je tam rovnou lze uložit jako čísla.
3.11.2015 19:46 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
půjde jen o porovnání strcmp, takže string je akorát a nemusí se to zpětně převádět, pro mě, zbytečná ntop navíc.
3.11.2015 20:24 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Tak teď už jsem z toho úplně jelen. Pokud to dostáváte ve formě textové reprezentace a hodláte s tím pracovat výhradně v ní, proč vás vůbec zajímá funkce inet_net_ntop(). Pokud to dostanete v nativní reprezentaci, tak porovnání na rovnost můžete provést i v ní (a bude jednodušší).
3.11.2015 21:12 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6

Ok, vysvětlím, jen jsem vždy překvapený, že se každý musí ujistit, že to potřebuji.

je to fastcgi webapp v C, kdy chodí requesty do login systemu,ip přijde z getenv jako string, v normálním případě se převede na in6_addr strukturu a pracuje se s ní, vyhodnocuje apod., existuje ale prvotní kontrola, v určitých případech, kdy přijde request rovnou se vezme string z getenv, porovná se string v DB a v případě shody se komunikace zahazuje (typicky obrana před utoky apod)

Proto je důležité zkrácení a převod do /64,56 atd... dle toho co chci zahodit. Čím menší string (i menší data v DB), tím rychleji se odmítne komunikace s něčím s čím nechci komunikovat. Nechci tam mít konverzi na in6_addr, porovnání s intem atd.. zbytečné instrukce navíc pro ten případ.

Ve fázy zpracování (což je jiný případ) v in6_addr potřebuji zkonstruovat ten rozsah a zkrátit ho, proto ten int_net_ntop...

3.11.2015 21:46 Sten
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Jak funguje porovnávání hodnoty z getenv s rozsahem /64 bez toho, abyste to musel parsovat?
3.11.2015 22:19 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Parsovat už to nemusím, stačí porovnat, pokud je rozumně zvolená část ip subnetu současně i názvem souboru a dat v ní, pak první sekvenci názvu použijete pro automatický výběr db a druhou část porovnáte binárním algoritmem, do první :: nebo /.
4.11.2015 05:52 Sten
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
No jestli podle IP adresy volíte databázi, pak už je úplně jedno, co dál to dělá
4.11.2015 11:30 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
ok
4.11.2015 01:46 Ivan
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Jses si jistej, ze to optimalizujes na spravnym miste? Opravdu je to tak, ze kratsi string => mensi data v DB => rychlejsi zpracovani? Pokud je tam nejaky index tak to bude vice-mene jedno. Dulezita je vyska indexu. A proc nepouzijes nejakou ldbm databazi?
4.11.2015 11:29 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Ten string může být pak i v texťáku, je to jedno, zatím to zkouším s sqlitem. LDBM db neznám.
4.11.2015 17:08 Ivan
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
dbm je primitivni key-value storage databaze. Poziva ji napriklad openldap jako svuj backend. Ten implementaci je vic - jedna z nich je napriklad sleepycat.
3.11.2015 15:40 Sten
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Zkrácenina je maximálně jedna a primitivní implementace to může buď nezkracovat či zkracovat podle zadané masky (např. /56 → posledních 72 bitů lze zkrátit). Problém je parsovat IPv6 adresy, vypsat je ve fungujícím tvaru je opravdu triviální.
pavlix avatar 4.11.2015 19:06 pavlix | skóre: 53 | blog: pavlix
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
No to si úplně nemyslím, můžou tam být zkráceniny,
Jaké zkráceniny? Maskuje se v binární podobě a to je prostě jenom sekvence 128 bitů, nic víc, nic míň.
GentooFedoraSCRAM – Jsem open source vývojář, nikoli markeťák ⇒ názory zde uvedené jsou jen mé vlastní.
3.11.2015 08:10 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Manuálová stránka výslovně uvádí
For both functions, af specifies the address family for the conversion; the only supported value is AF_INET.

Ale jak už bylo řečeno, napsat si vlastní implementaci je triviální: odmaskujete příslušný počet nejnižších bitů, převedete na textovou reprezentaci pomocí inet_ntop a na konec přidáte lomítko a délku prefixu. Třeba takhle:

const char *inet6_net_ntop(const struct in6_addr* addr, unsigned bits,
                           char* buff, unsigned len)
{
        struct in6_addr a6 = *addr;
        unsigned char* src = a6.s6_addr;
        const char* bp;
        char* p;
        unsigned i;

        if ((len < INET6_ADDRSTRLEN + 5) || (bits > 128))
                return NULL;

        for (i = (bits + 7) / 8; i < 16; i++)
                src[i] = 0;
        if (bits % 8)
                src[bits / 8] &= ~((1 << (8 - (bits % 8))) - 1);

        bp = inet_ntop(AF_INET6, src, buff, len - 4);
        if (!bp)
                return NULL;

        p = buff;
        while (*p)
                p++;
        *p++ = '/';
        snprintf(p, 4, "%u", bits);

        return buff;
}
3.11.2015 09:13 Radek Isa | skóre: 11
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Co takhle prevest masku i ipv6 na sitovou reprezentaci (v sitove reprezentaci nemuze byt ta ipv6 skracena) a pak to pomoci operace and vymaskovat a nasledne prevest na reprezentaci řetezcem.
3.11.2015 09:43 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Co takhle prevest masku i ipv6 na sitovou reprezentaci

Jak konkrétně se síťová reprezentace liší od toho, co je ve struct in6_addr?

3.11.2015 10:00 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Ale fuj...
--- addr.c.orig 2015-11-03 09:58:02.588426088 +0100
+++ addr.c      2015-11-03 09:57:35.660802261 +0100
@@ -11,13 +11,11 @@
        unsigned char* src = a6.s6_addr;
        const char* bp;
        char* p;
-       unsigned i;
 
        if ((len < INET6_ADDRSTRLEN + 5) || (bits > 128))
                return NULL;
 
-       for (i = (bits + 7) / 8; i < 16; i++)
-               src[i] = 0;
+       memset(src + (bits + 7) / 8, 0, 16 - (bits + 7) / 8);
        if (bits % 8)
                src[bits / 8] &= ~((1 << (8 - (bits % 8))) - 1);
 
10.11.2015 23:18 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Tak jsem to našel, použil jsem funkční verzi z Bind 9.5.0.dfsg.P2, kdyby to někdo hledal, v pozdějších verzích už není. Je to s copyrightem ISC, ale dá se použít. Tam je int_net_ntop i pro AF_INET6 i s ořezáním.
10.11.2015 23:44 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Že jsem tak zvědavý: co je nefunkčního na té, kterou jsem vám sem před týdnem napsal?
11.11.2015 18:28 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Neobsahuje zkrácení a nevynechává to zbytečné nuly, které tamjsou nepotřebné, asi nejsem tak dobrý programátor abych to dal dohromady a dodělal do toho. Jinak to fungovalo ok. Cíl byl také dostat z toho nejkratší string a to ta implementace z bindu splňuje.Díky za pomoc.
11.11.2015 18:30 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Zkusil jste to aspoň? Vypadá to že ne…
13.11.2015 10:03 foldy
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Ano zkusil, měl jsem za to, že to zkrácení má udělat : inet_ntop(AF_INET6, src, buff, len - 4); , ale nezkrátilo mi to.
13.11.2015 10:37 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C rozdělení ip rozsahu inet_net_ntop s AF_INET6
Pokud tvrdíte, že ta funkce vrací špatný výsledek, uveďte, prosím, konkrétní příklad, pro jakou adresu a jakou délku prefixu ten špatný výsledek dává.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.