This repository has been archived on 2019-11-14. You can view files and clone it, but cannot push or open issues or pull requests.
rip-vm2/partage/src/extremite.c

100 lines
2.3 KiB
C
Raw Normal View History

2019-10-25 23:53:43 +02:00
#define _POSIX_C_SOURCE 200112L
#include <arpa/inet.h>
#include <fcntl.h>
#include <linux/if.h>
#include <linux/if_tun.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
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 dun 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);
}