From 9fe033ea88c2f705ec18c232873d056e0c229d72 Mon Sep 17 00:00:00 2001 From: Gaspard Coulet Date: Wed, 28 Apr 2021 23:05:53 +0200 Subject: Initial commit --- sem_6/HLIN611/.gitkeep | 0 sem_6/HLIN611/Chap_4/TD | 29 +++++++++++++++++ sem_6/HLIN611/TCP/a.out | Bin 0 -> 9149 bytes sem_6/HLIN611/TCP/prog.c | 61 ++++++++++++++++++++++++++++++++++ sem_6/HLIN611/TD/TCP.txt | 19 +++++++++++ sem_6/HLIN611/TP_TCP_P2/prog.c | 51 +++++++++++++++++++++++++++++ sem_6/HLIN611/a.out | Bin 0 -> 9053 bytes sem_6/HLIN611/td1.md | 14 ++++++++ sem_6/HLIN611/tp1.c | 72 +++++++++++++++++++++++++++++++++++++++++ 9 files changed, 246 insertions(+) create mode 100644 sem_6/HLIN611/.gitkeep create mode 100644 sem_6/HLIN611/Chap_4/TD create mode 100644 sem_6/HLIN611/TCP/a.out create mode 100644 sem_6/HLIN611/TCP/prog.c create mode 100644 sem_6/HLIN611/TD/TCP.txt create mode 100644 sem_6/HLIN611/TP_TCP_P2/prog.c create mode 100644 sem_6/HLIN611/a.out create mode 100644 sem_6/HLIN611/td1.md create mode 100644 sem_6/HLIN611/tp1.c (limited to 'sem_6/HLIN611') diff --git a/sem_6/HLIN611/.gitkeep b/sem_6/HLIN611/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sem_6/HLIN611/Chap_4/TD b/sem_6/HLIN611/Chap_4/TD new file mode 100644 index 0000000..ae2f148 --- /dev/null +++ b/sem_6/HLIN611/Chap_4/TD @@ -0,0 +1,29 @@ +Exo 1 : +194.195.196.197/24 +194.195.196.206/24 +130.160.21.22/24 +130.160.140.22/24 +I) Classe C pour 1 et 2, Classe B pour 3 et 4 ( mais masque incorrect, devrait être /16) +1) 194.195.196.1 to 194.195.196.254 +2) 194.195.196.1 to 194.195.196.254 +3) 130.160.21.1 to 130.160.21.254 +4) 130.160.140.1 to 130.160.140.254 + +II) +1) 11000010.11000011.11000100.11000101 +application du masque : +OU 11111111.11111111.11111111.00000000 + =11000010.11000011.11000100.00000000 +2) 11000010.11000011.11000100.11000101 +3) 10000010.10100000.00010101.00010110 +4) 10000010.10100000.10001100.00010110 + +On change de reseau des lors qu'un bit commun avec le masque change d'une adresse à l'autre. + +III) +Pour que H1 et H2 ne soient pas dans le meme reseaux : il faut un masque genre +255.255.255.248 + +Exo 2 : +I) +2) diff --git a/sem_6/HLIN611/TCP/a.out b/sem_6/HLIN611/TCP/a.out new file mode 100644 index 0000000..6d92efd Binary files /dev/null and b/sem_6/HLIN611/TCP/a.out differ diff --git a/sem_6/HLIN611/TCP/prog.c b/sem_6/HLIN611/TCP/prog.c new file mode 100644 index 0000000..046d2f1 --- /dev/null +++ b/sem_6/HLIN611/TCP/prog.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#define closesocket(s) close(s) + +typedef int SOCKET; +typedef struct sockaddr_in SOCKADDR_IN; +typedef struct sockaddr SOCKADDR; +typedef struct in_addr IN_ADDR; +int main (int argc, char ** argv){ + if (argc != 2){ + printf("Syntaxe : %s message\n",argv[0]); + return 1; + } + + //init du socket local + struct sockaddr_in sin= { 0 }; + int sock = socket(PF_INET, SOCK_STREAM, 0); + if(sock == -1) + { + perror("socket()"); + exit(errno); + } + + // inet_pton(AF_INET,"162.38.81.131",&(sin.sin_addr)); + // //recherche de la cible + // const char * hostname = "s1.fdsetu.infra.umontpellier.fr"; + // hostinfo=gethostbyname(hostname); + // if (hostinfo == NULL) /* l'hôte n'existe pas */ + // { + // fprintf (stderr, "Unknown host %s.\n", hostname); + // exit(EXIT_FAILURE); + // } +if (inet_pton(AF_INET,"162.38.81.131",&(sin.sin_addr))==-1){ + perror("inet_pton()"); + exit(errno); +} +// sin.sin_addr = *(IN_ADDR *) hostinfo->h_addr; +sin.sin_port = htons(53325); +sin.sin_family = AF_INET; +if(connect(sock,(SOCKADDR *) &sin, sizeof(sin)) == -1) +{ + perror("connect()"); + exit(errno); +} + +char buffer[1024]; +strcpy(buffer,argv[2]); +if(send(sock, buffer, strlen(buffer), 0) < 0) +{ + perror("send()"); + exit(errno); +} + + return 0; +} diff --git a/sem_6/HLIN611/TD/TCP.txt b/sem_6/HLIN611/TD/TCP.txt new file mode 100644 index 0000000..c3065a9 --- /dev/null +++ b/sem_6/HLIN611/TD/TCP.txt @@ -0,0 +1,19 @@ +Exercice 1 : +1) Non +2) Non +3) Non + +Exercice 2 : +1) Soit p1 et p2 deux paquets tcp, si p1 passe par r1 et p2 par r2, et que r1 est moins efficace que r2, alors p2 arrivera avant p1 +Si p1 est envoyé, et p2 l'est ensuite, si p1 est perdu en route, alors il sera renvoyé au bout de x temps, car non recu alors p1 arrivera après p2 + +2) Dans le cas d'une connection p2p sur un même reseau local, les paquets arriveront dans l'ordre où ils ont étés envoyés. + +3) Pour la 1, meme reponse, pour la 2, ca depends + +Exercice 3 : +1 ) Elle est envisageable mais non indispensable +2) On attends l'accusé de reception avant de renvoyer un autre message, ce n'est pas optimal +3 ) Si l'accusé de reception tarde à arriver, soit je retransmet le message, soit je redemande un accusé de reception soit je considère que la connection est morte +4.. +5) Il faut identifier chaque paquet individuellement diff --git a/sem_6/HLIN611/TP_TCP_P2/prog.c b/sem_6/HLIN611/TP_TCP_P2/prog.c new file mode 100644 index 0000000..0575631 --- /dev/null +++ b/sem_6/HLIN611/TP_TCP_P2/prog.c @@ -0,0 +1,51 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int main (int argc, char ** argv){ + if (argc != 4){ + printf("Nombre de paramètre incorrect : format : \n %s adresse port fichier",argv[0]) + } + int Socket_envoi= socket(PF_INET,SOCK_STREAM,0); + FILE fichier = fopen(argv[3],"r"); + struct sockaddr_in addresse; + printf("Fichier ouvert\n"); + char buf; + if (inet_pton(AF_INET,argv[1],&(adresse.sin_addr))==-1){ + perror("inet_pton()"); + exit(errno); + } + adresse.sin_port = htons(atoi(argv[2])); + adresse.sin_family = AF_INET; + if(connect(Socket_envoi,(SOCKADDR *) &adresse, sizeof(adresse)) == -1) + { + perror("connect()"); + exit(errno); + } + char tableau[1000]; + int i =0; + if(send(Socket_envoi, argv[3], strlen(argv[3]), 0) < 0) + { + perror("send()"); + exit(errno); + } + while (buf = getc(fichier)!= EOF){ + tableau[i]=buf; + i++; + if ( i = 999){ + if(send(Socket_envoi, tableau, strlen(tableau), 0) < 0) + { + perror("send()"); + exit(errno); + } + i = 0; + } + } + + return 0; +} diff --git a/sem_6/HLIN611/a.out b/sem_6/HLIN611/a.out new file mode 100644 index 0000000..94dba0e Binary files /dev/null and b/sem_6/HLIN611/a.out differ diff --git a/sem_6/HLIN611/td1.md b/sem_6/HLIN611/td1.md new file mode 100644 index 0000000..87b2f57 --- /dev/null +++ b/sem_6/HLIN611/td1.md @@ -0,0 +1,14 @@ +# TD 1 : + +Exercice 1 : +a) 33 554 432 bits pour 1 image, 335 544 320 bits pour 10. +b) A 55,6Kbits/s, +Soit 100 minutes +A 1Mbits/s : 5 minutes +A 10Mb/s : 33 s +A 100Mb/s : 3 s + + +``` + +``` \ No newline at end of file diff --git a/sem_6/HLIN611/tp1.c b/sem_6/HLIN611/tp1.c new file mode 100644 index 0000000..7ff5a2b --- /dev/null +++ b/sem_6/HLIN611/tp1.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int main (int argc, char ** argv){ + if (argc != 2){ + printf("Syntaxe : %s nom\n",argv[0]); + return 1; + } + struct addrinfo hints; + struct addrinfo *result, *rp; + int s; + char addrstr[64]; + char ip[64]; + char canonname[256]; + memset(&canonname, 0, 256*sizeof(char)); + memset(&ip, 0, 64*sizeof(char)); + memset(&addrstr,0,64*sizeof(char) ); + hints.ai_family=AF_UNSPEC; + hints.ai_socktype=0; + hints.ai_flags = AI_CANONNAME; + struct addrinfo * p ; + s= getaddrinfo(argv[1],NULL,&hints,&result); + if (s !=0) { + printf("error in getaddrinfo : %s\n", gai_strerror(s)); + return 1; + } + strcpy(canonname, result->ai_canonname); + printf("%s\n",canonname); + int error; + char hostname[NI_MAXHOST] = ""; + char oldhostname[NI_MAXHOST]="uesh"; + for (p = result; p != NULL; p = p->ai_next){ + + error = getnameinfo(p->ai_addr, p->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0); + if (error != 0) + { + printf("error in getnameinfo: %s\n", gai_strerror(error)); + return 1; + } + if (strcmp(hostname,"")!=0 && strcmp(hostname,oldhostname)!=0){ + printf("hostname : %s\n", hostname); + strcpy(oldhostname,hostname); + } + void * ptr; + switch(p->ai_family){ + case AF_INET: + ptr = &((struct sockaddr_in * ) p->ai_addr)->sin_addr; + break; + case AF_INET6: + ptr = &((struct sockaddr_in6 * ) p->ai_addr)->sin6_addr; + break; + } + inet_ntop (p->ai_addr->sa_family,ptr, addrstr, 64 ); + char type[100]; + switch (p->ai_socktype){ + case (SOCK_STREAM): + strcpy(type,"STREAM"); + break; + case (SOCK_DGRAM): + strcpy(type,"DGRAM"); + break; + } + printf("IP : %s type : %s\n",addrstr,type); + } + return 0; +} -- cgit v1.2.3