60 lines
1.2 KiB
C++
60 lines
1.2 KiB
C++
#ifndef PACKET_HPP
|
|
#define PACKET_HPP
|
|
#include <cstdint>
|
|
#include <utility>
|
|
#include <string>
|
|
enum IPVersion {
|
|
v4, v6,
|
|
};
|
|
|
|
enum class TransportProtocol {
|
|
TCP = 1,
|
|
UDP = 2,
|
|
ICMP = 3,
|
|
ICMP6 = 4,
|
|
IGMP = 5,
|
|
UNKNOWN = -1,
|
|
};
|
|
|
|
enum class ApplicationProtocol {
|
|
HTTP,
|
|
HTTPS,
|
|
DNS,
|
|
FTP,
|
|
SSH,
|
|
SMTP,
|
|
QUIC,
|
|
NTP,
|
|
UNKNOWN,
|
|
};
|
|
|
|
struct Packet {
|
|
IPVersion ip_version;
|
|
TransportProtocol transport_protocol;
|
|
ApplicationProtocol application_protocol;
|
|
//src address
|
|
std::string src;
|
|
//dest address
|
|
std::string dst;
|
|
uint16_t src_port;
|
|
uint16_t dst_port;
|
|
|
|
uint32_t total_len;
|
|
uint16_t payload_len;
|
|
|
|
const uint8_t* payload_ptr;
|
|
|
|
Packet(IPVersion version, TransportProtocol protocol, std::string src, std::string dst,
|
|
uint16_t src_port, uint16_t dst_port, uint32_t total_len, uint16_t payload, const uint8_t* payload_ptr) : ip_version(version), transport_protocol(protocol),
|
|
src(std::move(src)), dst(std::move(dst)), src_port(src_port), dst_port(dst_port), total_len(total_len), payload_len(payload),
|
|
payload_ptr(payload_ptr)
|
|
{
|
|
this->application_protocol = get_application_protocol();
|
|
}
|
|
Packet() { }
|
|
|
|
private:
|
|
ApplicationProtocol get_application_protocol();
|
|
};
|
|
#endif //PACKET_HPP
|