Skip to content

Commit

Permalink
new dns resolution with packet + update README.md
Browse files Browse the repository at this point in the history
- README.md:
  - update available part
  - add Implemented RFC section
- libft_define.h:
  - A_SEC = 1 000 000
- add libft_network.h, helping unifying the network part
- add DNS header and protocol
  - ft_htoi4 use socket to send a DNS request packet, parse the result
  to get an ip without leaking
- actions, add list for test with sudo needed
  • Loading branch information
Pixailz committed May 26, 2024
1 parent 58ecb7f commit bd40868
Show file tree
Hide file tree
Showing 49 changed files with 949 additions and 100 deletions.
9 changes: 7 additions & 2 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,13 @@ jobs:
if: ${{ inputs.is_called }}
run: git submodule update --remote --recursive

- name: 🔧 launch ${{ matrix.test_src }}
run: CI_TARGET=${{ matrix.test_src }} make ci-run
- name: 🔧 Launch, with sudo, ${{ matrix.test_src }}
if: contains(fromJson('["dns.c"]'), matrix.test_src)
run: sudo make CI_TARGET=${{ matrix.test_src }} ci-run

- name: 🔧 Launch ${{ matrix.test_src }}
if: ${{ !contains(fromJson('["dns.c"]'), matrix.test_src) }}
run: make CI_TARGET=${{ matrix.test_src }} ci-run

norminette:
runs-on: ubuntu-latest
Expand Down
24 changes: 17 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,24 @@

1. improve ft_printf
1. finish flags and padding for all types
1. implement size ...
1. error
1. implement singleton, utils like perror etc ..
1. implement errno
1. doc
1. update usage / help

## USAGE
## Implemented RFC

1. Internet Protocol ([RFC791](https://datatracker.ietf.org/doc/html/rfc791))
- t_iphdr
1. Internet Control Message Protocol ([RFC792](https://datatracker.ietf.org/doc/html/rfc792))
- t_icmphdr_echo
- t_icmphdr_time_exceed
1. User Datagram Protocol ([RFC768](https://datatracker.ietf.org/doc/html/rfc768))
- t_udphdr
1. Domain Names ([RFC1035](https://datatracker.ietf.org/doc/html/rfc1035))
- t_dnshdr

## Usage

```bash
make clean
Expand All @@ -36,7 +47,6 @@ make <part1|part2 ... partN>
- random
- linux
- parsing
- *error
- *unit_test
-
> part marked with a `*` are WIP
- network
- ipv4
- packet
5 changes: 2 additions & 3 deletions inc/libft.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/22 13:16:35 by brda-sil #+# #+# */
/* Updated: 2024/05/11 19:34:38 by brda-sil ### ########.fr */
/* Updated: 2024/05/26 02:02:21 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -29,8 +29,7 @@
# include "libft_random.h"
# include "libft_linux.h"
# include "libft_error.h"
# include "libft_network/ipv4.h"
# include "libft_network/packet.h"
# include "libft_network.h"
# include "libft_unit_test.h"
# include "libft_hashtable.h"

Expand Down
13 changes: 11 additions & 2 deletions inc/libft_define.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/08/18 19:13:22 by brda-sil #+# #+# */
/* Updated: 2024/02/24 00:50:43 by brda-sil ### ########.fr */
/* Updated: 2024/05/26 02:08:05 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -17,7 +17,9 @@
/* CONFIG */
/* ###### */

# define FT_NULL ((void *)0)
# define FT_NULL ((void *)0)

# define A_SEC 1000000

/* ########################################################################## */

Expand Down Expand Up @@ -119,6 +121,13 @@ typedef enum e_bit
BIT_40 = 1ULL << 63,
} t_bit;

// A PACKET
typedef struct __attribute__((__packed__)) s_packet
{
unsigned char data[0xffff];

} t_packet;

/* ########################################################################## */

#endif /* LIBFT_DEFINE_H */
19 changes: 19 additions & 0 deletions inc/libft_network.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* libft_network.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/11/09 00:48:48 by brda-sil #+# #+# */
/* Updated: 2024/05/26 01:22:11 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

#ifndef LIBFT_NETWORK_H
# define LIBFT_NETWORK_H

# include "libft_network/ipv4.h"
# include "libft_network/packet.h"

#endif // LIBFT_NETWORK_H
55 changes: 48 additions & 7 deletions inc/libft_network/ipv4.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
/* By: brda-sil <brda-sil@students.42angouleme +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/11/09 00:48:48 by brda-sil #+# #+# */
/* Updated: 2024/03/31 23:22:25 by brda-sil ### ########.fr */
/* Updated: 2024/05/26 02:02:31 by brda-sil ### ########.fr */
/* */
/* ************************************************************************** */

#ifndef IPV4_H
# define IPV4_H
#ifndef LIBFT_NETWORK_IPV4_H
# define LIBFT_NETWORK_IPV4_H

/* ########################################################################## */
/* REQUIREMENTS */
/* ############ */

# include <netdb.h>
/*
getaddrinfo()
freeaddrinfo()
* getaddrinfo()
* freeaddrinfo()
*/

# include "libft_define.h"
Expand All @@ -29,14 +29,37 @@
# include "libft_check.h"
# include "libft_string.h"
# include "libft_memory.h"
# include "libft_network.h"

/* ########################################################################## */

/* ########################################################################## */
/* CONFIG */
/* ###### */

# define HTOI4_USE_EPOLL 0
# define HTOI4_USE_SOCKET 1

# define DNS_TYPE_A 1
// # define DNS_TYPE_NS 2
# define DNS_TYPE_CNAME 5
// # define DNS_TYPE_SOA 6
// # define DNS_TYPE_PTR 12
// # define DNS_TYPE_MX 15
// # define DNS_TYPE_TXT 16
// # define DNS_TYPE_AAAA 28
// # define DNS_TYPE_SRV 33
// # define DNS_TYPE_ANY 255

# define DNS_CLASS_IN 1
// # define DNS_CLASS_CS 2
// # define DNS_CLASS_CH 3
// # define DNS_CLASS_HS 4

# define DNS_ADDR 0x08080808
# define DNS_DST_PORT 53
# define DNS_SRC_PORT 0x1234
# define DNS_TTL 64
# define DNS_TIMEOUT 500000

# define CLASS_A_MIN 0b00000000
# define CLASS_A_MAX 0b01111110
Expand Down Expand Up @@ -110,6 +133,24 @@ void ft_ntop(t_bin pf, t_int4 ip, char *ip_str);
t_size ft_putip_fd(t_int4 n, int fd);
char *ft_getip_str(t_int4 n);

// network/ipv4/htoi4_socket/get_a_record.c
t_int4 ft_htoi4_get_a_record(t_packet *pkt);

// network/ipv4/htoi4_socket/init_packet.c
t_packet ft_htoi4_init_packet(char *domain);

// network/ipv4/htoi4_socket/init_socket.c
int ft_htoi4_init_socket(void);

// network/ipv4/htoi4_socket/main.c
t_int4 ft_htoi4_socket(char *domain);

// network/ipv4/htoi4_socket/recv_packet.c
t_int4 ft_htoi4_recv_packet(int sock);

// network/ipv4/htoi4_socket/send_packet.c
int ft_htoi4_send_packet(int socket, t_packet pkt);

/* ########################################################################## */

#endif /* IPV4_H */
#endif /* LIBFT_NETWORK_IPV4_H */
Loading

0 comments on commit bd40868

Please sign in to comment.