Δημοσιεύτηκε: 01 Ιουν 2014, 15:10
από chris m
Σε κάθε σύστημα Unix υπάρχει ένα αρχείο με πληροφορίες σχετικά με τα
διαθέσιμα internet πρωτόκολλα. Συνήθως, το αρχείο αυτό είναι το
/etc/protocols. Με την εντολή “man protocols” μπορείτε να ενημερωθείτε
σχετικά με τη δομή του αρχείου αυτού (για την ευκολία σας δείτε το
protocols.pdf). Να γράψετε ένα πρόγραμμα για το κέλυφος (έστω ότι
ονομάζεται “protinfo”) το οποίο, χρησιμοποιώντας το πρόγραμμα AWK, να
εξάγει από το αρχείο πρωτοκόλλων και να παρουσιάζει τις διαθέσιμες
πληροφορίες για τα πρωτόκολλα που πληρούν τα κριτήρια επιλογής που
δίνονται στη γραμμή εντολής που καλείται το “protinfo”, σαν “-protocol
<substr>” και “-number <range>, <range>, …” όπου τα διάφορα <range>
μπορεί να είναι της μορφής <k> ή <k>:<m>. Πιο συγκεκριμένα, με το
κριτήριο “-protocol <substr>” επιλέγονται τα πρωτόκολλα που το όνομά τους
περιέχει τη συμβολοσειρά <substr>, ενώ με το το κριτήριο “-number
<range>, <range>,…” επιλέγονται τα πρωτόκολλα που ο αριθμός τους <n>
είτε είναι κάποιο από τα <range> (της μορφής <k>) που δόθηκαν, δηλαδή
n=k, είτε περιέχεται μέσα σε κάποιο <range> (της μορφής <k>:<m>), δηλαδή
k<=n<=m. Μπορούν να δοθούν στο “protinfo” οσαδήποτε από τα κριτήρια
επιλογής, ακόμα και κανένα, ακόμα και περισσότερα από ένα του ίδιου τύπου
(“-protocol” ή “-number”). Το πνεύμα είναι ότι τελικά πρέπει να επιλεγούν
εκείνα τα πρωτόκολλα που πληρούν όλα τα κριτήρια (προφανώς επιλέγονται
όλα τα διαθέσιμα πρωτόκολλα αν δεν δοθεί κανένα κριτήριο). Για τα
επιλεγμένα πρωτόκολλα, το “protinfo” να παρουσιάζει όλες τις διαθέσιμες
πληροφορίες, δηλαδή όνομα, αριθμό και συνώνυμα (aliases).
Το πρόγραμμά σας να μην θεωρεί δεδομένο το πλήρες όνομα-μονοπάτι του
αρχείου πρωτοκόλλων, αλλά να συμβουλεύεται τη μεταβλητή περιβάλλοντος
PROTOCOLSFILE, στην οποία πρέπει να δίνεται κατάλληλη τιμή πριν την
εκτέλεση του προγράμματός σας από τον χρήστη του και όχι μέσα στο
πρόγραμμα από εσάς. Μία ενδεικτική εκτέλεση του “protinfo” ακολουθεί:
$ PROTOCOLSFILE=/etc/protocols
$ export PROTOCOLSFILE
$ ./protinfo -number 50:58,8,42:45,60 -protocol ip -number 57:60,44

Protocol: ipv6-frag
Number: 44
Aliases: IPv6-Frag

Protocol: skip
Number: 57
Aliases: SKIP