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> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# 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\
start_server.cpp\
utils.cpp\
client_request.cpp\
new_connection.cpp\
server_loop.cpp
CC = c++
#FLAGS = -g -Wall -Wextra -Werror
FLAGS = -g
#-Wall -Wextra -Werror
DIR_OBJ := obj
DIR_INC = -I ./includes/
DIR_SRCS := ./srcs

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <unistd.h> //close()
#define MAX_EVENTS 5
#define READ_SIZE 10
struct fdList
{
int epollFd;
int serverFd;
int userList[MAX_EVENTS];
int nbrUser;
};
/* ************************************************************************** */
/* *********************************UTILS************************************ */
/* ************************************************************************** */
@ -33,7 +44,7 @@ void close_fd(int fd);
/* ************************************************************************** */
void initialize(char **av); //1st
void start_loop(int epollFd, int oldSock, int newSock); //3rd
void start_loop(fdList allFds); //3rd
/* ************************************************************************** */
/* *****************************EPOLL UTILITY******************************** */
@ -41,3 +52,10 @@ void start_loop(int epollFd, int oldSock, int newSock); //3rd
void epoll_add(int epollFd, int fd);
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> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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))
ft_error("wrong number of arguments\nFORMAT: ./ircserv <port> <password>");
std::cout << "============Homemade IRC Server start============" << std::endl;
initialize(av);
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> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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"
#define MAX_EVENTS 5
#define READ_SIZE 10
void start_loop(int epollFd, int oldSock, int newSock)
void start_loop(fdList allFds)
{
bool alive = true;
char buffer[1024] = { 0 };
struct epoll_event events[MAX_EVENTS];
int readChar;
int eventNbr;
std::cout << "loop start\n";
while (strncmp("/quit", buffer, 5))
while (alive)
{
// std::cout << "hehe\n";
readChar = read(newSock, buffer, 1024);
buffer[readChar] = '\0';
std::cout << "buffer: " << buffer << std::endl;
// send(newSock, "message received", 18, 0);
// readChar = read(allFds.serverFd, buffer, 1024);
//recv(int allFds.serverFd, void *buf, size_t len, int flags);
//buffer[readChar] = '\0';
std::cout << "serverFd: " << allFds.serverFd << std::endl;
// send(clientFd, "message received", 18, 0);
//event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, 30000);
//for (i = 0; i < event_count; i++)
//{
//}
eventNbr = epoll_wait(allFds.epollFd, events, MAX_EVENTS, 5000);
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))
{

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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)
{
int sockFd;
int epollFd;
int newSockFd = 0;
//int allFds.serverFd;
//int epollFd;
//int newSockFd = 0;
int opt = 1;
struct sockaddr_in addr;
int addrLen = sizeof(addr);
fdList allFds;
sockFd = socket(AF_INET, SOCK_STREAM, 0);
if (sockFd == -1)
allFds.serverFd = socket(AF_INET, SOCK_STREAM, 0);
if (allFds.serverFd == -1)
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");
addr.sin_port = htons(atoi(av[1]));
@ -33,26 +34,25 @@ void initialize(char **av)
if (addr.sin_port <= 0)
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");
if (listen(sockFd, 100) == -1)
if (listen(allFds.serverFd, 100) == -1)
ft_error("listen() error");
newSockFd = accept(sockFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
if (newSockFd == -1)
ft_error("accept() error");
char buffer[1024];
int nbrRead;
while (strncmp("/quit", buffer, 5))
{
nbrRead = read()
}
// newSockFd = accept(allFds.serverFd, (struct sockaddr *)&addr, (socklen_t*)&addrLen);
// if (newSockFd == -1)
// ft_error("accept() error");
// char buffer[1024];
// int nbrRead;
// while (strncmp("/quit", buffer, 5))
// {
// 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);
}

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;
}