diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnclient.c b/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnclient.c new file mode 100644 index 0000000..79b9442 --- /dev/null +++ b/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnclient.c @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define BUFF_SIZE 2000 +#define PORT_NUMBER 55555 +#define SERVER_IP "127.0.0.1" +struct sockaddr_in peerAddr; + +int createTunDevice() { + int tunfd; + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + + ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + + tunfd = open("/dev/net/tun", O_RDWR); + ioctl(tunfd, TUNSETIFF, &ifr); + + return tunfd; +} + +int connectToUDPServer(){ + int sockfd; + char *hello="Hello"; + + memset(&peerAddr, 0, sizeof(peerAddr)); + peerAddr.sin_family = AF_INET; + peerAddr.sin_port = htons(PORT_NUMBER); + peerAddr.sin_addr.s_addr = inet_addr(SERVER_IP); + + sockfd = socket(AF_INET, SOCK_DGRAM, 0); + + // Send a hello message to "connect" with the VPN server + sendto(sockfd, hello, strlen(hello), 0, + (struct sockaddr *) &peerAddr, sizeof(peerAddr)); + + return sockfd; +} + + + +void tunSelected(int tunfd, int sockfd){ + int len; + char buff[BUFF_SIZE]; + + printf("Got a packet from TUN\n"); + + bzero(buff, BUFF_SIZE); + len = read(tunfd, buff, BUFF_SIZE); + sendto(sockfd, buff, len, 0, (struct sockaddr *) &peerAddr, + sizeof(peerAddr)); +} + +void socketSelected (int tunfd, int sockfd){ + int len; + char buff[BUFF_SIZE]; + + printf("Got a packet from the tunnel\n"); + + bzero(buff, BUFF_SIZE); + len = recvfrom(sockfd, buff, BUFF_SIZE, 0, NULL, NULL); + write(tunfd, buff, len); + +} +int main (int argc, char * argv[]) { + int tunfd, sockfd; + + tunfd = createTunDevice(); + sockfd = connectToUDPServer(); + + // Enter the main loop + while (1) { + fd_set readFDSet; + + FD_ZERO(&readFDSet); + FD_SET(sockfd, &readFDSet); + FD_SET(tunfd, &readFDSet); + select(FD_SETSIZE, &readFDSet, NULL, NULL, NULL); + + if (FD_ISSET(tunfd, &readFDSet)) tunSelected(tunfd, sockfd); + if (FD_ISSET(sockfd, &readFDSet)) socketSelected(tunfd, sockfd); + } +} + diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnserver.c b/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnserver.c new file mode 100644 index 0000000..6bbc91c --- /dev/null +++ b/Optional Lab 2 - Bypassing Firewall using VPN/Code/vpnserver.c @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define PORT_NUMBER 55555 +#define BUFF_SIZE 2000 + +struct sockaddr_in peerAddr; + +int createTunDevice() { + int tunfd; + struct ifreq ifr; + memset(&ifr, 0, sizeof(ifr)); + + ifr.ifr_flags = IFF_TUN | IFF_NO_PI; + + tunfd = open("/dev/net/tun", O_RDWR); + ioctl(tunfd, TUNSETIFF, &ifr); + + return tunfd; +} + +int initUDPServer() { + int sockfd; + struct sockaddr_in server; + char buff[100]; + + memset(&server, 0, sizeof(server)); + server.sin_family = AF_INET; + server.sin_addr.s_addr = htonl(INADDR_ANY); + server.sin_port = htons(PORT_NUMBER); + + sockfd = socket(AF_INET, SOCK_DGRAM, 0); + bind(sockfd, (struct sockaddr*) &server, sizeof(server)); + + // Wait for the VPN client to "connect". + bzero(buff, 100); + int peerAddrLen = sizeof(struct sockaddr_in); + int len = recvfrom(sockfd, buff, 100, 0, + (struct sockaddr *) &peerAddr, &peerAddrLen); + + printf("Connected with the client: %s\n", buff); + return sockfd; +} + +void tunSelected(int tunfd, int sockfd){ + int len; + char buff[BUFF_SIZE]; + + printf("Got a packet from TUN\n"); + + bzero(buff, BUFF_SIZE); + len = read(tunfd, buff, BUFF_SIZE); + sendto(sockfd, buff, len, 0, (struct sockaddr *) &peerAddr, + sizeof(peerAddr)); +} + +void socketSelected (int tunfd, int sockfd){ + int len; + char buff[BUFF_SIZE]; + + printf("Got a packet from the tunnel\n"); + + bzero(buff, BUFF_SIZE); + len = recvfrom(sockfd, buff, BUFF_SIZE, 0, NULL, NULL); + write(tunfd, buff, len); + +} +int main (int argc, char * argv[]) { + int tunfd, sockfd; + + tunfd = createTunDevice(); + sockfd = initUDPServer(); + + // Enter the main loop + while (1) { + fd_set readFDSet; + + FD_ZERO(&readFDSet); + FD_SET(sockfd, &readFDSet); + FD_SET(tunfd, &readFDSet); + select(FD_SETSIZE, &readFDSet, NULL, NULL, NULL); + + if (FD_ISSET(tunfd, &readFDSet)) tunSelected(tunfd, sockfd); + if (FD_ISSET(sockfd, &readFDSet)) socketSelected(tunfd, sockfd); + } +} + diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/LAB Setup.txt b/Optional Lab 2 - Bypassing Firewall using VPN/LAB Setup.txt new file mode 100644 index 0000000..c3325a2 --- /dev/null +++ b/Optional Lab 2 - Bypassing Firewall using VPN/LAB Setup.txt @@ -0,0 +1,10 @@ +This lab requires SEED LAB 16 as the docker container setup was not working. + +Provided below the link to Seed lab 16 : + +https://seedsecuritylabs.org/lab_env.html + +(OR) + +google drive link -- https://drive.google.com/file/d/12l8OO3PXHjUsf9vfjkAf7-I6bsixvMUa/view + \ No newline at end of file diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/Optinal lab 2 report.pdf b/Optional Lab 2 - Bypassing Firewall using VPN/Optinal lab 2 report.pdf new file mode 100644 index 0000000..6c14c09 Binary files /dev/null and b/Optional Lab 2 - Bypassing Firewall using VPN/Optinal lab 2 report.pdf differ diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall Lab Manual.pdf b/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall Lab Manual.pdf new file mode 100644 index 0000000..8cf1af4 Binary files /dev/null and b/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall Lab Manual.pdf differ diff --git a/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall.docx b/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall.docx new file mode 100644 index 0000000..74eedcf Binary files /dev/null and b/Optional Lab 2 - Bypassing Firewall using VPN/VPN Bypassing Firewall.docx differ