61 lines
1.1 KiB
C
61 lines
1.1 KiB
C
#pragma once
|
|
#include <stdint.h>
|
|
|
|
struct ipv4_packet {
|
|
uint8_t version_ihl;
|
|
uint8_t dscp_ecn;
|
|
uint16_t length;
|
|
uint16_t ident;
|
|
uint16_t flags_fragment;
|
|
uint8_t ttl;
|
|
uint8_t protocol;
|
|
uint16_t checksum;
|
|
uint32_t source;
|
|
uint32_t destination;
|
|
uint8_t payload[];
|
|
} __attribute__ ((packed)) __attribute__((aligned(2)));
|
|
|
|
struct icmp_header {
|
|
uint8_t type;
|
|
uint8_t code;
|
|
uint16_t csum;
|
|
uint16_t rest_of_header;
|
|
uint8_t data[];
|
|
} __attribute__((packed)) __attribute__((aligned(2)));
|
|
|
|
struct udp_packet {
|
|
uint16_t source_port;
|
|
uint16_t destination_port;
|
|
uint16_t length;
|
|
uint16_t checksum;
|
|
uint8_t payload[];
|
|
} __attribute__ ((packed)) __attribute__((aligned(2)));
|
|
|
|
struct tcp_header {
|
|
uint16_t source_port;
|
|
uint16_t destination_port;
|
|
|
|
uint32_t seq_number;
|
|
uint32_t ack_number;
|
|
|
|
uint16_t flags;
|
|
uint16_t window_size;
|
|
uint16_t checksum;
|
|
uint16_t urgent;
|
|
|
|
uint8_t payload[];
|
|
} __attribute__((packed)) __attribute__((aligned(2)));
|
|
|
|
struct tcp_check_header {
|
|
uint32_t source;
|
|
uint32_t destination;
|
|
uint8_t zeros;
|
|
uint8_t protocol;
|
|
uint16_t tcp_len;
|
|
uint8_t tcp_header[];
|
|
};
|
|
|
|
#define IPV4_PROT_UDP 17
|
|
#define IPV4_PROT_TCP 6
|
|
|