====== Soluzioni tema d'esame del preappello ======
**Esercizio 1a**: provate il codice fornito nel testo.
**Esercizio 1b**: questa e' la definizione richiesta per la parte principale dell'esercizio.
struct input_data {
string filename<256>;
int max;
double value;
};
typedef struct input_data input_data;
program LOOKUPPROG {
version LOOKUPVERS {
string LOOKUP(input_data) = 1;
} = 1;
} = 22854;
**Esercizio 2**: la creazione del server e la connessione non sono diversi dal normale (server inet). Riporto uno schema di soluzione (non robusto, ma accettabile) per la gestione della singola connessione, usando il metodo post.
int server (int client_socket) {
int max;
double value;
char *filename=malloc(sizeof(char)*256);
char *res;
char *text=malloc(sizeof(char)*1024);
read (client_socket, text, 1024);
sscanf(text,"GET /lookup.cgi?filename=%s&max=%d&value=%lf HTTP1.1", filename, &max, &value);
res = lookup(filename, max, value);
write (client_socket, res, strlen(res)+1);
}
**Esercizio 3**:
Ruleset originale :
Riordinando il ruleset,tenendo conto dei -I INPUT 2 otteniamo :
iptables -A INPUT -s 10.0.0.3 -j LOG
iptables -A INPUT -s 10.0.0.3 -j QUEUE
iptables -A INPUT -s 10.0.0.3 -j DROP -- inutile, il queue li ruba prima
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.0.0.4/24 -j RATEEST
iptables -A INPUT -d 10.0.0.42 -j ACCEPT --- inutile, in quanto identica
a "iptables -A INPUT -i lo -j ACCEPT"
iptables -A INPUT -s 10.0.0.7 -j DROP
iptables -A INPUT -s !10.0.0.3 -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT -- inutile: da quando i pacchetti del lo arrivano in FORWARD :P
iptables -A FORWARD -d 46.59.1.2 -j ACCEPT
iptables -A FORWARD -s 10.0.0.4 -j RATEEST
iptables -A FORWARD -s 10.0.0.4 -j ACCEPT -- policy in accept comunque
iptables -A FORWARD -p tcp --dport 40:100 -j LOG
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT