# -*- coding: cp1253 -*- import sys #Συνάρτηση για μετατροπή του δεκαδικού d σε δυαδικό (με μορφή string) #ο οποίος θα έχει τουλάχιστον n bits def dekadikoSeDyadiko(d, n): s = '' while d/2>0: if d%2==1: s='1'+s else: s='0'+s d=d/2 if d==1: s='1'+s else: s='0'+s #Αν δεν έχει το μήκος που θέλω πρόσθεσε μηδενικά μπροστά while len(s)arithmos: arithmos=arithmos*2 ar_bits=ar_bits+1 return ar_bits #Διάβασε τη Δ/νση Δικτύου print 'Δώσε Δ.Δ. δηλαδή 4 δεκαδικούς' dd1=input('Δώσε 1ο δεκαδικό: ') dd2=input('Δώσε 2ο δεκαδικό: ') dd3=input('Δώσε 3ο δεκαδικό: ') dd4=input('Δώσε 4ο δεκαδικό: ') #Έλεγξε ότι η Δ/νση Δικτύου είναι έγκυρη if dd1<0 or dd1>223 or dd2<0 or dd2>255 or dd3<0 or dd3>255 or dd4<0 or dd4>252: print 'Λάθος Δ.Δ. !' sys.exit() #Διάβασε τη Μάσκα (0 για υπολογισμό από κλάσεις) print 'Δώσε Μάσκα σε μορφή CIDR (μόνο τον αριθμό).' print 'Δώσε 0 για υπολογισμό από κλάσεις' maska=input() while maska<0 or maska>30: print 'Μη αποδεκτή μάσκα, ξαναδώσε' maska=input() #Αν δόθηκε μάσκα 0 πρέπει να την υπολογίσω από τις κλάσεις if maska==0: if dd1<128: maska=8 elif dd1<192: maska=16 else: maska=24 #Υπολογισμός bits Net Id και Host Id bitsNetId = maska bitsHostId = 32-maska #Επιλογή είδους ζητουμένου print 'Επέλεξε τι θέλεις δίνοντας:' print '1 για επιθυμητό αριθμό υποδικτύων' print '2 για επιθυμητό αριθμό Η/Υ σε κάθε υποδίκτυο' epil=input() while epil!=1 and epil!=2: print 'Δώσε 1 ή 2: ' epil=input() if epil==1: print 'Δώσε αριθμό υποδικτύων' ar_ypod=input() bits_ypod = arithmosBitsGiaKodikopoihsh(ar_ypod) bits_hy = bitsHostId - bits_ypod else: print 'Δώσε αριθμό Η/Υ σε κάθε υποδίκτυο' ar_hy=input() bits_hy = arithmosBitsGiaKodikopoihsh(ar_hy) bits_ypod = bitsHostId - bits_hy #Έλεγξε αν μπορεί να γίνει η υποδικτύωση που ζητάει if bits_ypod<=0 or bits_hy<=1: print 'Δεν μπορεί να γίνει η υποδικτύωση που ζητείται !' sys.exit() #Βρες τελικό αριθμό υποδικτύων και νέα μάσκα καιαριθμό Η/Υ για κάθε υποδίκτυο tel_ar_ypod = 2 ** bits_ypod tel_maska = maska + bits_ypod tel_ar_hy = (2 ** bits_hy) - 2 #Βρες την αρχική ΔΔ στο δυαδικό dd_dyadiko = dekadikoSeDyadiko(dd1, 8)+dekadikoSeDyadiko(dd2, 8)+dekadikoSeDyadiko(dd3, 8)+dekadikoSeDyadiko(dd4, 8) #Τύπωσέ τα print 'Τελικός Αριθμός Υποδικτύων ', tel_ar_ypod print 'Νέα μάσκα /', tel_maska print 'Τελικός Αριθμός Η/Υ σε κάθε υποδίκτυο ', tel_ar_hy for i in range(1, tel_ar_ypod+1): print 'Υποδίκτυο ', i print ' Διεύθυνση Δικτύου ' print ' Δυαδικό: ', dd_dyadiko[0:maska], dekadikoSeDyadiko(i-1,bits_ypod), '00000000000000000000000000000000'[0:bits_hy] tmp = dd_dyadiko[0:maska]+dekadikoSeDyadiko(i-1,bits_ypod)+'00000000000000000000000000000000'[0:bits_hy] print ' Δεκαδικό: ', dyadikoSeDekadiko(tmp[0:8]), '.', dyadikoSeDekadiko(tmp[8:16]), '.', dyadikoSeDekadiko(tmp[16:24]), '.', dyadikoSeDekadiko(tmp[24:32]) print ' Διεύθυνση Εκπομπής ' print ' Δυαδικό: ',dd_dyadiko[0:maska], dekadikoSeDyadiko(i-1,bits_ypod), '11111111111111111111111111111111'[0:bits_hy] tmp = dd_dyadiko[0:maska]+dekadikoSeDyadiko(i-1,bits_ypod)+'11111111111111111111111111111111'[0:bits_hy] print ' Δεκαδικό: ',dyadikoSeDekadiko(tmp[0:8]), '.', dyadikoSeDekadiko(tmp[8:16]), '.', dyadikoSeDekadiko(tmp[16:24]), '.', dyadikoSeDekadiko(tmp[24:32]) print ' Διεύθυνση πρώτου Η/Υ ' print ' Δυαδικό: ',dd_dyadiko[0:maska], dekadikoSeDyadiko(i-1,bits_ypod), '00000000000000000000000000000000'[0:bits_hy-1]+'1' tmp = dd_dyadiko[0:maska]+dekadikoSeDyadiko(i-1,bits_ypod)+'00000000000000000000000000000000'[0:bits_hy-1]+'1' print ' Δεκαδικό: ',dyadikoSeDekadiko(tmp[0:8]), '.', dyadikoSeDekadiko(tmp[8:16]), '.', dyadikoSeDekadiko(tmp[16:24]), '.', dyadikoSeDekadiko(tmp[24:32]) print ' Διεύθυνση τελευταίου Η/Υ ' print ' Δυαδικό: ',dd_dyadiko[0:maska], dekadikoSeDyadiko(i-1,bits_ypod), '11111111111111111111111111111111'[0:bits_hy-1]+'0' tmp = dd_dyadiko[0:maska]+dekadikoSeDyadiko(i-1,bits_ypod)+'11111111111111111111111111111111'[0:bits_hy-1]+'0' print ' Δεκαδικό: ',dyadikoSeDekadiko(tmp[0:8]), '.', dyadikoSeDekadiko(tmp[8:16]), '.', dyadikoSeDekadiko(tmp[16:24]), '.', dyadikoSeDekadiko(tmp[24:32])