92 lines
1.9 KiB
C++
92 lines
1.9 KiB
C++
#ifndef IP_HPP
|
|
#define IP_HPP
|
|
#include <string>
|
|
#include <netinet/ip.h>
|
|
#include <netinet/igmp.h>
|
|
#include <netinet/ip6.h>
|
|
#include "packet.hpp"
|
|
|
|
/* virtual class for our IPv4, IPv6 classes */
|
|
class IP_class {
|
|
protected:
|
|
virtual void handle_tcp() = 0;
|
|
virtual void handle_udp() = 0;
|
|
virtual void handle_icmp() = 0;
|
|
virtual void handle_icmpv6() = 0;
|
|
virtual void handle_igmp() = 0;
|
|
uint16_t payload_len = 0;
|
|
public:
|
|
//getters
|
|
virtual std::string get_source() = 0;
|
|
virtual std::string get_dest() = 0;
|
|
virtual uint16_t get_src_port() = 0;
|
|
virtual uint16_t get_dest_port() = 0;
|
|
virtual TransportProtocol get_protocol() = 0;
|
|
|
|
uint16_t get_payload_len();
|
|
|
|
const uint8_t* payload_ptr = nullptr;
|
|
const uint8_t* get_payload_ptr() const { return payload_ptr; }
|
|
|
|
virtual ~IP_class() = default;
|
|
|
|
};
|
|
/*** ip4 ***/
|
|
class IPv4 : public IP_class {
|
|
private:
|
|
const ip* ip_hdr = nullptr;
|
|
int ip_hdr_len = 0;
|
|
uint16_t src_port = 0;
|
|
uint16_t dest_port = 0;
|
|
protected:
|
|
void handle_tcp() override;
|
|
void handle_udp() override;
|
|
void handle_icmp() override;
|
|
void handle_icmpv6() override;
|
|
void handle_igmp() override;
|
|
|
|
public:
|
|
TransportProtocol get_protocol() override;
|
|
std::string get_source() override;
|
|
std::string get_dest() override;
|
|
uint16_t get_src_port() override;
|
|
uint16_t get_dest_port() override;
|
|
|
|
explicit IPv4(const u_char* data);
|
|
};
|
|
|
|
|
|
|
|
/*** ipv6 ***/
|
|
class IPv6 : public IP_class{
|
|
protected:
|
|
void handle_tcp() override;
|
|
void handle_udp() override;
|
|
void handle_icmp() override;
|
|
void handle_icmpv6() override;
|
|
void handle_igmp() override;
|
|
private:
|
|
const ip6_hdr* ip_hdr = nullptr;
|
|
int ip_hdr_len = 40;
|
|
|
|
in6_addr ip_source;
|
|
in6_addr ip_dest;
|
|
|
|
uint16_t src_port;
|
|
uint16_t dest_port;
|
|
|
|
const uint8_t* ptr = nullptr;
|
|
|
|
public:
|
|
explicit IPv6(const u_char* data);
|
|
|
|
TransportProtocol get_protocol() override;
|
|
std::string get_source() override;
|
|
std::string get_dest() override;
|
|
uint16_t get_src_port() override;
|
|
uint16_t get_dest_port() override;
|
|
|
|
};
|
|
|
|
#endif //IP_HPP
|