differenciate new connection and client request, add tcpdump

This commit is contained in:
kinou-p 2022-12-10 00:04:51 +01:00
parent 6cc00ecac4
commit 3a42e864c6
15 changed files with 277 additions and 111 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/12/01 17:27:29 by apommier #+# #+# # # Created: 2022/12/01 17:27:29 by apommier #+# #+# #
# Updated: 2022/12/06 22:07:24 by apommier ### ########.fr # # Updated: 2022/12/09 23:21:35 by apommier ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@ -15,10 +15,13 @@ SRCS := main.cpp\
epoll.cpp\ epoll.cpp\
start_server.cpp\ start_server.cpp\
utils.cpp\ utils.cpp\
client_request.cpp\
new_connection.cpp\
server_loop.cpp server_loop.cpp
CC = c++ CC = c++
#FLAGS = -g -Wall -Wextra -Werror FLAGS = -g
#-Wall -Wextra -Werror
DIR_OBJ := obj DIR_OBJ := obj
DIR_INC = -I ./includes/ DIR_INC = -I ./includes/
DIR_SRCS := ./srcs DIR_SRCS := ./srcs

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:37 by apommier #+# #+# */ /* Created: 2022/12/01 17:27:37 by apommier #+# #+# */
/* Updated: 2022/12/06 22:06:07 by apommier ### ########.fr */ /* Updated: 2022/12/09 23:18:30 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -21,6 +21,17 @@
#include <sys/epoll.h> //epoll ensemble #include <sys/epoll.h> //epoll ensemble
#include <unistd.h> //close() #include <unistd.h> //close()
#define MAX_EVENTS 5
#define READ_SIZE 10
struct fdList
{
int epollFd;
int serverFd;
int userList[MAX_EVENTS];
int nbrUser;
};
/* ************************************************************************** */ /* ************************************************************************** */
/* *********************************UTILS************************************ */ /* *********************************UTILS************************************ */
/* ************************************************************************** */ /* ************************************************************************** */
@ -33,11 +44,18 @@ void close_fd(int fd);
/* ************************************************************************** */ /* ************************************************************************** */
void initialize(char **av); //1st void initialize(char **av); //1st
void start_loop(int epollFd, int oldSock, int newSock); //3rd void start_loop(fdList allFds); //3rd
/* ************************************************************************** */ /* ************************************************************************** */
/* *****************************EPOLL UTILITY******************************** */ /* *****************************EPOLL UTILITY******************************** */
/* ************************************************************************** */ /* ************************************************************************** */
void epoll_add(int epollFd, int fd); void epoll_add(int epollFd, int fd);
int epoll_start(); //2nd int epoll_start(); //2nd
/* ************************************************************************** */
/* *****************************EPOLL UTILITY******************************** */
/* ************************************************************************** */
void new_connection(struct epoll_event newClient);
bool clientRequest(fdList allFds, int newFd);

19
srcs/client_request.cpp Normal file
View File

@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* client_request.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:34:36 by apommier #+# #+# */
/* Updated: 2022/12/09 23:18:46 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
bool clientRequest(fdList allFds, int newFd)
{
std::cout << "client request!" << std::endl;
return (1);
}

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/01 17:27:33 by apommier #+# #+# */ /* Created: 2022/12/01 17:27:33 by apommier #+# #+# */
/* Updated: 2022/12/06 21:50:25 by apommier ### ########.fr */ /* Updated: 2022/12/09 23:46:24 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -16,6 +16,7 @@ int main(int ac, char **av)
{ {
if (!(ac == 3 || ac == 2)) if (!(ac == 3 || ac == 2))
ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>"); ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
std::cout << "============Homemade IRC Server start============" << std::endl;
initialize(av); initialize(av);
return (0); return (0);
} }

View File

@ -1,66 +0,0 @@
// Server side C/C++ program to demonstrate Socket
// programming
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <iostream>
#define PORT 8080
int main(int argc, char const* argv[])
{
int server_fd, new_socket, valread;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[1024] = { 0 };
const char* hello = "Hello from server";
// Creating socket file descriptor
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
// Forcefully attaching socket to the port 8080
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
std::cout << PORT << std::endl;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// Forcefully attaching socket to the port 8080
if (bind(server_fd, (struct sockaddr*)&address,
sizeof(address))
< 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 3) < 0) {
perror("listen");
exit(EXIT_FAILURE);
}
if ((new_socket
= accept(server_fd, (struct sockaddr*)&address,
(socklen_t*)&addrlen))
< 0) {
perror("accept");
exit(EXIT_FAILURE);
}
// valread = read(new_socket, buffer, 1024);
// printf("%s\n", buffer);
// send(new_socket, hello, strlen(hello), 0);
// printf("Hello message sent\n");
// // closing the connected socket
// close(new_socket);
// // closing the listening socket
// shutdown(server_fd, SHUT_RDWR);
return 0;
}

18
srcs/new_connection.cpp Normal file
View File

@ -0,0 +1,18 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* new_connection.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/09 22:26:27 by apommier #+# #+# */
/* Updated: 2022/12/09 22:38:40 by apommier ### ########.fr */
/* */
/* ************************************************************************** */
#include "../includes/ft_irc.hpp"
void new_connection(struct epoll_event newClient)
{
std::cout << "new connection !" << std::endl;
}

View File

@ -6,34 +6,41 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:58:13 by apommier #+# #+# */ /* Created: 2022/12/06 21:58:13 by apommier #+# #+# */
/* Updated: 2022/12/07 01:16:41 by apommier ### ########.fr */ /* Updated: 2022/12/09 23:56:24 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../includes/ft_irc.hpp" #include "../includes/ft_irc.hpp"
#define MAX_EVENTS 5 void start_loop(fdList allFds)
#define READ_SIZE 10
void start_loop(int epollFd, int oldSock, int newSock)
{ {
bool alive = true;
char buffer[1024] = { 0 }; char buffer[1024] = { 0 };
struct epoll_event events[MAX_EVENTS];
int readChar; int readChar;
int eventNbr;
std::cout << "loop start\n"; while (alive)
while (strncmp("/quit", buffer, 5))
{ {
// std::cout << "hehe\n"; // std::cout << "hehe\n";
readChar = read(newSock, buffer, 1024); // readChar = read(allFds.serverFd, buffer, 1024);
buffer[readChar] = '\0'; //recv(int allFds.serverFd, void *buf, size_t len, int flags);
std::cout << "buffer: " << buffer << std::endl; //buffer[readChar] = '\0';
// send(newSock, "message received", 18, 0); std::cout << "serverFd: " << allFds.serverFd << std::endl;
// send(clientFd, "message received", 18, 0);
//event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, 30000); eventNbr = epoll_wait(allFds.epollFd, events, MAX_EVENTS, 5000);
//for (i = 0; i < event_count; i++) std::cout << "eventNbr: " << eventNbr << std::endl;
//{ for (int i = 0; i < eventNbr; i++)
{
//} std::cout << "event[i]'s fd: " << events[i].data.fd << std::endl;
if (events[i].data.fd == allFds.serverFd)
new_connection(events[i]);
else if (!clientRequest(allFds, events[i].data.fd))
alive = false;
//if (strncmp("QUIT", buffer, 4))
// alive = 0;
}
} }
if (!strncmp("/quit", buffer, 5)) if (!strncmp("/quit", buffer, 5))
{ {

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/06 21:44:20 by apommier #+# #+# */ /* Created: 2022/12/06 21:44:20 by apommier #+# #+# */
/* Updated: 2022/12/07 01:25:31 by apommier ### ########.fr */ /* Updated: 2022/12/09 23:57:24 by apommier ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@ -14,17 +14,18 @@
void initialize(char **av) void initialize(char **av)
{ {
int sockFd; //int allFds.serverFd;
int epollFd; //int epollFd;
int newSockFd = 0; //int newSockFd = 0;
int opt = 1; int opt = 1;
struct sockaddr_in addr; struct sockaddr_in addr;
int addrLen = sizeof(addr); int addrLen = sizeof(addr);
fdList allFds;
sockFd = socket(AF_INET, SOCK_STREAM, 0); allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
if (sockFd == -1) if (allFds.serverFd == -1)
ft_error("socket() error"); ft_error("socket() error");
if (setsockopt(sockFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) if (setsockopt(allFds.serverFd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)))
ft_error("setsockopt() error"); ft_error("setsockopt() error");
addr.sin_port = htons(atoi(av[1])); addr.sin_port = htons(atoi(av[1]));
@ -33,26 +34,25 @@ void initialize(char **av)
if (addr.sin_port <= 0) if (addr.sin_port <= 0)
ft_error("wrong format for <port>\nneed to be an positive integer"); ft_error("wrong format for <port>\nneed to be an positive integer");
if (bind(sockFd, (struct sockaddr *)&addr, sizeof(addr)) < 0) if (bind(allFds.serverFd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
ft_error("bind() error"); ft_error("bind() error");
if (listen(sockFd, 100) == -1) if (listen(allFds.serverFd, 100) == -1)
ft_error("listen() error"); ft_error("listen() error");
newSockFd = accept(sockFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
if (newSockFd == -1) // newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
ft_error("accept() error"); // if (newSockFd == -1)
// ft_error("accept() error");
char buffer[1024]; // char buffer[1024];
int nbrRead; // int nbrRead;
while (strncmp("/quit", buffer, 5)) // while (strncmp("/quit", buffer, 5))
{ // {
nbrRead = read() // nbrRead = read()
} // }
epollFd = epoll_start();
epoll_add(epollFd, newSockFd);
start_loop(epollFd, sockFd, newSockFd);
allFds.epollFd = epoll_start();
epoll_add(allFds.epollFd, allFds.serverFd);
start_loop(allFds);
//send(newSockFd, "hello", 5, 0); //send(newSockFd, "hello", 5, 0);
} }

11
tcpdump/Dockerfile Normal file
View File

@ -0,0 +1,11 @@
from debian:11
run apt-get update && apt-get upgrade -y \
&& apt-get install -y openssl vim iproute2 tcpdump inspircd \
&& mkdir /var/run/inspircd
COPY ./irc_conf /etc/inspircd
expose 6667
cmd inspircd --runasroot ; tail -f

View File

@ -0,0 +1,106 @@
# This is just a more or less working example configuration file, please
# customize it for your needs!
#
# Once more: Please see the examples in /usr/share/doc/inspircd/examples/
<server name="irc.local"
description="Local IRC Server"
network="Localnet">
<admin name="Root Penguin"
nick="Nick"
email="root@localhost">
<bind address="0.0.0.0" port="6667" type="clients">
<power diepass="3456" restartpass="7890" pause="2">
<connect allow="*"
timeout="60"
flood="20"
threshold="1"
pingfreq="120"
sendq="262144"
recvq="8192"
localmax="3"
globalmax="3">
<class name="Shutdown"
commands="DIE RESTART REHASH LOADMODULE UNLOADMODULE RELOAD">
<class name="ServerLink"
commands="CONNECT SQUIT RCONNECT MKPASSWD MKSHA256">
<class name="BanControl"
commands="KILL GLINE KLINE ZLINE QLINE ELINE">
<class name="OperChat"
commands="WALLOPS GLOBOPS SETIDLE SPYLIST SPYNAMES">
<class name="HostCloak"
commands="SETHOST SETIDENT SETNAME CHGHOST CHGIDENT">
<type name="NetAdmin"
classes="OperChat BanControl HostCloak Shutdown ServerLink"
host="netadmin.omega.org.za">
<type name="GlobalOp"
classes="OperChat BanControl HostCloak ServerLink"
host="ircop.omega.org.za">
<type name="Helper"
classes="HostCloak"
host="helper.omega.org.za">
<oper name="root"
password="12345"
host="*@localhost"
type="NetAdmin">
<files motd="/etc/inspircd/inspircd.motd"
rules="/etc/inspircd/inspircd.rules">
<channels users="20"
opers="60">
<dns server="127.0.0.1" timeout="5">
<pid file="/var/run/inspircd/inspircd.pid">
<options prefixquit="Quit: "
noservices="no"
qaprefixes="no"
deprotectself="no"
deprotectothers="no"
flatlinks="no"
hideulines="no"
syntaxhints="no"
cyclehosts="yes"
ircumsgprefix="no"
announcets="yes"
disablehmac="no"
hostintopic="yes"
quietbursts="yes"
pingwarning="15"
allowhalfop="yes"
exemptchanops="">
<security hidewhois=""
userstats="Pu"
customversion=""
hidesplits="no"
hidebans="no"
operspywhois="no"
hidemodes="eI"
maxtargets="20">
<performance nouserdns="no"
maxwho="128"
softlimit="1024"
somaxconn="128"
netbuffersize="10240">
<whowas groupsize="10"
maxgroups="100000"
maxkeep="3d">
<timesync enable="no" master="no">
<badnick nick="ChanServ" reason="Reserved For Services">
<badnick nick="NickServ" reason="Reserved For Services">
<badnick nick="OperServ" reason="Reserved For Services">
<badnick nick="MemoServ" reason="Reserved For Services">

View File

@ -0,0 +1,6 @@
+---------------------------------------------------+
| z I R C o n |
+---------------------------------------------------+
Sitio's testing server
GTFO if not invited

11
tcpdump/launch_tcpdump.sh Normal file
View File

@ -0,0 +1,11 @@
#!/bin/bash
IMAGE_NAME="ttt"
CONTAINER_NAME=$IMAGE_NAME
docker build ./ -t $IMAGE_NAME
docker images
docker ps -a
docker run -d -p 6667:6667 --name $CONTAINER_NAME $IMAGE_NAME
docker exec -it $CONTAINER_NAME tcpdump -Aqq port 6667

1
tcpdump/log.txt Normal file
View File

@ -0,0 +1 @@
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

11
tcpdump/main.c Normal file
View File

@ -0,0 +1,11 @@
#include <sys/socket.h>
int main ()
{
ssize_t i = 0;
i = send(2222, "hello", 6, 0);
return (i);
}

20
tcpdump/main.cpp Normal file
View File

@ -0,0 +1,20 @@
#include <vector>
#include <iostream>
#include <string>
void print(std::string c)
{
if (c == "")
std::cout << "NULL" << std::endl;
std::cout << c << std::endl;
}
int main()
{
std::vector<std::string> vec;
vec.insert(vec.begin(), "bonjour");
print(vec[3]);
return 0;
}