Mise en place d`un service de téléphonie dans un réseau

Transcription

Mise en place d`un service de téléphonie dans un réseau
Athlone Institute of Technology
Dublin Road Co Westmeath
Ireland
IUT A de Lille I Boulevard Paul Langevin
59650 Villeneuve d'Ascq
Mise en place d'un service de téléphonie dans un réseau local personnalisé
Quentin Bezsilko
Tuteur dans l'entreprise : Monsieur Anthony Cunningham
Tuteur de stage : Monsieur Max Chlebowski
15 Juin 2009
Quentin Bezsilko 2 16/06/09
REMERCIEMENTS
Je tenais à remercier tout particulièrement Monsieur Max Chlebowski pour nous avoir suivi tout au long de ce stage. Je remercie également Monsieur Patrick Lebègue pour avoir porté attention aux divers problèmes que j'ai rencontrés. Je remercie Monsieur Sylvestre Vanuxem pour ses précieux conseils concernant la réalisation de ce stage, ainsi que l'ensemble des enseignants du département informatique de l'IUT de Lille 1 pour la confiance qu'ils m'ont témoignée et pour avoir rendu ce stage possible. Je voulais également remercier Monsieur Anthony Cunningham pour nous avoir suivi avec attention toute la durée du stage et pour son accueil chaleureux dans le centre de recherche de l'AIT, ainsi que Monsieur Cormac Mullally, membre de l'équipe de recherche vers qui nous nous sommes tournés quand nous avions des difficultés techniques en informatique et en communication. Quentin Bezsilko 3 16/06/09
RÉSUMÉ EN FRANÇAIS
Mon stage de fin de formation en DUT informatique s'est déroulé en Irlande dans la ville d'Athlone, au centre de recherche de l'Athlone Institute of Technology, célèbre pour avoir mené le projet SUNAT. Après avoir compris en quoi consistait la mission du centre, nous avons pu commencer notre projet tout en sachant qu'il allait être orienté vers le réseau. De notre point de vue, celui­ci consistait en la mise en place d'une solution VoIP dans un réseau local personnalisé. Nous avons pu, au cours de ce projet mené en binôme, découvrir quels étaient les protocoles impliqués dans le fonctionnement de la téléphonie par Internet. Nous avons pu également comprendre en quoi consistait le travail de recherche ainsi qu'avoir une idée plus précise de ce qu'est le monde de l'Open Source. Par ailleurs, les liens que nous avons pu faire avec notre formation sont assez nombreux. De plus, les progrès que nous avons faits en Anglais sont considérables. Ainsi, le bilan humain montre à quel point le stage aura été une expérience enrichissante. Il s'inscrit dans la continuité de la formation que nous avons pu suivre à l'IUT.
Quentin Bezsilko 4 16/06/09
ENGLISH SUMMARY
Our placement which puts an end to our studies at the IUT Informatique of Lille took place in Ireland in Athlone town, at the research centre of the Athlone Institute of Technology, famous for having developed the SUNAT project. After having understood what their work consisted of, we were able to begin our task, knowing it would be network orientated. We had to install a VoIP solution on both a local area network and a simulated Internet. We had the opportunity during this binomial project to find out which protocols were involved in the voice over the Internet protocol. We also had the opportunity to understand more about the work that a computer science researcher does and also had a better understanding about the world of Open Source software. What's more, we were able to create links between the notions we learnt during our studies and the work we did during the placement, and the improvement we made in english was really important too. Therefore the human appraisal shows this placement has been a very enriching experience as far as we are concerned. It is the logical continuity to the studies we were taught at the IUT Informatique of Lille.
Quentin Bezsilko 5 16/06/09
SOMMAIRE
REMERCIEMENTS...................................................................................................................................page 3
RÉSUMÉ FRANÇAIS...............................................................................................................................page 4
ENGLISH SUMMARY...............................................................................................................................page5 SOMMAIRE...............................................................................................................................................page 6
INTRODUCTION......................................................................................................................................page 7
DÉVELOPPEMENT
1.CHOIX DU STAGE ET PRÉSENTATION DU CENTRE DE RECHERCHE D'ATHLONE
a)le choix du stage à l'étranger....................................................................................................................page 8
b)Description des composantes du centre de recherche.............................................................................page 8
c)Le projet SUNAT et les relations du centre de recherche avec les entreprises........................................page 9
2.LES PROJETS RÉALISÉS EN STAGE
a)premier projet : mise en place d'un service de téléphonie par Internet..................................................page 11
b)deuxième projet : mise en place d'un réseau personnalisé sur Internet.................................................page 16
c)Installer un réseau virtuel avec port mirroing en utilisant un switch.....................................................page 19
3.LES APPORTS DU STAGE
a)la méthodologie.....................................................................................................................................page 21
b)les apports techniques............................................................................................................................page 21
c)les apports humains...............................................................................................................................page 22
CONCLUSION........................................................................................................................................page 24
ANNEXES...............................................................................................................................................page 25
GLOSSAIRE............................................................................................................................................page 42
BIBLIOGRAPHIE....................................................................................................................................page 46
Quentin Bezsilko 6 16/06/09
INTRODUCTION
De nos jours, l'une des priorités dans le monde de l'informatique consiste en l'amélioration des moyens de communication. En effet, les entreprises les plus réactives sur le marché étant celles qui gagnent les parts disponibles, celles­ci éprouvent de plus en plus le besoin de communiquer dans le monde entier en temps réel avec leurs associés, clients et fournisseurs.
C'est pourquoi le centre de recherche d'Athlone basé sur le campus de l'AIT ( acronyme utilisé pour Athlone Institute of Technology ) oriente ses recherches sur la communication dans le but de l'améliorer ( réduction des coûts des communications et des temps d'attente des utilisateurs ) . Fondée en 2003, son prochain projet est de développer un logiciel leur permettant de faciliter leur travail de recherche. Ses résultats permettent également le maintien de la réputation de l'AIT comme un centre d'excellence dans le domaine de l'ingénierie informatique. Dans le cadre de notre stage qui conclut notre formation en DUT informatique, il nous a été demandé ­ avec mon binôme ­ de mettre en place un service de téléphonie passant par le protocole* Internet à travers un réseau personnalisé. Nous nous attendions à mener un projet en corrélation avec ce que fait le centre de recherche d'Athlone et ce bien qu'il s'agissait pour nous d'une nouvelle expérience.
Il nous fallait donc réfléchir pour savoir comment procéder dans la résolution du problème. Étant donné que les projets de l'AIT sont dits Open Source*, nous avons mené notre travail sur un système d'exploitation lui aussi Open Source : Linux*. Son utilisation ne nous a pas posé de problème particulier parce que nous avions appris à l'utiliser lors de notre formation. Nous avons également mené un travail de recherche assez conséquent pour comprendre les notions que nous avons manipulées.
Tout d'abord, les informations que nous avons pu recenser lors de nos diverses lectures nous ont été très utiles pour comprendre le problème qui nous a été posé. Ensuite, une fois le problème bien compris et analysé, nous avons pu ensuite commencer sa résolution. Enfin, le bilan de ce stage montre que cette expérience a été très enrichissante en particulier sur le plan humain mais aussi sur les plans méthodologique et technique.
Quentin Bezsilko 7 16/06/09
I.CHOIX DU STAGE ET PRÉSENTATION DU CENTRE DE RECHERCHE A)Le choix du stage à l'étranger
La première question que le lecteur peut se poser est de savoir pourquoi j'ai choisi de faire un stage à l'étranger. En réalité, il s'agissait pour moi d'un projet auquel j'avais réfléchi depuis de longues années. Je voulais avoir l'opportunité de découvrir un pays anglophone et ainsi pratiquer une langue que j'étudie depuis un peu plus d'une dizaine d'années. De plus, c'est une culture que j'apprécie tout particulièrement. Cela m'aurait également permis d'élargir mon esprit critique, de mieux comprendre ce qui se passe autour de moi et de découvrir de nouvelles méthodes de travail. C'est pourquoi j'ai saisi cette opportunité quand elle s'est présentée à moi. De plus, mon professeur d'Anglais m'avait conseillé de faire un stage à l'étranger, car j'avais selon lui un bon potentiel et ceci ne pouvait être que positif pour la suite de mes études dans l'informatique. C'est pourquoi j'ai choisi de faire mon stage en Irlande dans la ville d'Athlone.
Ainsi, nous avons été reçus par Monsieur Anthony Cunningham qui était notre tuteur au cours de notre stage. Il nous a présenté le centre de recherche ­ dans lequel il travaille ­ et nous a permis de mieux comprendre dans quel domaine se situait leur recherche. Il est aujourd'hui chef de projet au sein du centre de recherche mais également responsable du développement de logiciels pour Midlands Innovation*. La lecture des documents ­ en particulier le cahier des charges* du projet SUNAT* ­ qui ont été mis à notre disposition nous ont apporté des informations complémentaires sur l'histoire du centre de recherche de l'AIT.
B) Description des composantes du centre de recherche Le centre de recherche a été crée en 2003. Il représente aujourd'hui une première équipe constituée de vingt­deux contrats à plein temps, deux doctorants et une équipe de recherche composée de trois étudiants qui préparent un Ph D (en Irlande, ce diplôme est équivalent au doctorat), quatre enseignants­chercheurs à temps plein et treize chercheurs ayant un contrat à durée déterminée. Actuellement, l'équipe de recherche a pour objectif de développer un logiciel ( plus précisément un Middleware* ) capable de distribuer des données hétérogènes dans la nouvelle génération de réseaux et ainsi s'adapter au contexte actuel. L'équipe qui travaille sur ce projet est composée de sept membres et un chef de projet. La majorité d'entre eux sont Irlandais mais ils ont préféré faire appel à deux développeurs venus de Chine parce que ce pays réalise beaucoup de travail de recherche sur les réseaux. C'est une main d'oeuvre qualifiée qui a ainsi apporté toute son expérience en démontrant comment les pays asiatiques basaient leur réflexion pour la construction de leurs propres réseaux.
Nous avons également pris connaissance des rapports de projets qui ont été publiés. On y retrouve Quentin Bezsilko 8 16/06/09
quelques notions clés comme le cahier des charges, explicitant la nature exacte du travail, la justification des coûts de chaque projet ainsi que quelques notions de statistiques qui vont leur permettre de gagner du temps et d'acquérir un effet d'expérience* pour les projets à venir. C'est­à­dire que le centre de recherche va profiter de ses récents projets pour en démarrer un nouveau sur de solides bases et ainsi gagner du temps.
Cette présentation fût très bénéfique pour nous. Certes, le temps utilisé pour prendre connaissance des activités peut paraître un peu trop long ( deux semaines ), mais nous savions ensuite quels outils nous allions utiliser et quelle voie nous devions suivre pour mener à bien notre projet. Nous avons pu prendre conscience de l'enjeu financier que représentait les projets menés par le centre de recherche ainsi que leur collaboration avec les entreprises. Ce modèle nous a semblé bien différent de celui que nous pouvons trouver en France.
Notre adaptation au centre de recherche fût grandement facilitée par les connaissances techniques que nous avons pu acquérir lors de notre formation. En effet, nous avons eu à notre disposition des sources de divers projets menés par le centre de recherche, en particulier celui nommé SUNAT. Ils ont choisi d'implémenter leurs programmes en langage C parce que ce langage est celui avec lequel Linux a été implémenté mais aussi parce que ce projet est Open Source, ce qui ne nous a pas posé de problème particulier pour comprendre de quoi il en retournait.
C) Le projet SUNAT et les relations entretenues avec les entreprises
Le principal projet mené par le centre de recherche est très certainement le projet SUNAT ( Seamless Use through Network Abstraction Technologies ). C'est ce projet qui a apporté toute la notoriété du centre de recherche. Il aura pour objectif de faciliter le développement de logiciels dans un environnement de convergence fixe­mobile. Par exemple, si un utilisateur entre dans un environnement, avec un accès Internet sans fil, le téléphone peut se muer en un «no Cost Voice», équivalent à une communication téléphonique par Internet. Ceci permet de réduire de manière considérable les coûts parce que son prix revient à celui d'une connexion à Internet. Ce projet devrait être terminé pour le début de l'année 2011.
L'équipe qui a réalisée ce projet était constituée de sept membres. La plupart d'entre eux avaient acquis une bonne expérience et étaient employés dans l'entreprise Ericsson, l'une des plus importantes en Irlande. Voici une courte présentation de ses membres :
­Austin Hanley est à la tête de la section ingénierie à l'AIT et professeur de Maths. Il a rejoint Ericsson en 1980.
­Enda Fallon a travaillé pour Ericsson jusqu'en 2001. C'est elle qui a récolté une grande partie des fonds (deux millions d'euros) pour mener le projet.
­Dr. Adrian Matthews est passé par l'université de Queen's de Belfast. Aujourd'hui, il est docteur dans le domaine de la physique et étudie le comportement des atomes.
­Dr. Paul Jacob est employé actuellement en tant que chercheur. Il a rejoint l'equipe de recherche en 1994 et supervise les élèves qui tentent aujourd'hui de décrocher leur Master recherche en Informatique.
­Dr Robert Stewart est professeur et se spécialise dans la communication par mobile. Il est diplômé d'un ph D (docteur) à l'université de Queen Mary de Londres.
­Dr. Declan Byrne possède plus de vingt ans d'expérience dans l'industrie. Il est professeur de mathématiques Quentin Bezsilko 9 16/06/09
et d'informatique.
­John Yuanseng Qiao possède sept ans d'expérience dans l'industrie. Il est devenu chercheur à l'AIT en 2005 et se spécialise dans la résolution des problèmes de réseau. Nous avons été ses collègues lors de notre stage.
Les entreprises Irlandaises spécialisées dans la développement de produits manufacturés vont pouvoir en profiter pleinement parce que cette nouvelle technologie va venir s'inscrire dans leur procédé de fabrication sans grande difficulté technique et ainsi devenir (ou rester selon que l'on parle du pays ou des entreprises) les meilleurs fournisseurs de ce marché. C'est pourquoi le centre de recherche possède un nombre assez conséquent de partenaires en Irlande. En effet, des entreprises de réputation mondiale comme Ericsson, Eircom et AppleTree soutiennent financièrement la recherche dans le pays. Le coût total du projet SUNAT a été estimé à un peu plus d'un million d'euros et les projets en cours sont estimés à environ quatre millions et demi d'euros et ceci concerne seulement l'AIT. Il existe plusieurs centres de recherche en Irlande et les principaux sont placés dans les grandes villes. Ainsi le CIT (Cork Institute of Technology) a conçu un outil destiné au domaine médical tout comme le GIT (Galway Institute of Technology) et le DIT (Dublin Institute of Technology) base sa recherche dans le domaine de la Physique­
Chimie dans son centre appelé le CREST (Centre for Research in Engineering Surface Technology).
Etant donné que nous avions compris la structure du centre, ses missions et que nous avions fait connaissance avec les membres de l'équipe, nous pouvions dès lors concentrer nos efforts sur le travail à mener. Je me suis particulièrement réjouis de l'orientation du projet vers le réseau puisque j'avais rencontré quelques problèmes dans ce domaine lors de ma formation et j'avais ainsi l'opportunité de rattraper mon retard. Un travail pratique ne pouvait ainsi être que bénéfique pour moi.
Quentin Bezsilko 10 16/06/09
II.LE STAGE
A)Mise en place d'un service de téléphonie par Internet
Dès la première semaine, nous avons mené de front les bases du projet et la lecture des documents mis à notre disposition sur le centre de recherche. Nous avons tout d'abord procédé à l'installation de Linux pour travailler sur un système stable, quelque chose que nous avions appris à faire lors de notre formation. Puis, notre tuteur nous a fourni notre premier travail. Celui­ci consistait en la découverte du projet OpenSIPS. Il nous fallait comprendre pourquoi il avait été implémenté et procéder à l'installation du logiciel sur nos machines.
Le projet openSIPS consiste en une implémentation d'un serveur SIP* Open Source, non seulement sur le plan de la licence, mais aussi au vu de sa politique quand on regarde la contribution, la coopération et la communauté qui y travaille. La diversité vient du nombre important de personnes impliquées dans le projet, ainsi que de la richesse et des nombreuses caractéristiques d'OpenSIPS. OpenSIPS est la continuation du projet OpenSER. Il possède toujours l'esprit de l'Open Source et de la communauté, mais également l'envie du progrès à travers un processus solide de consolidation.
Basé sur l'expérience de la version précédente, cette consolidation est primordiale pour garantir les meilleurs résultats dans le projet. Un environnement consolidé est nécessaire pour l'implémentation de projets volumineux dont le but est de fournir une solution professionnelle pour le monde de l'industrie.
Ce travail sur OpenSIPS qui consistait en une installation nous a paru simple au premier abord alors qu'en réalité, il fût plus difficile qu'on ne pouvait le penser. Le travail de recherche est tout d'abord venu s'orienter sur le protocole SIP. Nous avions vus lors de notre formation un protocole particulier : le protocole TCP/IP*. Mais celui­ci était bien différent de ce que nous avions appris. SIP est l'abréviation de Session Initiation Protocol. Il s'agit d'un protocole ouvert standard souvent utilisé dans les télécommunications multimédia (son, image). Un compte SIP permet ainsi à l'utilisateur de bénéficier de tous les services téléphoniques traditionnels (conférence, double appel). Il est le plus courant pour la téléphonie par Internet, appelé la VoIP (Voice over Internet Protocol). On l'utilise également pour d'autres applications comme la visiophonie, la messagerie instantanée, la réalité virtuelle et les jeux vidéos.
Le schéma ci­dessous décrit une communication SIP. L'émetteur du message envoie une invite au destinataire pour établir une session. Le destinataire répond avec un message ayant un statut de valeur 180, ce qui signifie que le téléphone sonne. Dès que le destinataire décroche, une nouvelle réponse avec un code de retour égal à 200 est envoyée, ce qui signifie que le destinataire a accepté l'invitation. L'émetteur recoit un accusé de réception (ACK*) qui certifie de l'établissement de la connexion. Le lecteur pourra voir comment est modélisée une invite SIP en annexe 1.
Quentin Bezsilko 11 16/06/09
Schéma 1 : représentation schématique d'une communication par le protocole SIP
Le protocole VoIP permet quant à lui de communiquer par la voix via Internet où tout autre réseau qui accepte le protocole TCP/IP. Il permet de supporter le service de téléphonie IP (Telephony over Internet Protocol). Son histoire remonte en 1877 lors de sa première utilisation commerciale. Il a donc évolué depuis plus de cent­trente années. C'est un protocole utilisé presque partout mais son principal inconvénient réside dans le fait qu'il est trop souvent partagé avec d'autres applications.
Nous avons tenté ­ finalement avec succès ­ d'installer OpenSIPS sur nos machines. La caractéristique d'être Open Source pour un logiciel est positive parce que tout le monde peut améliorer, utiliser et s'approprier le programme. Mais un inconvénient réside dans le fait que la publication libre de tutoriels sur le Web semble parfois s'avérer inexacte. C'est un problème auquel nous avons été confrontés durant cette installation. Après avoir passé un temps assez conséquent à rechercher un fichier d'installation valide, nous avons pu installer le logiciel et l'utiliser. Quentin Bezsilko 12 16/06/09
Schéma 2 : fonctionnement des différents protocoles dans le modèle OSI.
Nous avons ensuite décidé d'en rédiger un lors de notre installation. Il fallait dans cet exercice faire preuve de rigueur tout en essayant d'être le plus précis possible. Ce type d'installation semble déjà compliqué pour un informaticien c'est pourquoi il faut être sûr que le lecteur sera en mesure de suivre ce que nous avons tenté d'expliquer. Le lecteur pourra découvrir le tutoriel* crée en annexe 2. Il décrit toutes les manipulations à effectuer pour installer le logiciel. Nous avons sollicité l'aide de notre tuteur pour choisir les mots parce que la principale caractéristique d'un tutoriel est sa clarté. Après plusieurs corrections, nous l'avons validé et publié sur Internet. Le lecteur pourra le retrouver sur le site de l'AIT ( www.ait.ie ).
Ce logiciel doit impérativement être accompagné d'une interface client. C'est avec le logiciel X­Lite que nous sommes parvenus à procéder à un appel téléphonique à travers le web en utilisant le protocole SIP. Ce logiciel nous a permis de créer les clients du serveur auquel nous nous sommes connectés. Nous les avons stockés dans une base de données (une base MySQL a été choisie). Ceci nous a également permis d'utiliser nos compétences en base de données. Nous avons donc pu établir un lien entre ce que nous avions appris lors de notre formation et le travail en entreprise. Il fallait également procéder à une étape de configuration pour pouvoir l'utiliser correctement. Ce logiciel contenait un fichier explicatif pour l'installation mais nous n'avons pas trouvé d'aide pour le configurer. Ainsi, notre recherche nous a une fois de plus permis de trouver une solution et nous avons proposé à notre tuteur un tutoriel pour la configuration du logiciel. Le lecteur pourra lire le contenu de ce tutoriel en annexe 3.
Quentin Bezsilko 13 16/06/09
La notion la plus importante que nous avons pu apprendre à propos du protocole SIP est certainement qu'il contient le message SDP*. SDP est l'abréviation de Session Description Protocol. Il s'agit là d'un format pour décrire les paramètres d'initialisation du flux dit média sous forme d'une chaîne formée par des caractères de la table ASCII. Le protocole SDP ne délivre pas le message lui­même, il permet simplement de décrire la session de communication, l'invite et les paramètres dits de négociation. C'est un protocole destiné à une extension pour les nouveaux supports (média et formats).
Ainsi, nous avons pu effectuer un appel téléphonique par Internet à l'aide du logiciel OpenSIPS et de l'interface client X­lite. Nous avons utilisé une base de données MySQL pour sauvegarder les données concernant les clients. La principale difficulté éprouvée résidait dans le travail de recherche. Il nous fallait découvrir le modèle SIP ainsi que les logiciels utilisés. Ceci nous a permis de nous améliorer dans notre manière de rechercher les informations et de consolider les savoirs que nous possédions concernant les réseaux informatiques.
En aparté avec le travail d'installation, nous avons pu lire parmi les nombreux documents que nous avions parcourus des sources d'un langage que nous avions beaucoup utilisé lors de notre formation : le Java. Ce code source que le lecteur pourra retrouver en annexe 4 montre une utilisation parmi les plus simples du protocole SIP à l'aide de deux paquets :
­java.http.*
­java.http.sip.*
Ceci est une vision intéressante parce que nous avons ainsi été capables de mieux comprendre comment le protocole fonctionnait et ceci constituait un point de vue différent sur le protocole SIP, plus orienté sur les notions que nous avions manipulées lors de notre formation. Il s'agit d'une servlet*, un programme Java particulier que nous avons appris à écrire un peu plus tôt dans le semestre.
Une fois l'appel réalisé, nous l'avons analysé, pour comprendre exactement comment un appel téléphonique était réalisable par Internet. C'est avec un autre logiciel Open Source que nous avons pu analyser le processus. Ce logiciel s'appelle Wireshark*. Il est destiné à l'analyse de réseaux dans plus de huit cent protocoles. C'est l'outil le plus populaire dans le monde, il est très puissant, sécurisé et fournit des informations sur les protocoles réseaux et applicatifs à partir de données capturées. Il utilise une bibliothèque particulière appelée «pcap» pour capturer les paquets. Il possède de nombreuses fonctionnalités ( tri, filtrage de données, suivi des paquets ).
Nous avons pu de nouveau créer des liens avec les notions que nous avions étudiées au cours de notre formation. En effet, ce logiciel nous permettait de retrouver le datagramme IPV4*, dans lequel se trouve en particulier le protocole utilisé pour l'envoi du message, l'adresse source et de destination du message ainsi que la taille du message. Mais la principale information que cette analyse nous a permis de comprendre est que cette manière de procéder était très peu convaincante, parce qu'elle ne fonctionne pas si le locuteur ne connait pas l'adresse IP de son interlocuteur, un cas qui est assez fréquent dans ce type de situation. C'est pourquoi il nous fallait procéder autrement. Nous avons donc décidé d'ajouter un proxy* à notre installation. Le proxy (traduit en français par un serveur mandataire) est un serveur placé entre deux utilisateurs qui ne connaissent pas leurs emplacements respectifs (notion mieux connue sous le nom d'adresse IP*). En effet, l'association entre l'utilisateur et l'adresse IP a été préalablement stockée dans une base de données par un registrar*. Le proxy est capable d'interroger cette base pour rediriger les messages vers le bon destinataire. Il ne se contente que de relayer les messages SIP pour établir, contrôler et terminer la session. Quand la session est établie, les données (par exemple le flux RTP pour le protocole VoIP) ne transitent plus par le serveur, elles sont directement échangées entre les différents utilisateurs. Ces serveurs mandataires sont surtout utilisés parce que cela permet de: ­journaliser les requêtes.
Quentin Bezsilko 14 16/06/09
­sécuriser le réseau local.
­filtrer les messages et les rendre anonymes.
Il est donc important de l'utiliser pour sécuriser par exemple les systèmes d'informations.
Le logiciel utilisé pour mettre en place le proxy est appelé MediaProxy. Il s'agit d'un relai pour le protocole RTP/RTCP*, ainsi que pour les flux UDP* qui fonctionnent en tandem avec OpenSIPS pour fournir un réseau utilisant le protocole NAT*. Ainsi, MediaProxy se conduit comme une relai pour les flux dits média et permettent un transfert de flux audio et vidéo en passant par le routeur sans avoir le besoin d'installer des outils supplémentaires ayant un coût élevé. Le rôle principal du protocole RTP consiste en la mise en œuvre des numéros de séquence des paquets IP pour reconstituer les informations de voix et ce même si le réseau sous­jacent en change l'ordre. RTP est l'abréviation de Real Transfer Protocol. Il permet :
­d'identifier le type d'information transportée.
­d'ajouter des marqueurs temporels et des numéros de séquence ( remise en ordre des paquets ).
­ de contrôler l'arrivée à destination des paquets par l'envoi d'accusés de réception.
Il contient des informations précieuses concernant la transaction comme la version du protocole, son extension, le numéro de séquence (la notion la plus importante ici) ainsi que le type de flux envoyé.
Pour installer le proxy, nous sommes repartis sur les mêmes bases de travail que lors de l'installation d'OpenSIPS. En effet, ceci nous a permis de prendre de l'expérience et d'améliorer notre méthode de travail. Nous sommes parvenus à trouver le bon fichier qui expliquait clairement les démarches à suivre pour installer correctement le logiciel plus rapidement et le temps pris pour effectuer l'opération a été considérablement réduit.
Nous avons appris un nombre important de notions lors de l'installation du proxy. En effet, il nous fallait nous documenter et la recherche menée nous a permis tout d'abord permis de faire connaissance avec de nouveaux protocoles (SIP, RTP, SDP), puis de mieux comprendre comment ils fonctionnaient les uns avec les autres. Nous avons également pu établir un lien entre les notions que nous avions étudiées lors de notre formation et les notions que nous avons apprises lors de notre stage. Il s'agissait pour nous d'une nouvelle façon de voir le travail de recherche, différent de celui de l'IUT car contrairement à notre formation, nous n'avons pas été mis sur la voie pour trouver les bonnes sources. Nous avons bien compris l'intérêt d'utiliser le proxy dans ce cas de figure : il permet de savoir quel est le temps exact de communication, donc de réduire les coûts mais on l'utilise ici surtout parce que sans lui, la communication aurait été impossible sachant que le locuteur ne connaissait pas l'adresse IP de son interlocuteur. Voici le diagramme qui représente la situation. Nous observons quels sont les protocoles mis en jeu dans cette application (SIP, SDP,RTP/RTCP, TCP/IP). Nous pouvons également analyser quels sont les outils nécessaires pour la mise en place d'un tel environnement (notons l'importance de la présence du proxy et du dispatcher).
Quentin Bezsilko 15 16/06/09
Schéma 3 : communication téléphonique par Internet en utilisant un proxy
La première partie du projet nous a permis de comprendre comment fonctionnait la communauté de l'Open Source. La gratuité des logiciels ne donne pas à un autre utilisateur le droit d'exiger des fichiers d'aide pour l'installation. Ainsi, le moyen que nous avons utilisé pour résoudre le dernier problème rencontré ( faire passer les messages SDP par le proxy ) a été d'envoyer un message sur un forum adapté et un utilisateur expérimenté nous a répondu le lendemain. Nous avons ainsi pu terminer le premier projet et passer au second, c'est­à­dire l'installation d'un réseau local personnalisé sur Internet. B)Mise en place d'un réseau personnalisé sur Internet
La première partie de notre projet étant terminée, nous avons ensuite travaillé sur une résolution possible des carences que possède actuellement le protocole de communication IPV4. En effet, ce mécanisme arrive à saturation de par l'extension inattendue que semble prendre Internet, les chiffres annoncent que ce phénomène prendra réellement effet vers 2010. Cette croissance exponentielle n'avait pas été envisagée et des solutions doivent être apportées dans ce sens. Ainsi, est apparu le projet du protocole de communication IPV6, qui consiste en un codage des adresses IP sur cent­vingt huit bits au­lieu du codage sur trente­deux bits utilisé pour les adresses IPV4. Mais cette solution est très onéreuse.
Quentin Bezsilko 16 16/06/09
Une autre solution existe et consiste en la traduction d'adresses de type réseau. Il s'agit de faire correspondre les adresses IP internes non­uniques et souvent non routables* ( c'est­à­dire qu'on ne peut pas préciser à la source le chemin à suivre pour arriver au destinataire ) d'un Intranet vers un ensemble d'adresses externes uniques et routables. Ce mécanisme permet de faire correspondre une seule adresse externe publique visible sur Internet à toutes les adresses d'un réseau privé et pallie la carence des adresses IPV4 d'Internet. Dans cette situation, on dit qu'un routeur* fait du NAT ( abréviation de Network Address Translation ) traduit en français par traduction d'adresses réseau.
Au delà de la raison pour laquelle ce mécanisme a été principalement crée, le NAT permet également de sécuriser encore un peu plus son réseau. En effet, la passerelle* (en anglais gateway) cachant complètement l'adressage interne du réseau, le mécanisme de traduction d'adresses permet une fonction de sécurité car du point de vue de l'observateur externe au réseau, toutes les requêtes semblent provenir de l'adresse IP de la passerelle. Le schéma ci­dessous détaille de manière plus explicite la situation.
Schéma 4 : mise en place du NAT
Nous avons donc installé de nouvelles machines pour configurer notre environnement. Le processus utilisé était identique à celui choisi précédemment. Les logiciels openSIPS et MediaProxy ont été réutilisés, Quentin Bezsilko 17 16/06/09
tout comme la base de données MySQL. Au total, quatre machines étaient prises en compte dans la construction de notre LAN* (local area Network). Nous avons gagné un temps considérable en ayant profité d'un effet d'expérience puisque nous avions réalisé cette opération quelques jours auparavant.
Le matériel mis à notre disposition pour installer notre environement était assez important. L'installation a été rendue difficile par notre manque d'expérience et notre travail de recherche pour y parvenir a encore été très conséquent. Nous avons tenté de chercher des documents qui pouvaient nous aider et nous en avons beaucoup qui ne nous ont pas permis de résoudre notre problème. Finalement, en ayant bien configuré le principal fichier, nous sommes parvenus à connecter tous les ordinateurs au routeur que nous avons utilisé. Nous avions donc construit un réseau local au sein du centre de recherche. A l'aide des précieux conseils que nous avons pu obtenir, nous avons su immédiatement à quel endroit nous devions regarder pour savoir comment configurer notre routeur. Ce qui nous a permis de gagner du temps. Il s'agissait en réalité d'une adresse IP particulière que nous devions saisir au lancement de notre connexion Internet. Nous connaissions les paramètres à saisir et nous avons pu procéder à la configuration et à l'installation de notre routeur. Nous avons lu dans la page de configuration que le nombre maximal de machines que nous pouvions connecter était au nombre de cinquante, mais par souci de simplicité, nous n'en avons utilisé que quatre. Cependant, un problème persiste quand nous mettons en place un tel environnement. En effet, un contrôle est effectué par rapport à l'utilisateur externe au réseau donc ceci constitue bien une sécurité supplémentaire par rapport au modèle précedent. Mais ce procédé ne prend en compte les utilisateurs connectés à un service et qui se trouvent en dehors du pare­feu*. C'est pourquoi nous avons eu besoin de l'intégrer à notre environnement.
Un firewall* est un élément du réseau informatique, logiciel et/ou matériel qui a pour fonction de faire respecter la politique de sécurité du réseau, celle­ci définissant les types de communication interdits ou autorisés. Il contrôle les traffics entre les différentes zones de confiance en filtrant les flux de données qui y transitent. En général, les flux de données incluent Internet et au moins un réseau interne.
Ceci permet donc du point de vue de l'utilisateur de contrôler les privilèges d'accès et de limiter l'utilisation des ressources du réseau aux personnes autorisées. Ce filtrage est réalisé sur différents critères comme l'origine et la destination des paquets, les options contenues dans les données, l'ancienneté des utilisateurs. Par ailleurs, il existe plusieurs catégories de pare­feu comme celui dit sans état (stateless) qui est le plus ancien des filtrages réseaux, ou encore le pare­feu applicatif qui constitue la dernière mouture et qui a la capacité de vérifier la conformité du paquet par rapport à un protocole donné. Le quatrième schéma explique de manière plus concrète le fonctionnement du pare­feu.
Schéma 5 : fonctionnement du pare­feu dans un réseau informatique
Quentin Bezsilko 18 16/06/09
Il est cependant certain que le pare­feu possède quelques limites. En effet, il ne constitue pas une sécurité absolue. Il ne protège le réseau que si l'ensemble des communications vers l'extérieur passe par son intermédiaire et qu'il est correctement configuré. Donc tout accès au réseau extérieur par contournement du pare­feu constitue une faille de sécurité. De même, l'introduction de supports de stockage provenant de l'extérieur sur des machines internes au réseau ou sur des ordinateurs portables peut porter préjudice à la sécurité globale du réseau. Cette installation a été rendue possible par la connaissance que nous avions des bases de données. En effet, ce programme y stocke tous les utilisateurs. Nous n'avons pas eu de mal à modifier les adresses IP pour que la connexion s'effectue correctement. Cependant, un dernier problème persistait parce que toute relance du programme efface les données sauvegardées précédemment dans la base en ce qui concerne les utilisateurs. Nous avons donc décidé de trouver une autre solution pour automatiser le traitement.
Ce dernier travail de recherche a été plûtot rapide de par l'effet d'expérience que nous avons acquis lors de l'installation de notre proxy. Certes, la méthode utilisée était légèrement différente mais la démarche était presque identique. Il nous a fallu modifier le script de configuration du logiciel Opensips. C'est de par le logiciel Wireshark que ceci a été rendu possible. En effet, l'analyse des paquets fût très utile car ceci nous a permis de comprendre à quel endroit les messages ne prenaient pas la bonne direction. Nous avons ainsi terminé notre second projet dans les limites qui nous avaient été imparties. Le travail le plus difficile aura été la recherche d'informations car il prend beaucoup de temps mais aussi parce que le nombre de modules utilisés pour créer le logiciel est assez conséquent. Nous avons aussi terminé la documentation concernant l'installation d'un réseau personnalisé en passant par le NAT. Nous avons été très content d'avoir réalisé cette installation parce que ce travail aura une importance dans l'avenir pour le centre de recherche de l'AIT.
C)Installation d' un réseau virtuel avec port mirroing en utilisant un switch
L'étape suivante consistait en un montage d'un réseau ayant un niveau encore plus élevé. Le but était de mettre en place un réseau permettant le port mirroring* en utilisant un switch*. Le réseau ainsi crée pouvait être qualifié de réseau virtuel (appelé plus couramment VLAN* pour virtual LAN). Au lieu de passer directement du NAT précedemment crée au logiciel Opensips, nous voulions passer par un switch intermédiaire dans le but d'interconnecter les deux segments de notre réseau local).
Pour cela, un modèle assez onéreux a été mis à notre disposition. Le fait d'avoir ce switch à notre disposition nous a montré toute la confiance de l'équipe de recherche. Nous avons donc essayé de l'utiliser correctement afin de mettre en place le schéma demandé. Cependant, nous n'avions jamais utilisé un tel outil lors de notre formation, c'est pourquoi nous avons pris le temps de bien nous documenter sur le sujet pour ne pas perdre de temps en étant induit en erreur.
Le premier travail que nous avons réalisé a consisté en la recherche d'informations sur le switch. Nous avons pu améliorer notre connaissance sur cet outil puisque nous avions appris à quoi il servait lors de notre formation. Pour résumer, cet outil permet de relier plusieurs segments (cables ou fibres) dans un réseau informatique. Pour fonctionner, il met à jour une table d'adresses qui lui permet ensuite de savoir sur quel port il doit rediriger les messages, sachant qu'il existe plusieurs méthodes pour le faire. Ensuite, nous avions besoin de connaître son adresse IP pour pouvoir effectuer notre configuration.
Pour trouver l'adresse IP du switch, nous avons utilisé le travail effectué précedemment, c'est­à­dire Quentin Bezsilko 19 16/06/09
la mise en place de notre routeur. En effet, celle­ci nous a permis de consulter la table de routage mise à jour automatiquement. Nous avons donc choisi comme solution de brancher le routeur avec le switch. Puis nous avons consulté la table de routage qui contenait bien l'adresse IP du switch. Nous avons ainsi été en mesure d'effectuer la connexion avec notre switch. La configuration a ensuite été simplifiée et nous avons pu réaliser un appel téléphonique à travers le NAT et le switch.
Un problème intéressant auquel nous avons ensuite tenté de répondre est le délai pris pour faire le lien entre le module Opensips et les téléphones. Pour cela, nous avons utilisé le module Jpcap qui a la particularité d'être Open Source et qui a été créé pour être compatible avec la majorité des versions de Linux et de Windows en ayant suivi les conseils de notre tuteur. Après une courte procédure d'installation et de configuration, nous avons pu procéder à l'écriture d'un programme permettant de calculer ce délai. Nous avons suivi une procédure stricte de documentation comme nous avions appris à le faire lors de notre formation, ce qui nous a permis de gagner du temps car nous savions de suite à quel endroit nous devions chercher nous informations, à savoir la javadoc*.
Pour cela, nous avons eu besoin une fois de plus de faire appel à une aide. Nous l'avons trouvée sur un forum spécifique à l'utilisation du module jpcap* proposé par Java. Le problème que nous avons rencontré était assez difficile à résoudre seuls. Il nous fallait pouvoir distinguer les paquets RTCP émis lors d'une conversation téléphonique alors qu'aucun filtre ne le permettait lors de l'éxécution de notre programme. N'ayant obtenu aucune réponse nous permettant d'obtenir une solution pour résoudre notre problème, nous avons choisi d'implémenter notre programme d'une autre manière.
Les ports de la source et de la destination étant les seules caractéristiques du paquet permettant de reconnaître le protocole RTCP, nous avons donc choisi de baser notre réflexion sur ceux­ci. Nous avons pu ainsi savoir quels étaient ceux destinés à la source et ceux destinés à la destination. Les timestamps* nous ont permis de calculer le délai entre chaque partie selon une formule que nous avons pu retrouver dans un document de l'IETF. Le temps que nous avons utilisé pour venir à bout de ce problème était assez conséquent mais il en valait la peine. Nous avions bien conscience de l'enjeu qu'il représentait pour le projet mené par notre tuteur c'est pourquoi nous tenions absolument à réussir une implémentation correcte. Le lecteur pourra retrouver les sources de ce programme en annexe 5.
Notre projet s'est terminé sur le logiciel permettant de calculer le délai moyen. A travers le travail effectué, nous avons pu nous rendre compte que le stage nous a permis d'acquérir beaucoup d'expérience tout d'abord parce qu'il s'agissait de notre premier stage en entreprise. Il était temps pour nous d'effectuer un bilan des trois mois passés au centre de recherche.
Quentin Bezsilko 20 16/06/09
III.LES APPORTS DU STAGE
a)La méthodologie
Les diverses étapes qui ont constitué ce projet ont été pour la majorité d'entre elles de nouvelles expériences. C'est pourquoi la méthodologie utilisée lors de ce stage était un peu différente de celle que nous avions pu acquérir lors de notre formation. De plus, les exigences de l'entreprise sont supérieures à celles des professeurs. Ainsi, nous avons pu nous adapter à un nouvel environnement, d'un côté sur le travail effectué en stage et d'un autre côté sur la culture du pays dans lequel nous l'avons effectué.
La plus grande partie du travail lors de ce stage a consisté en la recherche d'informations concernant les différents protocoles de communication. Certes, nous avions déjà vu en cours quelques notions qui abordaient le sujet mais les compétences requises pour mener un tel projet étaient au­dessus de nos moyens. Cependant, l'intérêt suscité par le travail effectué nous a permis d'oublier notre manque d'expérience sur le sujet et ainsi nous nous sommes mis au niveau pour pouvoir comprendre les différentes notions abordées. Nous avons donc changé notre point de vue sur le problème posé.
Ce qui nous a permis de comprendre que la recherche nécessite un esprit critique. Il faut absolument vérifier les informations que l'on peut trouver car sans cela, nous pouvons partir sur une mauvaise voie, recommencer tout le travail effectué et ne pas être récompensé de notre travail. De plus, la perte de temps peut s'avérer désastreuse pour l'entreprise.
Alors que lors de notre formation la majorité des travaux s'effectuaient seuls, le stage en entreprise nous a permis d'avoir une notion plus concrète de ce qu'est le travail en équipe. La plupart des travaux entrepris ont été réalisés avec un autre étudiant, ce qui est mieux pour apercevoir une erreur de logique ou de raisonnement. De plus, la confrontation des points de vue nous permet de mieux réfléchir, de développer un esprit critique et d'aborder plus sereinement des travaux difficiles. b)Les apports techniques
Le travail qui nous avons particulièrement apprécié est la création du tutoriel concernant l'installation du logiciel OpenSIPS. En effet, ce travail était tout d'abord utile parce qu'il pourra être réutilisé par d'autres informaticiens et toute création qui est utile aux autres va inciter le développeur à poursuivre ses efforts. Nous n'avions jamais réalisé un travail similaire auparavant et il nous a permis de nous inscrire dans la logique de l'Open Source. Il s'agissait pour nous d'une nouvelle expérience très enrichissante.
Ainsi, nous avons pu améliorer notre capacité de recherche des informations. De plus, les projets Open Source sont par définition libres d'accès. Ainsi, la documentation peut parfois s'avérer inexacte. Nous ne sommes pas en droit d'exiger du créateur une quelconque documentation puisque nous utilisons un Quentin Bezsilko 21 16/06/09
programme qui ne nous appartient pas. Il s'agit d'un programme dont le créateur a très généreusement choisi de le laisser libre d'accès.
De plus, ce travail de recherche nous a également permis d'améliorer notre savoir concernant les réseaux informatiques. Nous avons pu constater qu'il s'agissait d'un domaine riche et varié. Les notions ont été très difficiles à saisir au premier abord mais avec le temps et beaucoup de patience, nous sommes parvenus à comprendre le mécanisme qui permet de faire fonctionner les protocoles que nous avons étudiés et leur imbrication les uns avec les autres. Sur le plan pédagogique, ce stage aura été très complet.
Nous avons pu créer des liens entre les notions étudiées lors de notre formation et celles que nous avons utilisées lors de notre stage. La formation complémentaire dont nous avons pu bénéficier lors de notre stage nous démontre que le travail à effectuer pour rester compétitif est assez conséquent. La remise à niveau constitue en quelque sorte une autre méthode de travail que nous avons pu apprendre pendant ces trois mois de stage parce lors de notre formation, nous ne savions pas à quel point il était important de continuer à manipuler les notions étudiées. c)Les apports humains
Nous avons également pu nous rendre compte de l'ampleur que semble constituer ce monde de l'Open Source. En effet, il existe actuellement une importante communauté qui travaille dans un but non lucratif et dont l'un des principaux objectifs est de permettre un accès plus rapide et plus facile à tous les utilisateurs n'ayant pas ou peu d'expérience. Nous avons pu ainsi apporter notre modeste contribution au monde de l'Open Source lors de la rédaction de ce tutoriel et affiner notre vision puisqu'à ce sujet, nous en avions une idée qui était bien différente de la réalité.
Cette prise de conscience concernant la puissance du monde de l'Open source, nous la devons à notre travail concernant l'installation du proxy. Nous voulions faire passer nos flux SDP par lui­même mais nous ne savions pas comment procéder. Ainsi, un membre parmi l'équipe des créateurs de ce logiciel a répondu un jour plus tard à un message que nous lui avions envoyé dans lequel nous sollicitions leur aide. Bien que l'erreur était minime ( inversion de l'ordre des paramètres dans un fichier de configuration ), je ne pense pas que nous aurions été capables de la trouver à court terme. Cette aide nous aura permis de gagner un temps considérable et de finir cette manipulation dans le délai qui nous était imparti. Les personnes avec qui nous avons travaillé lors de notre stage nous ont apporté leur expérience. Tout d'abord dans le domaine de l'informatique, elles ont toujours été capables de répondre à nos questions quand nous avions besoin de leur aide. Ensuite, nous avons pu pratiquer notre anglais et la marge de progression dont nous avons pu profiter est assez importante. Elle démontre l'attention portée par nos tuteurs quand nous nous étions dans une impasse. Enfin, nous avons pu découvrir une culture différente de la nôtre. L'équipe de recherche étant constituée de membres de nationalités différentes, elle a pu nous faire comprendre que le monde de l'informatique ne pouvait se réduire ni à une entreprise, ni à un pays.
Nous avons également apprécié les compliments que nous avons reçus lors de notre stage, en particulier quand nous avons été capables de mettre en place la solution VoIP pour le centre de recherche. Nous ne nous sommes pas rendus compte immédiatement de l'ampleur que semble avoir le travail que nous avons effectué. En effet, cette solution sera désormais utilisée par le centre de recherche quand il sera amené à communiquer à travers le pays. Le fait de se sentir utile dans une entreprise rend le programmeur satisfait de son travail et l'incite à poursuivre ses efforts. Quentin Bezsilko 22 16/06/09
Le travail effectué par un étudiant faisant partie de la promotion précédente est actuellement réutilisé par le centre de recherche. Il s'agit d'un logiciel qui permet de choisir en pourcentage la qualité du flux média qui est diffusé en direct d'un ordinateur à un autre. Le fait de savoir qu'il y avait une probabilité de réutilisation de notre travail par le centre de recherche nous a apporté une motivation supplémentaire dans notre travail. L'ambiance de travail était excellente tout au long du stage et nous n'avons pas eu la moindre difficulté à exposer nos difficultés, tous les membres se sont montrés très compréhensifs à notre égard. J'ai également compris que la recherche est un domaine qui me conviendrait bien puisque j'affectionne la recherche d'informations, la résolution des problèmes ainsi que l'apprentissage de notions informatiques à travers la lecture d'articles de presse, de tutoriels et de documents fournis par des organismes réputés. C'est pourquoi je vais tenter de poursuivre mes études pour avoir l'opportunité d'effectuer ce métier.
Quentin Bezsilko 23 16/06/09
CONCLUSION
Cette expérience en Irlande au sein du centre de recherche aura été pour moi la meilleure depuis que je travaille dans le monde de l'informatique. Il s'agissait d'un projet auquel j'avais réfléchi depuis plusieurs années et je m'étais bien préparé pour pouvoir le réaliser, en particulier dans l'apprentissage de l'anglais. J'ai pu comprendre des choses dont je ne connaissais pas l'existence avant mon stage, en particulier dans le milieu des réseaux informatiques. Le projet mené avait une logique bien perceptible puisque chaque étape constituait une amélioration de nos installations, et il m'a permis d'améliorer mes capacités de compréhension des problèmes et méthodologiques en particulier lors de la recherche des informations. Bien sûr, nous avons été assez souvent confrontés à des problèmes que nous pensions ne pas être capables de résoudre, mais la persévérance et l'aide de notre tuteur de stage nous ont permis de nous en sortir à chaque difficulté rencontrée. J'en tire donc un bilan très positif et j'espère de nouveau avoir l'opportunité d'effectuer un stage aussi plaisant et intéressant que celui­là. Il m'a donné une perspective en ce qui concerne mon avenir.
Quentin Bezsilko 24 16/06/09
ANNEXES
Annexe 1 : SIP INVITE request:
INVITE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP pc.caller.com;branch=z9hG4bK776asdhds
Max-Forwards: 70
To: Callee <sip:[email protected]>
From: Caller <sip:[email protected]>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 314159 INVITE
Contact: <sip:[email protected]>
Content-Type: application/sdp
Content-Length: 142
Annexe 2 : le tutotiel d'installation d'OpenSIPS:
*************************************************** *
* * * Author : Quentin Bezsilko & Benjamin Grassart * * Date of creation : 23rd of April * * * *************************************************** *
This file is a tutorial explaining step by step how to install OpenSIPS on a linux distribution. It has been installed on Ubuntu 8.10 (32 bits) but still works with other versions. First we will see how to install opensips with a database and after how to add a mediaproxy relay. To start, we need to find all the system for update and upgrade. We'll also need some programs to use OpenSIPS. In order to do so, open a terminal and run the following commands. Note : You should be logged in as the super­user to execute these commands. bezsilko@bezsilko­ubuntu:~$ su Password : If it worked, you can go to the next step! #######################################################################################
Quentin Bezsilko 25 16/06/09
If you don't know your root password or if you haven't set it already, try this. bezsilkq@bezsilkq­ubuntu:~$ sudo passwd [sudo] password for bezsilkq: The console will ask your sudo password. Then you'll be able to enter a new root password.A confirmation will be asked. A message of confirmation will be written if the password has been succesfully changed. #######################################################################################
Once you're logged in as root, you should have a command invite like this. root@bezsilkq­ubuntu:/home/bezsilkq# The char '#' proves you are logged in as root Now you can install the programs to configure your environment. apt­get update && apt­get upgrade apt­get install build­essential openssl bison flex apt­get install mysql­server libmysqlclient15off libmysqlclient­dev Note : When you will set mysql up, a password will be asked to launch it, forbidding anyone to write into your database. Don't forget to create your root password and choose something you'll remember. You can now download the last version of opensips. We'll save the sources and put them in the appropriate directory : /usr/src. Nowadays the latest version is 1.5.1, so we will use it. You can have a look at the official website http://www.opensips.org/ to check the last version. ***************************************************************************************
First Method (using the terminal): Try these commands : bezsilkq@bezsilkq­ubuntu:~$ cd /usr/src bezsilkq@bezsilkq­ubuntu:~$ wget http://opensips.org/pub/opensips/latest/src/opensips­1.5.1­tls_src.tar.gz This command will save the package into your /usr/src directory. ***************************************************************************************
***************************************************************************************
Second Method (using the browser): Go to the Opensips official website : http://www.opensips.org/. Have a look at the right of the page, click on “read more” and go to the download section. * Note : Be careful, OpenSIPS­CP is a control­panel for opensips, but it' s not OpenSIPS ! Download the latest version of opensips. Click on the link in the section : “2. Tarballs from SourceForge” and take the tls version. We need to move the sources into the proper directory, so open a terminal and execute this command : Quentin Bezsilko 26 16/06/09
* bezsilkq@bezsilkq­ubuntu:~$ sudo mv /home/bezsilkq/Desktop/opensips_1.5.1­tls.tar.gz /usr/src/ ***************************************************************************************
This file is in an archive so we need to use this command to extract it : bezsilkq@bezsilkq­ubuntu:~$ tar xvzf opensips­1.5.1­tls_src.tar.gz The command tar extracts your package into your directory. For more information try this into your terminal : bezsilkq@bezsilkq­ubuntu:~$ man tar Now, we're going to place ourselves into the opensips directory and compile the sources with all the available modules. To do so, use the following command : bezsilkq@bezsilkq­ubuntu:~$ cd opensips­1.5.1­tls bezsilkq@bezsilkq­ubuntu:~$ make all include_modules="db_mysql" modules bezsilkq@bezsilkq­ubuntu:~$ make install include_modules="db_mysql" modules We'll also need to copy the opensips.default and opensips.init files in their proper directories (/etc/default/opensips and /etc/init.d/opensips). To do so,try these command into your terminal: bezsilkq@bezsilkq­ubuntu:~$ cp /usr/src/opensips­1.5.1­tls/packaging/debian­etch/opensips.default /etc/default/opensips bezsilkq@bezsilkq­ubuntu:~$ cp /usr/src/opensips­1.5.1­tls/packaging/debian­etch/opensips.init /etc/init.d/opensips Note : The command cp is short for copy. Try this for more informations : bezsilkq@bezsilkq­ubuntu:~$ man cp The last copied files need some changes about their option values. First, open the /etc/default/opensips file with emacs or vim. Note : for more informations about both text editors, try these commands : bezsilkq@bezsilkq­ubuntu:~$ man emacs bezsilkq@bezsilkq­ubuntu:~$ man vim Change the following lines and save. RUN_OPENSIPS=yes 1. User to run as USER=opensips 1. Group to run as GROUP=opensips 1. Amount of memory to allocate for the running OpenSIPS server (in Mb) MEMORY=128 Second, open the /etc/init.d/opensips file and make the following changes (don't forget to save). The line you'll have to change is DAEMON=/usr/sbin/opensips. Put DAEMON=/usr/local/sbin/opensips instead. Quentin Bezsilko 27 16/06/09
Third we need to change the /usr/local/etc/opensips/opensipsctlrc file. So open it with either emacs or wim and make the following changes. SIP_DOMAIN=localhost DBENGINE=MYSQL DBHOST=localhost DBNAME=opensips DBRWUSER=opensips DBRWPW="opensipsrw" DBROUSER=opensipsro DBROPW=opensipsro DBROOTUSER="root" USERCOL="username" INSTALL_EXTRA_TABLES=ask INSTALL_PRESENCE_TABLES=ask INSTALL_SERWEB_TABLES=ask CTLENGINE="FIFO" OSIPS_FIFO="/tmp/opensips_fifo" PID_FILE=/var/run/opensips/opensips.pid Note : All the lines prefixed by the '#' char are comments and ignored by the compiler. You must uncomment these lines by taking off the '#' char We'll need to create a database to save all the created users. We'll be using the mySQL one. To do so, try the following command : root@bezsilkq­ubuntu:/home/bezsilkq# opensipsdbctl create MySQL password for root: Note : this command will ask your mySQL password, so I hope you didn't forget it! This database has to be configured so I'll tell you the changes you'll have to do. Open the /usr/local/etc/opensips/opensips.cfg file and make the following changes : loadmodule "db_mysql.so" #uncomment this line loadmodule "auth.so" #uncomment this line loadmodule "auth_db.so" #uncomment this line 1. modparam("usrloc", "db_mode", 0); #Comment this line modparam("usrloc", "db_mode", 2) #uncomment this line modparam("usrloc", "db_url", "mysql://opensips:opensipsrw@localhost/opensips") #uncomment this line 1. ­­­­­ auth_db params ­­­­­ # uncomment the following lines if you want to enable the database authentification modparam("auth_db", "calculate_ha1", yes) modparam("auth_db", "password_column", "password") modparam("auth_db", "db_url", "mysql://opensips:opensipsrw@localhost/opensips") We are nearly finished. We need now to create the users. That is why our database has been set up. So try the following commands to create them. Quentin Bezsilko 28 16/06/09
Create the softphone user in the database: root@bezsilkq­ubuntu:/home/bezsilkq# opensipsctl add 1234 1234 root@bezsilkq­ubuntu:/home/bezsilkq# opensipsctl add 5678 5678 Note : the first command enables you to create a user named 1234 with the password 1234 into the opensipsdbctl database (created just before) Now we'll create the Opensips user in mySQL. To connect to mySQL, try this command and enter your mysql password: root@bezsilkq­ubuntu:/home/bezsilkq# mysql ­p Enter password: Note : the ­p option means you want to connect with a password. You'll have the "mysql>" invite now. Then try the following commands. Here is a normal execution of the mySQL requests. mysql> GRANT ALL PRIVILEGES ON *.* TO opensips@localhost IDENTIFIED BY 'opensips'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY 'opensips'; Query OK, 0 rows affected (0.00 sec) Note : these commands enables you to give all the permissions to the Opensips user (write and read the database are the most important ones). Congratulations, you managed to install OpenSIPS on your Ubuntu version. Last but not least thing you need to know is how to run it. You have two opportunities which do the same thing : Note : Check if you're still the super­user on your laptop. If so, try this command to become the real user. root@bezsilkq­ubuntu:/home/bezsilkq# exit Then your invite will come back like this : bezsilkq@bezsilkq­ubuntu:~$ Then try either this command to start Opensips : bezsilkq@bezsilkq­ubuntu:~$ sudo /etc/init.d/opensips start [sudo] password for bezsilkq: Or this one : bezsilkq@bezsilkq­ubuntu:~$ opensipsctl start Sometimes both previous methods do not work, so you can try this one : bezsilkq@bezsilkq­ubuntu:~$ sudo opensips It will also indicate the listening port and the IP address of the server. You can now use Opensips with x­lite and make phone call over the Internet.
Quentin Bezsilko 29 16/06/09
Annexe 3 : Tutoriel d'installation du logiciel X­Lite
*************************************************** * * * Author : Quentin Bezsilko & Benjamin Grassart * * Date of creation : 24th of April * * * *************************************************** This file is a tutorial explaining how to install the X­Lite module and how make it work with opensips. Note : This program has been installed on a Ubuntu 8.10 (32 bits) version. No problem has been reported except that using GSM codec might crash on some platform combination. Let us see how to install this software: INSTALLATION: First, you need to download the sources using the Internet. So go to the counterpath website ­­> http://www.counterpath.net/x­lite.html And click on the download button. Then we need to untar the file: > tar ­zxvf X­Lite_Install.tar.gz Move into the X­lite directory > cd xten­xlite For more informations about this command, try this into your terminal > man cd The executable is named xtensoftphone, we need to give him the permission to be launched So try this command > chmod +x xtensoftphone You can now run the executable : > ./xtensoftphone You can copy the executable to a defined $PATH if you so wish. CONFIGURATION OF THE SOFTWARE: Click on the button on the right handside of the Clear button. Check the System settings item and then choose the SIP Proxy. We'll change the values on the default item. Here is an execution of the opensips program bezsilkq@bezsilkq­ubuntu:~$ sudo opensips [sudo] password for bezsilkq: Quentin Bezsilko 30 16/06/09
Listening on udp: 127.0.0.1 [127.0.0.1]:5060 udp: 192.168.101.134 [192.168.101.134]:5060 tcp: 127.0.0.1 [127.0.0.1]:5060 tcp: 192.168.101.134 [192.168.101.134]:5060 Aliases: tcp: bezsilkq­ubuntu.local:5060 tcp: localhost:5060 udp: bezsilkq­ubuntu.local:5060 udp: localhost:5060 Make the following changes matching your opensips execution : Enabled : Yes Display Name : Quentin Username : 5678 Authorization user : 5678 Password : 5678 Domain/Realm : localhost SIP Proxy : udp: 192.168.101.134:5060 Out Band Proxy Use Outbound Proxy : Default SIP Internal IP : Default Register : Default Voicemail SIP URL : Forward SIP URL : Use Voicemail : Forward to Voicemail Direct Dial IP : No Dial Prefix : The three last items don't need to be changed. Note : Don't put any value where I didn't give one in this tutorial. Annexe 4 : Utilisation simple d'un proxy dans une servlet SIP en Java import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleProxy extends SipServlet implements Servlet {
final static private String SHUTDOWN_KEY = new String("shutdown");
final static private String STATE_KEY = new String("state");
final static private int INVITE_RECEIVED = 1;
/*le constructeur*/
public SimpleProxy() {
super();
}
protected void doInvite(SipServletRequest request) throws ServletException,IOException {
try {
if (request.isInitial() == true)
Quentin Bezsilko 31 16/06/09
{
//Ceci devrait créer la session SIP. Cet échantillon utilise uniquement la session pour la réception
//d'un BYE mais Tivoli Performance Viewer peut être utilisé pour suivre la création d'appels au moyen de la visualisation
//du comptage de sessions actives.
Integer state = new Integer(INVITE_RECEIVED);
SipSession session = request.getSession();
session.setAttribute(STATE_KEY, state);
log("SimpleProxy: doInvite: setting attribute");
Proxy proxy = request.getProxy();
SipFactory sipFactory = (SipFactory) getServletContext().getAttribute(SIP_FACTORY);
if (sipFactory == null) {
throw new ServletException("No SipFactory in context");
}
String callingNumber = request.getTo().toString();
if (callingNumber != null) {
String destStr = format_lookup(callingNumber);
URI dest = sipFactory.createURI(destStr);
if(((SipURI)request.getRequestURI()).getTransportParam() != null)
((SipURI)dest).setTransportParam(((SipURI)request.getRequestURI()).getTransportPa
ram());
proxy.setRecordRoute(true);
proxy.proxyTo(dest);
}
else {
SipServletResponse sipresponse = request.createResponse(400);
sipresponse.send();
}
}
else
{
//log("SimpleProxy: doInvite: actualiser la cible, laisser le conteneur gérer l'invite");
super.doInvite(request);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
protected void doResponse(SipServletResponse response) throws ServletException,
IOException {
super.doResponse(response);
// Exemple d'utilisation d'un objet de session pour stocker l'état de la session.
SipSession session = response.getSession();
if (session.getAttribute(SHUTDOWN_KEY) != null)
{
//log("SimpleProxy: doResponse: invalidation de la session");
session.invalidate();
}
Quentin Bezsilko 32 16/06/09
}
protected void doBye(SipServletRequest request) throws ServletException,
IOException {
SipSession session = request.getSession();
session.setAttribute(SHUTDOWN_KEY, new Boolean(true));
super.doBye(request);
}
protected String format_lookup(String toFormat){
int start_index = toFormat.indexOf('<') + 1;
int end_index = toFormat.indexOf('>');
if(start_index == 0){
//ne pas s'en occuper
}
if(end_index == ­1){
end_index = toFormat.length();
}
return toFormat.substring(start_index, end_index);
}
}
Annexe 5 : résolution du problème posé par le délai (programme JAVA)
import jpcap.*; import jpcap.packet.*; import java.io.*; import java.util.List; import java.util.ArrayList; import java.net.*; public class Delai{ /*Four parameters are needed in this class ­the port of the sender ­the port of the receiver ­two lists to save the packets (one for the sender and one for the receiver) */ List <UDPPacket> listSender; List <UDPPacket> listReceiver; int portDstSender; int portDstReceiver; /*The constructor*/ Delai(int port_dst_sender, int port_dst_receiver){ listSender = new ArrayList <UDPPacket> (); listReceiver = new ArrayList <UDPPacket> (); portDstSender = port_dst_sender; portDstReceiver = port_dst_receiver; Quentin Bezsilko 33 16/06/09
} //returns a String which represents the data format in hexadecimal like in wireshark public static String getHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length*2); int i=0; for (byte b : bytes) { String s = String.format("%x", b); if( s.length() == 1 ){ s = "0"+s; } //the next lines are just here to get a better display sb.append(s + " " ); i++; if( i%16 == 0 ){ sb.append("\n"); } } return sb.toString(); } //returns the reference timestamp from the sender public byte[] getMiddleNTPTimestamp( UDPPacket packet ){ byte[] timestamp = new byte[4]; byte[] data = ((Packet)(packet)).data; //we take the corrresponding byte in the sender packet timestamp[0] = data[10]; timestamp[1] = data[11]; timestamp[2] = data[12]; timestamp[3] = data[13]; return timestamp; } //returns the reference timestamp from the receiver public byte[] getLSRReceiver( UDPPacket packet ){ byte[] timestamp = new byte[4]; byte[] data = ((Packet)(packet)).data; //we take the corresponding byte in the receiver packet timestamp[0] = data[24]; timestamp[1] = data[25]; timestamp[2] = data[26]; timestamp[3] = data[27]; return timestamp; } Quentin Bezsilko 34 16/06/09
//returns the reference timestamp from the receiver public byte[] getLSRSender( UDPPacket packet ){ byte[] timestamp = new byte[4]; byte[] data = ((Packet)(packet)).data; //we take the corresponding byte in the receiver packet timestamp[0] = data[44]; timestamp[1] = data[45]; timestamp[2] = data[46]; timestamp[3] = data[47]; return timestamp; } //return in Int the type of the report. 200 correspond to a sender report, 201 correspond to a receiver report public int getTypeReport( UDPPacket packet ){ byte type = ((Packet)(packet)).data[1]; Byte Type = new Byte(type); return Type.intValue()+256; } void capturePacketFromFile( String fileName ){ int nbPacketCaptured = 0; int nbPacketIgnored = 0; //we must destroy the old data before load the new one listSender.clear(); listReceiver.clear(); try{ JpcapCaptor captor=JpcapCaptor.openFile(fileName); captor.setFilter("udp", true); boolean continuer = true; boolean sender_detecte = false; while( continuer ){ //read a packet from the opened file Packet temp = captor.getPacket(); UDPPacket packet = null; //we continue only if the packet is good and if the file is not at the end if( temp != null && temp != packet.EOF ){ packet = (UDPPacket)temp; //we only use the packet with the port of RTCP if( packet.dst_port == this.portDstSender || packet.dst_port == this.portDstReceiver ){ if( getTypeReport(packet) == 200 ){ listSender.add(packet); sender_detecte = true; }else{ //we need to have a sender before take the receiver Quentin Bezsilko 35 16/06/09
if( sender_detecte ){ listReceiver.add(packet); } else nbPacketIgnored++;//the receiver packet related with another file } nbPacketCaptured++; } }else{ continuer = false;//we stop if we're at the end } } captor.close(); System.out.println("all is well : we've captured "+nbPacketCaptured+" packets."); System.out.println("We've skipped "+nbPacketIgnored+" packet(s) at the beginning because there were related with the previous package"); }catch( IOException e){ System.out.println(e); } }
//capture the packet and filter with an address source and and address destination void capturePacketFromFile( String fileName, InetAddress source, InetAddress destination ){ int nbPacketCaptured = 0; int nbPacketIgnored = 0; //we must destroy the old data before load the new one listSender.clear(); listReceiver.clear(); try{ JpcapCaptor captor=JpcapCaptor.openFile(fileName); captor.setFilter("udp", true); boolean continuer = true; boolean sender_detecte = false; while( continuer ){ //read a packet from the opened file Packet temp = captor.getPacket(); UDPPacket packet = null; //we continue only if the packet is good and if the file is not at the end if( temp != null && temp != packet.EOF ){ packet = (UDPPacket)temp; //we only use the packet with the port of RTCP if( packet.dst_port == this.portDstSender || packet.dst_port == this.portDstReceiver ){ //we take only the packet corresponding to the required ip address if ( source.equals(packet.src_ip) && destination.equals(packet.dst_ip) ){ if( getTypeReport(packet) == 200 ){ listSender.add(packet); sender_detecte = true; Quentin Bezsilko 36 16/06/09
}else{ //we need to have a sender before take the receiver if( sender_detecte ){ listReceiver.add(packet); } else nbPacketIgnored++;//the receiver packet related with another file } nbPacketCaptured++; } } }else{ continuer = false;//we stop if we're at the end } } captor.close(); System.out.println("all is well : we've captured "+nbPacketCaptured+" packets."); System.out.println("We've skipped "+nbPacketIgnored+" packet(s) at the beginning because there were related with the previous package"); }catch( IOException e){ System.out.println(e); } }
//prints the packets with some informations and the data ( format in hexa ) void printPackets(){ UDPPacket packet = null; int nbPacketDisplayed=0; //displays all the sender packets System.out.println("Display of the Sender packets : \n"); for( int i=0 ; i < listSender.size() ; i++){ packet = listSender.get(i); byte[] donnees_rtcp = ((Packet)packet).data; System.out.println("packet n°"+i+" : "+packet); System.out.println("report's type : "+getTypeReport(packet)); System.out.println("timestamp : "+getHexString(getMiddleNTPTimestamp(packet))); System.out.println("LSR : "+getHexString(getLSRSender(packet))); System.out.println(getHexString(donnees_rtcp) + "\n"); nbPacketDisplayed++; } //displays all the receiver packets System.out.println("Display of the Receiver packets : \n"); for( int i=0 ; i < listReceiver.size() ; i++){ packet = listReceiver.get(i); byte[] donnees_rtcp = ((Packet)packet).data; System.out.println("packet n°"+i+" : "+packet); System.out.println("report's type : "+getTypeReport(packet)); System.out.println("timstamp : "+getHexString(getLSRReceiver(packet))); System.out.println(getHexString(donnees_rtcp) + "\n"); Quentin Bezsilko 37 16/06/09
nbPacketDisplayed++; } System.out.println("We've displayed "+nbPacketDisplayed+" packet(s)."); } //gets the DLSR (in seconds) for the receiver public float getDLSRReceiver( Packet packetReceiver ) throws IOException{ byte[] DLSR = new byte[4]; byte[] data = packetReceiver.data; DLSR[0] = data[28]; DLSR[1] = data[29]; DLSR[2] = data[30]; DLSR[3] = data[31]; //code which transforms the array byte into an Int ByteArrayInputStream bis = new ByteArrayInputStream(DLSR); DataInputStream in = new DataInputStream(bis); long ch1 = (long) in.read(); int ch2 = in.read(); int ch3 = in.read(); int ch4 = in.read(); long nb = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); } //System.out.println("Before dividing by 65535 : "+nb); return (float)((float)nb/(float)65535); //gets the DLSR (in seconds) for the sender public float getDLSRSender( Packet packetSender ) throws IOException{ byte[] DLSR = new byte[4]; byte[] data = packetSender.data; DLSR[0] = data[48]; DLSR[1] = data[49]; DLSR[2] = data[50]; DLSR[3] = data[51]; //code which transforms the array byte into an Int ByteArrayInputStream bis = new ByteArrayInputStream(DLSR); DataInputStream in = new DataInputStream(bis); long ch1 = (long) in.read(); int ch2 = in.read(); int ch3 = in.read(); int ch4 = in.read(); long nb = ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); //System.out.println("Before dividing by 65535 : "+nb); return (float)((float)nb/(float)65535); } Quentin Bezsilko 38 16/06/09
//returns the arrival time of the packet in seconds public double getArrivalTime( Packet packet ){ return (double) packet.sec+(packet.usec / 1000000.0); } //returns the delay from the package named "filename" public double getDelay( String filename, InetAddress source, InetAddress destination ){ if( source == null || destination == null ){ this.capturePacketFromFile(filename);//fill the list }else{ this.capturePacketFromFile(filename, source, destination); } UDPPacket currentSenderPacket = null; UDPPacket currentSenderPacketBis = null; byte[] NTPtimestampSender = new byte[4]; byte[] LSRtimestampSender = new byte[4]; byte[] LSRtimestampReceiver = new byte[4]; UDPPacket currentReceiverPacket = null; System.out.println("Receiver list size :"+listReceiver.size()); System.out.println("Sender list size :"+listSender.size()); double currentDelay = 0; double totalDelay = 0; int nbDelay = 0; for( int i=0 ; i < listSender.size() ; i++ ){ currentSenderPacket = listSender.get(i); NTPtimestampSender = getMiddleNTPTimestamp(currentSenderPacket); //calculation between two Sender for( int j=i ; j < listSender.size() ; j++ ){ currentSenderPacketBis = listSender.get(j); LSRtimestampSender = getLSRSender(currentSenderPacketBis); if( NTPtimestampSender[0] == LSRtimestampSender[0] && NTPtimestampSender[1] == LSRtimestampSender[1] && NTPtimestampSender[2] == LSRtimestampSender[2] && NTPtimestampSender[3] == LSRtimestampSender[3] ){ System.out.println("le Sender n°"+i+" va avec le sender n°"+j); try{ //System.out.println("Arrival time sender packet : "+getArrivalTime(currentSenderPacket)); //System.out.println("Arrival time sender packet : "+getArrivalTime(currentSenderPacketBis)); //System.out.println("sender packet DLSR"+getDLSRSender(currentSenderPacketBis)+" seconde"); currentDelay = getArrivalTime(currentSenderPacketBis)­
Quentin Bezsilko 39 16/06/09
getArrivalTime(currentSenderPacket)­getDLSRSender(currentSenderPacketBis); System.out.println("Delai : "+currentDelay); totalDelay += currentDelay; nbDelay++; }catch(Exception e){ System.out.println(e);} } } //calculation between two Receiver for( int j=0 ; j < listReceiver.size() ; j++ ){ currentReceiverPacket = listReceiver.get(j); LSRtimestampReceiver = getLSRReceiver(currentReceiverPacket); if( NTPtimestampSender[0] == LSRtimestampReceiver[0] && NTPtimestampSender[1] == LSRtimestampReceiver[1] && NTPtimestampSender[2] == LSRtimestampReceiver[2] && NTPtimestampSender[3] == LSRtimestampReceiver[3] ){ System.out.println("le Sender n°"+i+" va avec le Receiver n°"+j); try{ //System.out.println("Arrival time sender packet : "+getArrivalTime(currentSenderPacket)); //System.out.println("Arrival time receiver packet : "+getArrivalTime(currentReceiverPacket)); //System.out.println("receiver packet DLSR "+getDLSRReceiver(currentReceiverPacket)+" seconde"); currentDelay = getArrivalTime(currentReceiverPacket)­
getArrivalTime(currentSenderPacket)­getDLSRReceiver(currentReceiverPacket); System.out.println("Delai : "+currentDelay); totalDelay += currentDelay; nbDelay++; }catch(Exception e){ System.out.println(e);} } } } System.out.println("Delai total :"+totalDelay); System.out.println("nbDelay :"+nbDelay ); return totalDelay/(double)nbDelay; } /*Main Method*/ public static void main(String[] args) throws Exception{ String fileName = args[0]; int sourcePort = Integer.parseInt(args[1]); int destPort = Integer.parseInt(args[2]); InetAddress source = null; InetAddress destination = null; if( args.length > 3 ){ source = InetAddress.getByName(args[1]); destination = InetAddress.getByName(args[2]); } Quentin Bezsilko 40 16/06/09
Delai delai = new Delai(sourcePort, destPort); /*Change the current Woreshark file Here*/ //delai.capturePacketFromFile(fileName); //delai.printPackets(); /*The parameter in here is the Wireshark file */ System.out.println("The average delay of this package is : "+delai.getDelay(fileName, source, destination)); //delai.printPackets(); } }
Quentin Bezsilko 41 16/06/09
GLOSSAIRE
A
AIT : Athlone Institute of Technology. L'université dans laquelle nous avons réalisé notre stage.
ACK : vient de l'anglais Acknoledgement, signifie que le paquet courant est un accusé de réception.
Adresse IP : numéro qui identifie chaque utilisateur connecté à Internet. Elle est généralement notée avec quatre nombres compris entre 0 et 255, chacun étant séparé des autres par des points. B
C
Cahier des charges : Document contractuel définissant de façon exhaustive ce que le commandit attend de la réalisation d'un produit ou d'un service.
D
Datagramme IPV4 : données encapsulées de la quatrième version du protocole Internet auxquelles on a ajouté des en­têtes correspondant à des informations sur leur transport. E
Effet d'expérience : Quand une entreprise travaille sur un projet ressemblant à un autre déjà mené, elle profite de son passé pour développer son logiciel plus rapidement et avec une meilleure qualité de service.
Ethernet : (aussi connu sous le nom de norme IEEE 802.3) standard de transmission de données pour réseau local.
F
Firewall : ésigne un élément du réseau informatique qui a pour fonction de contrôler les privilèges d'accès, de limiter l'utilisation des ressources du réseau aux utilisateurs. En général, il permet d'empêcher l'utilisateur d'effectuer des actions malicieuses en utilisant un service se trouvant en dehors du pare­feu.
G
H
Quentin Bezsilko 42 16/06/09
I
IETF (Internet Engineering Task Force) : littéralement traduit de l'anglais en «Détachement d'ingénierie d'Internet» est un groupe informel, international, ouvert à tout individu, qui participe à l'élaboration de standards pour Internet. L'IETF produit la plupart des nouveaux standards d'Internet.
J
Javadoc : ensemble des fichiers de documentation pour la programmation en langage Java. Ces fichiers s'obtiennent après compilation du code source.
Jpcap : bibliothèque Open Source qui permet de capturer et d'envoyer des paquets sur une interface réseau à partir d'une application Java. Cette application permet d'identifier plus facilement les paquets qui circulent.
K
L
LAN : abréviation de Local Area Network, désigne un ensemble d'ordinateurs appartenant à une même organisation et reliés entre eux dans une petite aire géographique par un réseau, souvent à l'aide d'une même technologie (la plus répandue étant Ethernet). Linux: système d'exploitation libre et gratuit développé par des bénévoles et respectant la standardisation des applications des logiciels destinés à fonctionner sur des variantes du système.
M
Midlands Innovation : centre de recherche basé à l'AIT qui a pour objectif principal de mener la recherche et d'innover en travaillant en corrélation avec les entreprises.
Middleware : en français intergiciel (vient de l'anglais middle ­ milieu ­ et de software ­ logiciel ) est un logiciel servant d'intermédiaire de communication entre plusieurs applications, généralement complexes ou distribuées sur un réseau informatique.
N
NAT: Network Adress Translation, on dit qu'un routeur fait du NAT quand il fait correspondre les adresses internes non uniques et non routables vers des adresses externes uniques et routables.
O
Open Source: désignation qui s'applique aux logiciels dont la licence respecte des critères précisément établis par l'Open Source Initiative, c'est­à­dire la possibilité de libre redistribution, d'accès au code source, et de travaux dérivés.
OpenSER : le projet de base qui a été étendu par OpenSIPS.
OpenSIPS: logiciel gratuit produit sous licence GNU Open Source qui étend le projet OpenSER et consiste en l'implémentation d'un serveur SIP.
Quentin Bezsilko 43 16/06/09
P
Protocole: Ensemble des conventions nécessaires pour faire coopérer des entités distantes, en particulier pour établir et entretenir des échanges d'informations entre ces entités.
Proxy : intermédiaire entre deux utilisateurs qui ne connaissent pas leurs emplacements respectifs et qui permet la communication entre les deux membres.
Passerelle : adresse où sont envoyés les paquets qui sont destinés à des ordinateurs à l'extérieur du réseau local.
Pare­feu: synomyme de firewall.
port mirroring : technique utilisée par le switch dans un réseau informatique pour copier tous les paquets qui circulent dans le réseau vers un autre connecté sur un autre port.
Q
R
Registrar : un des principaux protocoles de télécommunication utilisés par Internet. Le rôle de ce protocole est de permettre la transmission de paquets de manière très simple entre deux entités, chacune étant définie par une adresse IP et un numéro de port (pour différencier différents utilisateurs sur la même machine). Il fonctionne en mode non connecté.
RTP: (Real­Time Transfer Protocol) protocole qui consiste en la mise en œuvre de numéros de séquence des paquets IP pour reconstituer les informations de voix ou audio même si le réseau sous­jacent en change l'ordre.
RTCP : (Real­Time Control Protocol ) protocole de contrôle associé à RTP, mesure les indices de performance (contrôle des flux RTP) et permet de véhiculer des informations basiques sur les participants d'une session et sur la qualité de service.
Routable : désigne le matériel sur lequel l'opération de routage est possible, c'est­à­dire spécifier le circuit qu'une communication doit emprunter pour parvenir au destinataire.
Routeur : outil logiciel ou matériel utilisé pour diriger les données à travers un réseau entre plusieurs serveurs. Désigne également une interface entre deux réseaux utilisant des protocoles différents. S
SUNAT : acronyme utilisé pour Seamless Use Through Network Abstraction Technologies. Il s'agit d'un projet ayant pour objectif de faciliter le développement de logiciels dans un environnement de convergence fixe­mobile
SIP: Session Initiation Protocol, protocole standard ouvert de session utilisé dans les télécommunications multimédia (son, image).
SDP: (Session Description Protocol), format de description et d'initialisation des paramètres du flux média. Il est publié par le groupe IETF sous RFC 4566. Le flux média est le contenu qui peut être visualisé ou entendu lors de la transmission.
Quentin Bezsilko 44 16/06/09
Servlet : script écrit en langage Java éxécuté sur le serveur, le plus souvent utilisé pour interroger une base de données relationnelle.
Switch (en français commutateur réseau) : équipement qui relie plusieurs segments (câbles ou fibres) dans un réseau informatique. Il s'agit le plus souvent d'un boîtier disposant de plusieurs (entre 4 et 100) ports Ethernet. Il a donc la même apparence qu'un concentrateur (hub).
T
TCP/IP: (transmission Control Protocol / Internet Protocol ) ensemble des règles de communication sur Internet en se basant sur la notion d'adressage IP.
Tutoriel : Initiation guidée à l'utilisation d'un ensemble de notions ou d'une technique.
Timestamp : désigne en informatique un compteur numérique servant de référence temporelle et représente le nombre de secondes écoulées depuis un instant de référence.
U
UDP:(User Datagram Protocol) un des principaux protocoles de télécommunication utilisés par Internet. Il fait partie de la couche transport de la pile de protocole TCP/IP: dans l'adaptation approximative de cette dernière au modèle OSI, il appartiendrait à la couche 4, comme le protocole TCP.
V
VLAN : acronyme utilisé pour désigner un réseau virtuel (en anglais Virtual LAN) qui correspond à un réseau informatique logique indépendant.
W
Wireshark : logiciel Open Source permettant d'analyser les flux qui circulent dans un réseau informatique. Il offre la possibilité de mettre en place des filtres et d'établir les statistiques qui correspondent à une communication.
X
Y
Z
Quentin Bezsilko 45 16/06/09
BIBLIOGRAPHIE
Le site officiel du projet OpenSIPS : www.opensips.org/
Le site de CounterPath sur lequel nous avons pu trouver le logiciel X­Lite : www.counterpath.com
Le site de Wikipédia pour débuter notre apprentissage des protocoles : www.wikipédia.com
Le site officiel du laboratoire de Java : www.docs.sun.com/
Le site officiel de l'ietf (Internet Engineering Task Force) : www.ietf.org
Le site officiel de Mediaproxy :http://www.mediaproxy.com/
Un site sur le protocole SIP (utile lors de l'installation de Mediaproxy) : http://www.ag­projects.com/
Le site de Wireshark dont le logiciel aura été très utile pour analyser les messages : www.wireshark.org
Le site francophone d'Ubuntu pour l'installation du système d'exploitation utilisé : www.ubuntu.org
Le site de commentsamarche pour ses précieux tutoriels sur les protocoles : www.commentsamarche.net
Le site officiel de la société 3com, créatrice du switch : www.3com.com
Quentin Bezsilko 46 16/06/09
Quentin Bezsilko 47 16/06/09