Examen TP

Exercice 1

(1) le résultat peut être obtenu avec la commande host.

% host -l univ-tln.fr | grep 'has address' | wc -l
3627

On pouvait aussi utiliser la commande dig dig -t AXFR univ-tln.fr

(2)  Avec host

% host dpt-info.univ-tln.fr 10.1.65.1
Using domain server:
Name: 10.1.65.1
Address: 10.1.65.1#53
Aliases:

dpt-info.univ-tln.fr has address 10.1.73.17


Avec dig

% dig @10.1.65.1 dpt-info.univ-tln.fr
; <<>> DiG 9.2.1 <<>> dpt-info.univ-tln.fr @10.1.65.1
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49191
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;dpt-info.univ-tln.fr.          IN      A

;; ANSWER SECTION:
dpt-info.univ-tln.fr.   86400   IN      A       10.1.73.17
.
.
.


(3)  Avec host

% host 193.49.96.4 etud1.univ-tln.fr
Using domain server:
Name: etud1.univ-tln.fr
Address: 10.1.65.127#53
Aliases:

4.96.49.193.in-addr.arpa domain name pointer dpt-info.univ-tln.fr.

Avec dig

% dig @etud1.univ-tln.fr -x 193.49.96.4
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10163
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1

;; QUESTION SECTION:
;4.96.49.193.in-addr.arpa.      IN      PTR

;; ANSWER SECTION:
4.96.49.193.in-addr.arpa. 172800 IN     PTR     dpt-info.univ-tln.fr.
.
.
.


On déduit de ces deux réponses que 10.1.65.1 fait office de serveur DNS interne alors que etud1.univ-tln.fr est le DNS externe.

(4) Pour connaître quels sont les serveurs DNS de la zone univ-tln.fr pour l'extérieur il faut donc logiquement interroger le DNS externe

  Avec host

% host -t NS univ-tln.fr etud1.univ-tln.fr
Using domain server:
Name: etud1.univ-tln.fr
Address: 10.1.65.127#53
Aliases:

univ-tln.fr name server rhodes.univ-tln.fr.
univ-tln.fr name server dns.inria.fr.

Avec dig

% dig @etud1.univ-tln.fr univ-tln.fr -t NS

; <<>> DiG 9.2.1 <<>> @etud1.univ-tln.fr univ-tln.fr -t NS
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65461
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;univ-tln.fr.                   IN      NS

;; ANSWER SECTION:
univ-tln.fr.            172800  IN      NS      rhodes.univ-tln.fr.
univ-tln.fr.            172800  IN      NS      dns.inria.fr.
.
.
.


(5)

% ping www.google.fr

PING www.google.akadns.net (216.239.39.99) from 10.1.73.52 : 56(84) bytes of data.
64 bytes from 216.239.39.99: icmp_seq=1 ttl=235 time=97.8 ms
.
.
.
%
ping www.google.fr
PING www.google.akadns.net (216.239.39.147) from 10.1.73.52 : 56(84) bytes of data.
64 bytes from 216.239.39.147: icmp_seq=1 ttl=235 time=96.1 ms
.
.
.
% host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.google.akadns.net.
www.google.akadns.net has address 216.239.39.99
www.google.akadns.net has address 216.239.39.104
www.google.akadns.net has address 216.239.39.147

On constate que le ping ne part pas vers la même adresse IP. Ce qui est confirmé par la réponse du DNS qui montre que le nom www.google.fr correspond à plusieurs adresses IP. L'intérêt est de disposer pour un unique nom de plusieurs serveurs sucseptibles de répondre afin de répartir la charge des requêtes.

Exercice 2

Pour éviter les trames parasites, il fallait placer un filtre adéquat. Concernant le filtre qui sélectionne les paquets à l'entrée on pouvait préciser la chaîne
host adresse-ip_de_votre_machine, ce qui permet de ne voir que les trames émises et reçues par votre machine. Etant donné que chaque poste émet régulièrement des requêtes NFS et NIS vers le serveur sinfo1, on peut avec le filtre d'affichage éliminer les trames dont l'adresse source ou destination est 10.1.73.242: (ip.dst != 10.1.73.242) and (ip.src !=10.1.73.242). En exécutant le programme mystere.exe on obtient alors le résultat suivant: 



Le programme effectue une requête DNS afin de connaître l'adresse IP de la machine sis.univ-tln.fr. Il réalise ensuite une requête http vers cette dernière. Il interroge donc un serveur Web en exécution sur sis.univ-tln.fr. Il suffit de se placer sur la première requête TCP et d'utiliser l'option Follow TCP Stream pour obtenir le contenu de la session:

GET /mystere.txt HTTP/1.0
Host: sis.univ-tln.fr
Accept: text/html, text/plain, application/vnd.sun.xml.writer, application/vnd.sun.xml.writer.global, application/vnd.stardivision.writer, application/vnd.stardivision.writer-global, application/x-starwriter, application/vnd.sun.xml.writer.template
Accept: application/vnd.sun.xml.calc, application/vnd.stardivision.calc, application/x-starcalc, application/vnd.sun.xml.calc.template, application/vnd.sun.xml.impress, application/vnd.stardivision.impress, application/vnd.stardivision.impress-packed
Accept: application/x-starimpress, application/vnd.sun.xml.impress.template, application/vnd.sun.xml.draw, application/vnd.stardivision.draw, application/x-stardraw, application/vnd.sun.xml.draw.template, application/vnd.sun.xml.math
Accept: application/vnd.stardivision.math, application/x-starmath, application/x-java-jnlp-file, audio/mod, image/*, video/mpeg, video/*, application/pgp, application/pdf, application/postscript, message/partial, message/external-body, x-be2
Accept: application/andrew-inset, text/richtext, text/enriched, x-sun-attachment, audio-file, postscript-file, default, mail-file, sun-deskset-message, application/x-metamail-patch, application/msword, text/sgml, */*;q=0.01
Accept-Language: en
User-Agent: Lynx/2.8.5dev.7 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6b

HTTP/1.1 200 OK
Date: Thu, 15 Apr 2004 07:36:38 GMT
Server: Apache/1.3.29 (Debian GNU/Linux) PHP/4.2.3 mod_ssl/2.8.15 OpenSSL/0.9.7c mod_perl/1.28 mod_jk/1.1.0 DAV/1.0.3
Last-Modified: Wed, 14 Apr 2004 12:56:46 GMT
ETag: "16da0-57-407d350e"
Accept-Ranges: bytes
Content-Length: 87
Connection: close
Content-Type: text/plain; charset=iso-8859-1

Bravo, allez voir http://sis.univ-tln.fr/fini.txt
l'adresse IP de sis est 10.2.177.108


Le système distant s'exécute donc sous la version Debian de GNU/Linux et le serveur Web est Apache version 1.3.29. On peut utiliser le programme telnet pour se connecter à l'adresse indiquée (en italique ce que vous devez taper pour obtenir des infos une fois connecté) :


% telnet sis.univ-tln.fr 80
Trying 10.2.177.108...
Connected to sis.univ-tln.fr.
Escape character is '^]'.
GET /fini.txt
Vous pouvez passer a l'exercice suivant
Connection closed by foreign host.



Exercice 3

(1) il s'agit du port 143.
(2) en italique ce que vous devez taper pour obtenir des infos une fois connecté au serveur IMAP. L'exemple donne le message reçu par le premier groupe:

% telnet etud.univ-tln.fr 143
Trying 10.1.65.112...
Connected to etud.
Escape character is '^]'.
* OK etud.univ-tln.fr Cyrus IMAP4 v1.6.22 server ready
a001 login votre_login votre_mot_de_passe
a001 OK User logged in
a002 select inbox
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen $MDNSent NonJunk Junk $Forwarded)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $MDNSent NonJunk Junk $Forwarded \*)]
* 212 EXISTS
* 0 RECENT
* OK [UNSEEN 72]
* OK [UIDVALIDITY 970815669]
* OK [UIDNEXT 1638]
a002 OK [READ-WRITE] Completed
a003 search FROM veron
* SEARCH 1 2 3 4 56 204
a003 OK Completed
a004 FETCH 204 BODY[TEXT]
a004 FETCH 204 (FLAGS BODY[TEXT])
* 103 FETCH (FLAGS (\Recent \Seen) BODY[TEXT] {1709}
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enig5B2AF2A0B826AB4A4D235510
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
  <title></title>
</head>
<body text="#000000" bgcolor="#ffffff">
Essai de message 13h00<br>
<pre cols="72" class="moz-signature">--
&lt;B&gt;"Ceux qui ne savent rien en savent tout autant que ceux
qui n'en savent pas plus qu'eux"&lt;/B&gt; (Pierre Dac).
                      ,,,
                     (o o)
*----------------oOO--(_)--OOo-----------------*
 _______
|   |   | Universite de Toulon et du Var
| G | R | Groupe de Recherche en Informatique
|___|___| et Math&eacute;matiques
|   |   | B.P. 20132, 83957 LA GARDE CEDEX
| I | M | TEL: 04.94.14.24.03 FAX: 04.94.14.26.33
|___|___| E-MAIL: <a class="moz-txt-link-abbreviated" href="mailto:veron@univ-tln.fr">veron@univ-tln.fr</a>
          URL: <a class="moz-txt-link-freetext" href="http://veron.univ-tln.fr/">http://veron.univ-tln.fr/</a>
Key Fingerprint:
83C1 B5D7 44BD E9F2 5ABC  1E84 0D7C 4773 D9BA 4551
*----------------(__)------(__)----------------*
</pre>
</body>
</html>

--------------enig5B2AF2A0B826AB4A4D235510
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFAfRxvDXxHc9m6RVERAh+VAJ4j5I4j6UV+9HYt5GgVeaamD/YYXACeKAa7
CuAkvdyNSsvRYW1wPKvm2GM=
=aQhK
-----END PGP SIGNATURE-----

--------------enig5B2AF2A0B826AB4A4D235510--

)
a004 OK Completed
a005 logout
* BYE LOGOUT received
a005 OK Completed
Connection closed by foreign host.




Exercice 4:

(1)+(2) il suffisait de reprendre l'exercice 4 du TP1 (dont la correction a été envoyé la semaine dernière http://veron.univ-tln.fr/ENSEIGNEMENT/M6/TP1/test.c) et de légèrement le modifier pour qu'il parcourt les ports de 1 à 1024 afin de trouver quels ports sont en écoute sur la machine sinfo1.On pouvait aussi utiliser l'outil nmap mais il semblerait que ce jour là quelqu'un avait enlevé les droits d'exécution sur ce programme ....

% ./test sinfo1
IP de la machine : 10.1.73.242
Le port 13 est ouvert
Le port 22 est ouvert
Le port 37 est ouvert
Le port 80 est ouvert
Le port 111 est ouvert
Le port 443 est ouvert
Le port 752 est ouvert
Le port 760 est ouvert
Le port 773 est ouvert
Le port 935 est ouvert

Pourquoi ne pas essayer une connexion sur le premier port disponible puisque l'énoncé stipule qu'il suffit d'initier une connexion pour obtenir la date courante :

% telnet sinfo1 13
Trying 10.1.73.242...
Connected to sinfo1.
Escape character is '^]'.
15 APR 2004 10:09:03 CEST
Connection closed by foreign host.

(3) La RFC 868 stipule que le serveur time est en écoute sur le port 37, qu'il renvoie un entier de 32 bits représentant le nombre de secondes écoulées depuis le 1er Janvier 1900 minuit et qu'il coupe ensuite la connexion.

Extraits de la RFC:

The Time service sends back to the originating source the time in seconds since midnight on January first 1900.

When the connection  is established, the server returns a 32-bit time value and closes the  connection.

La RFC nous indique aussi le nombre de secondes écoulées depuis le 1er Janvier 1970 minuit, ce qui va être très utile pour la suite :

For example:

   the time  2,208,988,800 corresponds to 00:00  1 Jan 1970 GMT,

Il s'agit donc de développer un programme C qui se contente d'initier une connexion sur le port 37 de sinfo1 et de récupérer un entier, c'est à dire 4 octets. Puisque l'on récupère une quantitié codée sur plus d'un octet il ne faudra pas oublier d'utiliser la fonction ntohl afin d'obtenir les octets dans l'ordre correct. Une consultation du manuel de time (man 2 time) nous mentionne l'existence de la fonction ctime . Cette fonction renvoie sous forme lisible une date représentée par un entier correspondant au nombre  de  secondes  écoulées  depuis  le  1er Janvier 1970 minuit. En retranchant le nombre de secondes écoulées depuis le 1er Janvier 1970 minuit à l'entier renvoyé par le serveur time et en passant ce résultat à la fonction ctime, on obtient le résultat voulu.

Source de time.c (constitué à 95% du source du programme client calculette disponible sur http://veron.univ-tln.fr/ENSEIGNEMENT/M6)


% ./time sinfo1 37
Thu Apr 15 10:12:41 2004


(4) On pouvait là aussi s'inspirer fortement du programme serveur calculette pour la partie communication.

Source de my_time_server.c