Portál AbcLinuxu, 8. června 2025 19:06


Dotaz: zjisteni prefixu z masky subnetu

stativ avatar 10.12.2005 17:49 stativ | skóre: 54 | blog: SlaNé roury
zjisteni prefixu z masky subnetu
Přečteno: 452×
Odpovědět | Admin

Takze, potrebuji udelat bashovy skript, ktery mi nastavi sit. Vsechno je zatim bez problemu, akorat nevim jak udelat, aby si ze zadane masky subnetu vypocital delku prefixu. Takze v podstate potrebuji, aby skript zjistil, zda na pozici kazdeho oktetu je nenulove cislo a podle toho vypocital delku nutneho prefixu.

Jeden priklad pro ukazku, protoze nevim jestli jsem se vyjadril srozumitelne.
zadam masku napr. 255.255.255.0 coz znamena prefix 24 (3x8=24)
napadlo me aby se nastavil automaticky na 24, ale pak by se mohlo stat, ze to proste nebude fungovat (co kdyby nekdo zadal 255.255.255.255 ? Pak by delka nebyla dostacujici.)

Diky moc
BTW: s bashovymi skripty teprve zacinam, takze omluvte moji neschopnost to udelat sam :-)

Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.12.2005 18:37 #Tom
Rozbalit Rozbalit vše Re: zjisteni prefixu z masky subnetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě je třeba ošetřit případy jako 255.255.255.192 - tam přijde 26. Nejlepší by bylo to ani nepsat v bashi, jako spíš třeba v C.
Johny z Podoli avatar 10.12.2005 18:42 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: zjisteni prefixu z masky subnetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
co treba:

PREFIX=`ipcalc $IPADRESA/$MASKA| grep Netmask | awk '{ print $4 }'`
ps: nezkousel jsem, ale je sance ze to pujde...
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
Johny z Podoli avatar 10.12.2005 18:44 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: zjisteni prefixu z masky subnetu
tak to snad chodi... odzkouseno :)
karin:~# IPADRESA=192.168.200.100
karin:~# MASKA=255.255.255.224
karin:~# PREFIX=`ipcalc $IPADRESA/$MASKA| grep Netmask | awk '{ print $4 }'`
karin:~# echo $PREFIX
27
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
stativ avatar 11.12.2005 09:54 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: zjisteni prefixu z masky subnetu
Diky, diky, diky, kdybys byl zena tak bych te musel polibit :-)
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
12.12.2005 13:22 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: zjisteni prefixu z masky subnetu
Omlouvám se, že zasahuju off-topic příspěvkem do vyšeného vlákna, ale příkaz ipcalc existuje ve dvou "vyhotoveních". Jedním z nich je výmysl RedHatu, vyskytuje se na Fedoře (a Redhatu), přičemž je s tím druhým syntakticky nekompatibilní.

Na druhou stranu, má i své výhody, takže zjištění délky prefixu se obejde bez grepu a výsledek lze rovnou přiřadit do proměnné:
$ ipcalc -p 192.168.200.100 255.255.255.224
PREFIX=27
Takže program, který bude přenositelný alespoň mezi distribucemi, by se dal napsat třeba v Pythonu a výpočet délky prefixu by mohl vypadat třeba takto:
#!/usr/bin/env python
import socket, struct

mask = '255.255.255.224'
mask_n = struct.unpack('!L',socket.inet_aton(mask))[0]

b = 0
while b < 32:
  if 0xFFFFFFFF >> b << b == mask_n:
    break
  b += 1
b = 32 - b

if b:
  print 'Netmask is equivalent to %d non-zero bits. ' %b
else:
  print 'netmask could not be converted!'

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.