In questo esercizio scritto in C.
Ecco il testo dell’esercizio:
Esercizio sulle classi IP
Inserito un indirizzo IP controllare se valido, a quale classe IP appartiene e visualizzare anche la sua maschera di rete.
Ecco lo svolgimento dell’esercizio con l’uso anche di funzioni.
Il controllo della validità dell’indirizzo IP è fatto in fase di Input con un ciclo do … while che consente di ripetere l’inserimento ogni volta che è inserito un valore non valido.
Ecco il codice C dell’esercizio risolto:
#include <stdio.h>
#include <string.h>
int x[4];
int flag=0;
int controlla_ottetto(int x)
{ int esito=0;
if ((x<0) || (x>255))
esito=1;
return esito;
}
void classifica(int x)
{
if ((x>0) && (x<=127)){
printf("\n Indirizzo di classe A\n");
printf("\n Maschera di rete 255.0.0.0");}
if ((x>127) && (x<=191)){
printf("\n Indirizzo di classe B\n");
printf("\n Maschera di rete 255.255.0.0");}
if ((x>191) && (x<=223)){
printf("\n Indirizzo di classe C\n");
printf("\n Maschera di rete 255.255.255.0");}
if ((x>223) && (x<=239)){
printf("\n Indirizzo di classe D\n");
printf("\n Maschera di rete non definita tutti,");
printf(" i bit indicano host");}
if ((x>239) && (x<=255)){
printf("\n Indirizzo di classe E\n");
printf("\n Maschera di rete non definita tutti,");
printf(" i bit indicano host");}
}
int main(int argc, char *args[])
{
int k;
for (k=0;k<4;k++)
{
do{
printf("\n Inserisci %d° byte indirizzo ip\n",k+1);
scanf("%d",&x[k]);
flag=controlla_ottetto(x[k]);
if (flag==1){
printf("\n Byte errato\n");
printf("\n Reinserire ottetto\n");}}
while (flag==1);
}
classifica(x[0]);
printf("\n Arrivederci\n");
return 0;
}
Questo esercizio è articolato in due funzioni e un programma principale il “main”.
L’indirizzo IP è definito come array di interi di 4 elementi, il primo ottetto quello che determina la classe IP è posizionato nell’array nella posizione zero.
Le due funzioni di nome rispettivamente “controlla_ottetto” e “classifica” sono due funzioni con parametri.
La funzione “controlla_ottetto” riceve come parametro un numero intero che per essere un valore byte valido deve essere compreso, fra 0 e 255. La funzione ritorna al chiamante un valore “0” o “1” per indicare l’esito del controllo. Se esito vale zero, il controllo non è andato a buon fine e quindi vuol dire, nella sostanza, che l’ottetto inserito non è valido. Questa funzione attraverso un ciclo “for” è invocata quattro volte per controllare il corretto inserimento dell’indirizzo IP.
Solo dopo che i quattro ottetti sono stati inseriti correttamente allora, è possibile passare alla classificazione della classe IP e la stampa del risultato oltre che della maschera di rete “canonica”. La procedura “classifica” prevede come parametro intero che all’atto della chiamata, sarà sostituito dal primo ottetto IP. Questo perché è solo il primo a determinare la classe di indirizzamento. Nella procedura è eseguito il controllo e viene classificato l’indirizzo IP appartenente ad una classe e stampato, anche la relativa classe di indirizzamento.
Se sei interessato ad un ripasso sull’indirizzamento iP puoi vedere il seguente video.