X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/9701b7ab4dc4cd709ad4dcaa750fc0021f15e231..ff5b020a0b3d4c61da3425de56d80a54534d1f03:/include/stg/raw_ip_packet.h diff --git a/include/stg/raw_ip_packet.h b/include/stg/raw_ip_packet.h index a1bdda71..f07bf228 100644 --- a/include/stg/raw_ip_packet.h +++ b/include/stg/raw_ip_packet.h @@ -10,9 +10,6 @@ #include -#include "stg_const.h" -#include "common.h" - #define IPv4 (2) enum { pcktSize = 68 }; //60(max) ip + 8 udp or tcp (part of tcp or udp header to ports) @@ -20,15 +17,17 @@ enum { pcktSize = 68 }; //60(max) ip + 8 udp or tcp (part of tcp or udp header t struct RAW_PACKET { RAW_PACKET() - : dataLen(-1) + : rawPacket(), + dataLen(-1) { - memset(pckt, 0, pcktSize); + memset(rawPacket.pckt, 0, pcktSize); } RAW_PACKET(const RAW_PACKET & rp) - : dataLen(rp.dataLen) + : rawPacket(), + dataLen(rp.dataLen) { - memcpy(pckt, rp.pckt, pcktSize); + memcpy(rawPacket.pckt, rp.rawPacket.pckt, pcktSize); } uint16_t GetIPVersion() const; @@ -54,76 +53,76 @@ union uint16_t sPort; uint16_t dPort; } header __attribute__ ((packed)); - }; + } rawPacket; int32_t dataLen; // IP packet length. Set to -1 to use length field from the header }; //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetIPVersion() const { -return header.ipHeader.ip_v; +return rawPacket.header.ipHeader.ip_v; } //----------------------------------------------------------------------------- inline uint8_t RAW_PACKET::GetHeaderLen() const { -return header.ipHeader.ip_hl * 4; +return rawPacket.header.ipHeader.ip_hl * 4; } //----------------------------------------------------------------------------- inline uint8_t RAW_PACKET::GetProto() const { -return header.ipHeader.ip_p; +return rawPacket.header.ipHeader.ip_p; } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetLen() const { if (dataLen != -1) return dataLen; -return ntohs(header.ipHeader.ip_len); +return ntohs(rawPacket.header.ipHeader.ip_len); } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetSrcIP() const { -return header.ipHeader.ip_src.s_addr; +return rawPacket.header.ipHeader.ip_src.s_addr; } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetDstIP() const { -return header.ipHeader.ip_dst.s_addr; +return rawPacket.header.ipHeader.ip_dst.s_addr; } //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetSrcPort() const { -if (header.ipHeader.ip_p == 1) // for icmp proto return port 0 +if (rawPacket.header.ipHeader.ip_p == 1) // for icmp proto return port 0 return 0; -return ntohs(*((uint16_t*)(pckt + header.ipHeader.ip_hl * 4))); +return ntohs(*((uint16_t*)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4))); } //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetDstPort() const { -if (header.ipHeader.ip_p == 1) // for icmp proto return port 0 +if (rawPacket.header.ipHeader.ip_p == 1) // for icmp proto return port 0 return 0; -return ntohs(*((uint16_t*)(pckt + header.ipHeader.ip_hl * 4 + 2))); +return ntohs(*((uint16_t*)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4 + 2))); } //----------------------------------------------------------------------------- inline bool RAW_PACKET::operator==(const RAW_PACKET & rvalue) const { -if (header.ipHeader.ip_src.s_addr != rvalue.header.ipHeader.ip_src.s_addr) +if (rawPacket.header.ipHeader.ip_src.s_addr != rvalue.rawPacket.header.ipHeader.ip_src.s_addr) return false; -if (header.ipHeader.ip_dst.s_addr != rvalue.header.ipHeader.ip_dst.s_addr) +if (rawPacket.header.ipHeader.ip_dst.s_addr != rvalue.rawPacket.header.ipHeader.ip_dst.s_addr) return false; -if (header.ipHeader.ip_p != 1 && rvalue.header.ipHeader.ip_p != 1) +if (rawPacket.header.ipHeader.ip_p != 1 && rvalue.rawPacket.header.ipHeader.ip_p != 1) { - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) != - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4)) != + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4))) return false; - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) != - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4 + 2)) != + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4 + 2))) return false; } -if (header.ipHeader.ip_p != rvalue.header.ipHeader.ip_p) +if (rawPacket.header.ipHeader.ip_p != rvalue.rawPacket.header.ipHeader.ip_p) return false; return true; @@ -131,34 +130,34 @@ return true; //----------------------------------------------------------------------------- inline bool RAW_PACKET::operator<(const RAW_PACKET & rvalue) const { -if (header.ipHeader.ip_src.s_addr < rvalue.header.ipHeader.ip_src.s_addr) +if (rawPacket.header.ipHeader.ip_src.s_addr < rvalue.rawPacket.header.ipHeader.ip_src.s_addr) return true; -if (header.ipHeader.ip_src.s_addr > rvalue.header.ipHeader.ip_src.s_addr) +if (rawPacket.header.ipHeader.ip_src.s_addr > rvalue.rawPacket.header.ipHeader.ip_src.s_addr) return false; -if (header.ipHeader.ip_dst.s_addr < rvalue.header.ipHeader.ip_dst.s_addr) +if (rawPacket.header.ipHeader.ip_dst.s_addr < rvalue.rawPacket.header.ipHeader.ip_dst.s_addr) return true; -if (header.ipHeader.ip_dst.s_addr > rvalue.header.ipHeader.ip_dst.s_addr) +if (rawPacket.header.ipHeader.ip_dst.s_addr > rvalue.rawPacket.header.ipHeader.ip_dst.s_addr) return false; -if (header.ipHeader.ip_p != 1 && rvalue.header.ipHeader.ip_p != 1) +if (rawPacket.header.ipHeader.ip_p != 1 && rvalue.rawPacket.header.ipHeader.ip_p != 1) { - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) < - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4)) < + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4))) return true; - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) > - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4)) > + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4))) return false; - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) < - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4 + 2)) < + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4 + 2))) return true; - if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) > - *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(rawPacket.pckt + rawPacket.header.ipHeader.ip_hl * 4 + 2)) > + *((uint16_t *)(rvalue.rawPacket.pckt + rvalue.rawPacket.header.ipHeader.ip_hl * 4 + 2))) return false; } -if (header.ipHeader.ip_p < rvalue.header.ipHeader.ip_p) +if (rawPacket.header.ipHeader.ip_p < rvalue.rawPacket.header.ipHeader.ip_p) return true; return false;