From 32d6d9f74c1618a088017155d076518b2aaba46f Mon Sep 17 00:00:00 2001 From: papush! Date: Fri, 25 Oct 2019 23:53:43 +0200 Subject: [PATCH] lol sa coupe je passe ds un tunnel --- partage/Makefile | 20 +++++++- partage/build/ext-in.o | Bin 0 -> 5840 bytes partage/build/ext-out.o | Bin 0 -> 5808 bytes partage/build/extremite.a | Bin 0 -> 9020 bytes partage/build/extremite.o | Bin 0 -> 8864 bytes partage/build/iftun.a | Bin 0 -> 7876 bytes partage/build/iftun.o | Bin 0 -> 7720 bytes partage/build/test-iftun.o | Bin 0 -> 5992 bytes partage/config.sh | 2 +- partage/ext-in | Bin 0 -> 14528 bytes partage/ext-out | Bin 0 -> 14504 bytes partage/src/ext-in.c | 18 +++++++ partage/src/ext-out.c | 18 +++++++ partage/src/extremite.c | 99 +++++++++++++++++++++++++++++++++++++ partage/src/extremite.h | 9 ++++ partage/src/test-iftun.c | 4 +- partage/src/tunalloc.c | 79 ----------------------------- partage/test-iftun | Bin 0 -> 13552 bytes 18 files changed, 167 insertions(+), 82 deletions(-) create mode 100644 partage/build/ext-in.o create mode 100644 partage/build/ext-out.o create mode 100644 partage/build/extremite.a create mode 100644 partage/build/extremite.o create mode 100644 partage/build/iftun.a create mode 100644 partage/build/iftun.o create mode 100644 partage/build/test-iftun.o create mode 100755 partage/ext-in create mode 100755 partage/ext-out create mode 100644 partage/src/ext-in.c create mode 100644 partage/src/ext-out.c create mode 100644 partage/src/extremite.c create mode 100644 partage/src/extremite.h delete mode 100644 partage/src/tunalloc.c create mode 100755 partage/test-iftun diff --git a/partage/Makefile b/partage/Makefile index 89b0f79..080b849 100644 --- a/partage/Makefile +++ b/partage/Makefile @@ -1,11 +1,29 @@ CC := gcc -Wall -Wextra -Wpedantic -Werror -Iinclude -std=c11 -g -all: build test-iftun +all: build test-iftun ext-in ext-out build: -mkdir build +ext-in: build/ext-in.o build/extremite.a + $(CC) $(CFLAGS) $^ -o $@ + +ext-out: build/ext-out.o build/extremite.a + $(CC) $(CFLAGS) $^ -o $@ + +build/ext-in.o: src/ext-in.c src/extremite.h + $(CC) $(CFLAGS) $< -c -o $@ + +build/ext-out.o: src/ext-out.c src/extremite.h + $(CC) $(CFLAGS) $< -c -o $@ + +build/extremite.a: build/extremite.o + ar rcs $@ $< + +build/extremite.o: src/extremite.c src/extremite.h + $(CC) $(CFLAGS) $< -c -o $@ + test-iftun: build/test-iftun.o build/iftun.a $(CC) $(CFLAGS) $^ -o $@ diff --git a/partage/build/ext-in.o b/partage/build/ext-in.o new file mode 100644 index 0000000000000000000000000000000000000000..66ad5b59d640d9443c78fa63765a91ab457acbe7 GIT binary patch literal 5840 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 literal 0 HcmV?d00001 diff --git a/partage/build/ext-out.o b/partage/build/ext-out.o new file mode 100644 index 0000000000000000000000000000000000000000..e61bbd986fca2e878755b33d76205f785c45454c GIT binary patch literal 5808 zcmbtYZEPGz8J@X2+n1buzSy*}n;vDEuHoRL!4O{gT?KPzebMDnQDgKvD9iMFpgohWDL$ z$6il1e_*8Bd7o$AuX$&7cI-ph>o7vw|jAhWC zWyKV(n1?S0&fxpUi9|HkdTus3qQ|z$X90RDq`)b%xQ`?U}^B$<@k(COm6JH~Q1E~`S z2E|wwjZ-Ju5D1sJfMn0lF-OL?@Ui@GE}h?&-@=Fb3R^+(T9(f5%H5W$4#Te7!E(9X zFbRL3JT2pbK%S(?Y(!$-Sz0AiXki0pVE!odU@ zN`&glDMHpG=c873p_M(q@RR#eDM;U}e%Y)=P1AN8%=Fp~(`z;ZJ7h4M@_I)HK0tTokp<}My@^6vR&JE>HsajK0gCBEly1u#gydBPy>`@bnc4LMX8ElJW(F{Gk=MTJ{y7%8fzxvBhEbolAZxR0H6~H9 z4)a{+*R+IRn5diyIK#3ihjR9Es*xK7c4MaqB&Lc*kwx6#OoZ)N4y5Qp>175JvIA?( z=N4A(xM8_#`JvTESHHA_7D(*;SR9shodfZxHMw9 zAYjLXeTt(ZX*sqKTD7(vUuUr`$k1uqt|v^e{1AfOwRi6>rJ49RT``ho;=7Z;i%(AiFTPqE zc#Jp{tB*Rg(L<7#Yp%lM9!t{SaTPvx7K_)_3Oz?1L(Q%a2SXE8OgOH=17kOfr~J_1 ztXD6~c4v&o_=>L*kN1f9s@)sY$1AeZZ^ihb7_U|q{fNs5>Ge~OJpPUoR@ZLD!v|C} ztQ$7PpT-Rf4L_jR5Uzb;K)wk{Xs93GEhWLO`W& z;=ii#W5hqC@wX6eYy4jbe?#N{L4Lla@qZ_NS>x4upVasj(*Lo>r-*++=Zvk`Ka|# zJX};n+o|baPmcCz{3FEg*Z50>@6-4%kpHH}4-p?|yn26*YW!a*?s1JTk)NkEzDoF~ z8vh6K^J|U&BJr$HU3{h zo3VE^{!P+9r}3|oe*An^G7hP4k)F>PveS8kcnm|Ki246I1I#g2JU8?>iw|h(dn=LD zRWkP5;D@)7S@^}mRqo$HC$Z#ussJH4ZFuhIC&9s2xV?I*xi zuQfVX@vlP=YkK_MFs5^;{u{Enpe>fJdn@QA)vrrety6S4!201D>Gk_OaJo;R*h^H9 zKO=}WUH3s4(>YZCJ|+ciTy|?uUH1@-B;{YAi-xkt{5Qc*&mX_Hx=*0k8x;R{2x3jw z#qW4h{8@^x_8G>U8>>Xe=8PmsMD zSN&F%s3NFWc8Y!;1mv_d>7RUzO)Ev}b+^v~pH#m?3H8G>OWCWsqMH8hVWh l>G>z+F4S?eKzo}E@b5?b>p+i>YDw|mrt=5Shj`QD{}*{;Vjlni literal 0 HcmV?d00001 diff --git a/partage/build/extremite.a b/partage/build/extremite.a new file mode 100644 index 0000000000000000000000000000000000000000..15a13a26ba3f5ae89e32c8a434560187d0934f6a GIT binary patch literal 9020 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 literal 0 HcmV?d00001 diff --git a/partage/build/extremite.o b/partage/build/extremite.o new file mode 100644 index 0000000000000000000000000000000000000000..f0d5b50002c0763c55e34512d38f4d8cb83892f3 GIT binary patch literal 8864 zcmd5?eQZ?65#M)b*Y>Jkt%g0@9z9|W_D)w^BwGptiH!*7)+AEma`luQO34>A=hr^&1N>0RkPM;=3;dB zN9T$d%bZ;H+1S_#?0f}HoGOLl60(`dwLLqojislYLXJbHP=dFjXCvnjhWb6KFJOH( z!n-@5yOa&?L)#Uxbn&Xh~CJLTxOy}2Ok?78-q9oKsgseCUP};c3(4efjI_JQE1-SWv&5U z4;1oR2wdlQbZDpgX9eA~b9!`1aJE~@x|6PF*=&UeCG@m^ zFz|!49ZYm5feo=RuY-w{ZCeTN%rjCejKH>J$__E=V;n-6;F(b==2-D|*5@QWiw*c0 zE;AsLA3wa{JQc5jfFz$W0h>M_KLGqi#Yx*^K9h6Yh;RNT>^Dpl6G&YL*C@#$3%4Os z#1WsVR$Rk>t=!1Pw~j!E;LYh%APnv*In3LBUKa7Pn3ofH zS<1_SfuN`>#Yhuob$~(cU1jmXm0*wuRs4OlP3=Pn``E-ofNX+h=@ZbHEc8p#n}I2- zEcvYqJ(Hl#O5VXHo7e)y9w}ZyW0bsg7$81I$@?*s6CJZku3gG@{3kbf$rz64n=Ay4 z9;k~1V;E@M6pWAeOlRfhKLD&iPb*Qyn1UrzrBBqx;h#gR3K?U{QYihyN48dTb}F*I z;cmgrL`QwY&4RlPwfw^eb_sSKcKU}e?-Xp!8E)t!Vrzw=F3~w(s2FI z>Dbn+Ym0Gopn%Pc`kz3ftS>TrBO7E`OBA-EiG#a zz*;Xd{N-h3$Qr;-mfA8)YXuGO7JEm_sW7Uhsu>oLB5e4>6 zDTDZ{VWUmu9>Er#2I`8yO*!?Z8Ovrs!sfvr%r_91?QnjEx-b;4zt?i132Q<&;k*-fgn+RfZ*O-5m$adVR0)X~ z>WB`QVUZaK)*mp;fZ5qO@}&80r`c$J#T*$K_00>IZ zFJIzidNGLP^nMD0Qt=VF9T#C8L?H2lr>4?F#2LN<+bf@}~c1KEZXb$Y8g-Qc+Q3=d#TpL~$3$I=qc_sroM%VGDfX$^*hi$ZsW76fa0ytHjKc3QUOBon~KokUk7OlnR2qF_yD zum+}}F;Q2?+<2@b-jnR^N0-r^UT_;6z-F3tr|ixkFE9`YkGv7Fi*D@UUUL^$-n(JN z{S+9t%hI-+?6j@+V4^GTh&VQ^1d&{(lmGHKY*ZZI63#nx1ikaQ`<()~{O;UKQEIxV!4?^7OcgRIe3FwzJwE+pF!3 zJ6^ogqKUUWz8opW6%R6=OW0?%>iXv)jvE+);^V~aexXYqhP1YD?ODvT)+$ zB&sP9rZ#Tc5WxwdJtV-D;qW@f?hS{R1m~`_+LCcwESs9T`FFHiZ4K$V+Xa9}i9FMd z?Hib}tQL?`dG;A@A2YoP>k8lx7Qi1V zfF}yzT?KF(aLlL7qkQzG3&`&(fRDSRvo{o+8*qX5T8@))KqBd}E-z)fc&TO2EdC{j z7k$k3QoXF#fupxWe#iBu;oT5VB&=SKDPLc7b#bj;u$cX7W4D5TNO+m!YP$wMIv~{| z2!tQi{A-7Ej4h%X<#Ar5{Bi}yx30up1;^L8#CIw7GDY$B1-nbaA+|y`E?mxuw zZx}%!)J2l`T*@!z5J}==v|e#9AR$YloWGryLSDVa=PNkclKb#Z4VU{mqTzlT_dX5( zI`MdKAxS^yl04p9ND?0*JSpHT&VP{y4DTl-Dc?`>avX_&hw#URcvilFl9AEy1;l?_ z!#^SZhZ=r??2l?Vp7lu2iYhy92k|dxcq`dCrQv@e{+AlwMDoAU@JSTcc@2M(@IPsI z71{Z#hTlx`f7kGOlE0$iZxQ})4S$~OjA{4-gcp;ZoG&@AlQsNl;-_l(>tr{m;YZ2- zJPjWtyg|dCCtl8j^k+B8cWLsQY23XUF839F%OFWRe-JGDk%o5@|BQyqd-u48zfE>t z)9^6iZ)*5@!q02?$Hf0j!56~fcK;yZKy7GrieA6J!fj`74tq5^4NKf*z*2l-6 zNYUo!)vp6xw5jGASSH8+1~Lli_rtwlL)Qvfd9e`SkbG zPb#yym0Th9WIas!ISJ7^O8Po3^(6jdXdtG!$&Qi!Iw?rCj95-C{}Kg;-`oi4 literal 0 HcmV?d00001 diff --git a/partage/build/iftun.a b/partage/build/iftun.a new file mode 100644 index 0000000000000000000000000000000000000000..ab666dbd3f7dfeb8af217bf301b04a6efd78cdb0 GIT binary patch literal 7876 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 Bo*V!G literal 0 HcmV?d00001 diff --git a/partage/build/test-iftun.o b/partage/build/test-iftun.o new file mode 100644 index 0000000000000000000000000000000000000000..b3aa4682f126677a570d5522c07e2c8ba71030cd GIT binary patch literal 5992 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 Q`roij=s#j6*q=(b>BhadSq1L*mNVd^2Yy*3JwT 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 bcNP9r-l^vw{l1mzzx_&~|FEsm<_`OBQXR~L literal 0 HcmV?d00001 diff --git a/partage/src/ext-in.c b/partage/src/ext-in.c new file mode 100644 index 0000000..af6e578 --- /dev/null +++ b/partage/src/ext-in.c @@ -0,0 +1,18 @@ +#include "extremite.h" + +#include +#include + + +int main(int argc, char *argv[argc]){ + int port = 123; + if (argc == 3) { + port = atoi(argv[2]); + } + else if (argc != 2) { + fprintf(stderr, "Utilisation : %s adresse [port]\n", argv[0]); + return 1; + } + ext_in(argv[1], port, 0); + return 0; +} diff --git a/partage/src/ext-out.c b/partage/src/ext-out.c new file mode 100644 index 0000000..12a66bc --- /dev/null +++ b/partage/src/ext-out.c @@ -0,0 +1,18 @@ +#include "extremite.h" + +#include +#include + + +int main(int argc, char *argv[argc]) { + int port = 123; + if (argc == 2) { + port = atoi(argv[1]); + } + else if (argc != 1) { + fprintf(stderr, "Utilisation : %s [port]\n", argv[0]); + return 1; + } + ext_out(port); + return 0; +} diff --git a/partage/src/extremite.c b/partage/src/extremite.c new file mode 100644 index 0000000..295ea28 --- /dev/null +++ b/partage/src/extremite.c @@ -0,0 +1,99 @@ +#define _POSIX_C_SOURCE 200112L + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +void ext_out(int port) { + int server = socket(AF_INET6, SOCK_STREAM, 0); + if (server == -1) { + perror("socket"); + exit(1); + } + + struct sockaddr_in6 server_addr = {0}; + server_addr.sin6_family = AF_INET6; + server_addr.sin6_port = htons(port); + server_addr.sin6_addr = in6addr_any; + if (bind(server, (struct sockaddr *) &server_addr, sizeof server_addr) == -1) { + perror("bind"); + exit(1); + } + char server_addr_pretty[INET6_ADDRSTRLEN] = ""; + inet_ntop(AF_INET6, &(server_addr.sin6_addr), server_addr_pretty, sizeof server_addr_pretty); + printf("Écoute sur : %s\n", server_addr_pretty); + + if (listen(server, SOMAXCONN) == -1) { + perror("listen"); + exit(1); + } + + struct sockaddr_in6 client_addr; + socklen_t client_addr_len; + puts("Attente d’un client."); + int client = accept(server, (struct sockaddr *) &client_addr, &client_addr_len); + char client_addr_pretty[INET6_ADDRSTRLEN] = ""; + inet_ntop(AF_INET6, &(client_addr.sin6_addr), client_addr_pretty, sizeof client_addr_pretty); + printf("Client connecté : %s\n", client_addr_pretty); + + char buf[1024]; + while (1) { + ssize_t n = read(client, buf, sizeof buf); + write(1, buf, n); + } + + close(client); + close(server); +} + + +void ext_in(const char addr[], int port, int in) { + int s = socket(AF_INET6, SOCK_STREAM, 0); + if (s == -1) { + perror("socket"); + exit(1); + } + + struct sockaddr_in6 sa = {0}; + sa.sin6_family = AF_INET6; + sa.sin6_port = htons(port); + inet_pton(AF_INET6, addr, &sa.sin6_addr); + + puts("Connexion."); + if (connect(s, (struct sockaddr *) &sa, sizeof sa) == -1) { + perror("connect"); + exit(1); + } + char addr_pretty[INET6_ADDRSTRLEN] = ""; + inet_ntop(AF_INET6, &(sa.sin6_addr), addr_pretty, sizeof addr_pretty); + printf("Connecté à : %s\n", addr_pretty); + + char buf[1024]; + while (1) { + ssize_t n = read(in, buf, sizeof buf); + if (n == -1) { + perror("read"); + exit(1); + } + n = write(s, buf, n); + if (n == -1) { + perror("write"); + exit(1); + } + } + + close(s); +} diff --git a/partage/src/extremite.h b/partage/src/extremite.h new file mode 100644 index 0000000..3ad66dc --- /dev/null +++ b/partage/src/extremite.h @@ -0,0 +1,9 @@ +#ifndef EXTREMITE_H +#define EXTREMITE_H + + +void ext_out(int port); +void ext_in(const char addr[], int port, int in); + + +#endif diff --git a/partage/src/test-iftun.c b/partage/src/test-iftun.c index 3f3ec14..321c500 100644 --- a/partage/src/test-iftun.c +++ b/partage/src/test-iftun.c @@ -9,8 +9,10 @@ int main(int argc, char *argv[argc]) { return 1; } int tun = tun_alloc(argv[1]); - fprintf(stderr, "Configurez l’interface puis appuyez sur une touche.\n"); + fprintf(stderr, "Configurez l’interface puis appuyez sur ... "); + fflush(stderr); getchar(); + fprintf(stderr, "Démarrage."); copy(tun, 1); return 0; } diff --git a/partage/src/tunalloc.c b/partage/src/tunalloc.c deleted file mode 100644 index ba20e2b..0000000 --- a/partage/src/tunalloc.c +++ /dev/null @@ -1,79 +0,0 @@ -#define _POSIX_C_SOURCE 200112L - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - - -void ext_out() { - struct addrinfo hints = { - .ai_family = AF_UNSPEC, - .ai_socktype = SOCK_DGRAM, - .ai_flags = AI_PASSIVE, - .ai_protocol = 0, - .ai_canonname = NULL, - .ai_addr = NULL, - .ai_next = NULL, - }; - - struct addrinfo *results; - int s = getaddrinfo(NULL, "123", &hints, &results); - if (s != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); - exit(1); - } - - struct addrinfo *rp; - int sfd; - for (rp = results; rp != NULL; rp = rp->ai_next) { - sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (sfd == -1) - continue; - if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0) - break; - close(sfd); - } - - if (rp == NULL) { - fprintf(stderr, "Could not bind\n"); - exit(EXIT_FAILURE); - } - freeaddrinfo(results); - - - struct sockaddr_storage peer_addr; - socklen_t peer_addr_len; - char buf[1024]; - while (1) { - peer_addr_len = sizeof (struct sockaddr_storage); - ssize_t n = recvfrom(sfd, buf, sizeof buf, 0, - (struct sockaddr *) &peer_addr, &peer_addr_len); - if (n == -1) { - perror("recvfrom: "); - exit(1); - } - write(1, buf, n); - } -} - - -int main(int argc, char *argv[argc]){ - int tun = tun_alloc(argv[1]); - /* printf("Configure %s puis appuie sur un touche…\n", argv[1]); */ - /* getchar(); */ - /* copy(tun, 1); */ - /* ext_out(); */ - return 0; -} diff --git a/partage/test-iftun b/partage/test-iftun new file mode 100755 index 0000000000000000000000000000000000000000..e9234a684980a6ed9a81c10406f1e7e797e6a108 GIT binary patch literal 13552 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 a#ZSkbe*STOt5yHm#g0DT`MOhe{r?NY$WICY literal 0 HcmV?d00001