The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

[Cisco] Как правильно вычислять wildcard bits в Access list (cisco netmask access)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: cisco, netmask, access,  (найти похожие документы)
_ RU.CISCO (2:5077/15.22) ___________________________________________ RU.CISCO _ From : Anatoly A. Orehovsky 2:5020/400 05 Sep 99 07:22:42 Subj : [Cisco] Как правильно вычислять wildcard bits в Access list ________________________________________________________________________________ From: tolik@mpeks.tomsk.su (Anatoly A. Orehovsky) Anatoly A. Orehovsky (tolik@mpeks.tomsk.su) wrote: : Hу, это - конечно. Однако, в свете наличия программки, велика ли разница : в три строчки ? При том, что оптимизация проводится вручную, а с переделкой : программки возиться лень ? Hе мудрствуя лукаво, слегка поправил программку. Таперича сия программка может: mk_nets [-fhlw] first_ip last_ip ... first_ip, last_ip соответственно, превый и последний адреса диапазона, для которого строятся сетки -w выдает сетки в формате wildmat, иначе - netmask -h для netmask 255.255.255.255 при -w выдает "host addr", без -w - просто addr без netmask -f выравнивает первый адрес на границу ближайшей сетки -l выравнивает последний адрес на границу ближайшей сетки В общем, смотрите сами. mk_nets.c: #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PROGNAME "mk_nets" char wflag, hflag, fflag, lflag; typedef union { unsigned long inet; unsigned char dec[4]; } ipaddr; void usage() { fprintf(stderr, "usage: %s [-fhlw] first_ip last_ip ...\n", PROGNAME); exit(-1); } void mk_nets (unsigned long f, unsigned long l) { unsigned long mask; mask = 0xffffffffL; while(((f & mask) != (l & mask)) && (fflag ? 1 : (f & (mask << 1)) == f) && (lflag ? 1 : (f | ~(mask << 1)) <= l)) mask <<= 1; { ipaddr pa, pm; pa.inet = htonl(f & mask); pm.inet = wflag ? htonl(~mask) : htonl(mask); if (hflag && (mask == 0xffffffffL)) printf("%s%d.%d.%d.%d\n", wflag ? "host " : "", pa.dec[0], pa.dec[1], pa.dec[2], pa.dec[3]); else printf("%d.%d.%d.%d%c%d.%d.%d.%d\n", pa.dec[0], pa.dec[1], pa.dec[2], pa.dec[3], wflag ? ' ' : ':', pm.dec[0], pm.dec[1], pm.dec[2], pm.dec[3]); } if ((f & mask) != (l & mask)) mk_nets((f | ~mask) + 1, l); } int main(int argc, char **argv) { unsigned long faddr, laddr; register char ch; extern int optind; while ((ch = getopt(argc, argv, "fhlw")) != EOF) { switch (ch) { case 'w' : wflag = 1; break; case 'h' : hflag = 1; break; case 'f' : fflag = 1; break; case 'l' : lflag = 1; break; case '?' : default : usage(); } } argc -= optind; argv += optind; if (!argc || (argc % 2)) usage(); while (argc) { faddr = ntohl(inet_addr(*argv)); laddr = ntohl(inet_addr(*(argv + 1))); if (faddr == INADDR_NONE || laddr == INADDR_NONE || faddr > laddr) { fprintf(stderr, "invalid parameters\n"); exit(1); } mk_nets(faddr, laddr); argc -= 2; argv += 2; } exit(0); } -- Anatoly A. Orehovsky. AO9-RIPE. AAO1-RIPN http://www.tekmetrics.com/transcript.shtml?pid=6064 --- ifmail v.2.14dev3 * Origin: CISA Ltd. InterNetNews site (2:5020/400)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>



Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor