add icmp_echo packet preparation

This commit is contained in:
2025-04-24 22:45:48 +02:00
parent c508059e5f
commit 01df0d6cb0
3 changed files with 108 additions and 4 deletions

View File

@ -1,7 +1,87 @@
#include "includes/ft_ping.h"
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ping.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: tomoron <tomoron@student.42angouleme.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/04/24 00:03:56 by tomoron #+# #+# */
/* Updated: 2025/04/24 22:45:16 by tomoron ### ########.fr */
/* */
/* ************************************************************************** */
int main(void)
#include "includes/ft_ping.h"
#include <fcntl.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <byteswap.h>
void set_packet_data(uint8_t *packet_data)
{
printf("AAAAAAAAAAAAAAAAAAA");
int i;
i = 0;
while(i < PACKET_DATA_LENGTH)
{
packet_data[i] = i;
i++;
}
}
uint16_t calc_checksum(void *ptr, size_t len)
{
uint32_t res;
uint16_t *data;
data = ptr;
res = 0;
while (len > 1)
{
res += *data;
data++;
len -= 2;
}
if (len)
res += *(uint8_t *)data;
while (res >> 16) {
res = (res & 0xFFFF) + (res >> 16);
}
return(htons(~res));
}
t_icmp_echo prepare_icmp_echo(uint16_t sequence, uint16_t identifier)
{
t_icmp_echo packet;
packet.type = 8;
packet.code = 0;
packet.identifier = htons(identifier);
packet.sequence = htons(sequence);
set_packet_data(packet.data);
gettimeofday(&packet.time, 0);
packet.time.tv_sec = bswap_64(packet.time.tv_sec);
packet.time.tv_usec = bswap_64(packet.time.tv_usec);
packet.checksum = 0;
packet.checksum = calc_checksum(&packet, sizeof(t_icmp_echo));
return(packet);
}
int main(int argc, char **argv)
{
(void)argc;
(void)argv;
t_icmp_echo packet;
int fd;
packet = prepare_icmp_echo(0, 1);
fd = open("test", O_WRONLY | O_CREAT, 0700);
write(fd, &packet, sizeof(t_icmp_echo));
printf("checksum : %x\n", packet.checksum);
return(0);
}