From e1f8528eb15323de349aff34f3dba7dcfdfbd15d Mon Sep 17 00:00:00 2001 From: Maxim Mamontov Date: Mon, 20 Dec 2010 13:16:01 +0200 Subject: [PATCH 1/1] =?utf8?q?=D0=92=D0=B8=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?utf8?q?=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=BC=D0=B8=D0=BB=D0=BA=D0=B8?= =?utf8?q?=20=D0=BA=D0=BE=D0=BC=D0=BF=D1=96=D0=BB=D1=8F=D1=86=D1=96=D1=97?= =?utf8?q?=20=D0=BD=D0=B0=20FreeBSD4=20(=D0=B2=20=D1=82=D0=BE=D0=BC=D1=83?= =?utf8?q?=20=D1=87=D0=B8=D1=81=D0=BB=D1=96=20-=20=D0=B7=D0=B2=E2=80=99?= =?utf8?q?=D1=8F=D0=B7=D0=B0=D0=BD=D1=96=20=D0=B7=20=20=20=20=20=20=20=20?= =?utf8?q?=20=D0=B2=D0=B8=D0=BA=D0=BE=D1=80=D0=B8=D1=81=D1=82=D0=B0=D0=BD?= =?utf8?q?=D0=BD=D1=8F=D0=BC=20=D0=B0=D0=BD=D0=BE=D0=BD=D1=96=D0=BC=D0=BD?= =?utf8?q?=D0=BE=D1=97=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80?= =?utf8?q?=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/raw_ip_packet.h | 72 +++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/include/raw_ip_packet.h b/include/raw_ip_packet.h index af62d051..bca44b3d 100644 --- a/include/raw_ip_packet.h +++ b/include/raw_ip_packet.h @@ -1,6 +1,10 @@ #ifndef RAW_IP_PACKET_H #define RAW_IP_PACKET_H +#ifdef FREE_BSD +#include // n_long in netinet/ip.h +#endif + #include // for htons #include // for struct ip @@ -49,77 +53,77 @@ union // Only for packets without options field uint16_t sPort; uint16_t dPort; - } __attribute__ ((packed)); + } header __attribute__ ((packed)); }; int32_t dataLen; // äÌÉÎÁ IP ÐÁËÅÔÁ. åÓÌÉ -1, ÔÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÄÌÉÎÕ ÉÚ ÚÁÇÏÌÏ×ËÁ ÓÁÍÏÇÏ ÐÁËÅÔÁ. }; //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetIPVersion() const { -return ipHeader.ip_v; +return header.ipHeader.ip_v; } //----------------------------------------------------------------------------- inline uint8_t RAW_PACKET::GetHeaderLen() const { -return ipHeader.ip_hl * 4; +return header.ipHeader.ip_hl * 4; } //----------------------------------------------------------------------------- inline uint8_t RAW_PACKET::GetProto() const { -return ipHeader.ip_p; +return header.ipHeader.ip_p; } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetLen() const { if (dataLen != -1) return dataLen; -return ntohs(ipHeader.ip_len); +return ntohs(header.ipHeader.ip_len); } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetSrcIP() const { -return ipHeader.ip_src.s_addr; +return header.ipHeader.ip_src.s_addr; } //----------------------------------------------------------------------------- inline uint32_t RAW_PACKET::GetDstIP() const { -return ipHeader.ip_dst.s_addr; +return header.ipHeader.ip_dst.s_addr; } //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetSrcPort() const { -if (ipHeader.ip_p == 1) // for icmp proto return port 0 +if (header.ipHeader.ip_p == 1) // for icmp proto return port 0 return 0; -return ntohs(*((uint16_t*)(pckt + ipHeader.ip_hl * 4))); +return ntohs(*((uint16_t*)(pckt + header.ipHeader.ip_hl * 4))); } //----------------------------------------------------------------------------- inline uint16_t RAW_PACKET::GetDstPort() const { -if (ipHeader.ip_p == 1) // for icmp proto return port 0 +if (header.ipHeader.ip_p == 1) // for icmp proto return port 0 return 0; -return ntohs(*((uint16_t*)(pckt + ipHeader.ip_hl * 4 + 2))); +return ntohs(*((uint16_t*)(pckt + header.ipHeader.ip_hl * 4 + 2))); } //----------------------------------------------------------------------------- inline bool RAW_PACKET::operator==(const RAW_PACKET & rvalue) const { -if (ipHeader.ip_src.s_addr != rvalue.ipHeader.ip_src.s_addr) +if (header.ipHeader.ip_src.s_addr != rvalue.header.ipHeader.ip_src.s_addr) return false; -if (ipHeader.ip_dst.s_addr != rvalue.ipHeader.ip_dst.s_addr) +if (header.ipHeader.ip_dst.s_addr != rvalue.header.ipHeader.ip_dst.s_addr) return false; -if (ipHeader.ip_p != 1 && rvalue.ipHeader.ip_p != 1) +if (header.ipHeader.ip_p != 1 && rvalue.header.ipHeader.ip_p != 1) { - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4)) != - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) != + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) return false; - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4 + 2)) != - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) != + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) return false; } -if (ipHeader.ip_p != rvalue.ipHeader.ip_p) +if (header.ipHeader.ip_p != rvalue.header.ipHeader.ip_p) return false; return true; @@ -147,34 +151,34 @@ return true; //----------------------------------------------------------------------------- inline bool RAW_PACKET::operator<(const RAW_PACKET & rvalue) const { -if (ipHeader.ip_src.s_addr < rvalue.ipHeader.ip_src.s_addr) +if (header.ipHeader.ip_src.s_addr < rvalue.header.ipHeader.ip_src.s_addr) return true; -if (ipHeader.ip_src.s_addr > rvalue.ipHeader.ip_src.s_addr) +if (header.ipHeader.ip_src.s_addr > rvalue.header.ipHeader.ip_src.s_addr) return false; -if (ipHeader.ip_dst.s_addr < rvalue.ipHeader.ip_dst.s_addr) +if (header.ipHeader.ip_dst.s_addr < rvalue.header.ipHeader.ip_dst.s_addr) return true; -if (ipHeader.ip_dst.s_addr > rvalue.ipHeader.ip_dst.s_addr) +if (header.ipHeader.ip_dst.s_addr > rvalue.header.ipHeader.ip_dst.s_addr) return false; -if (ipHeader.ip_p != 1 && rvalue.ipHeader.ip_p != 1) +if (header.ipHeader.ip_p != 1 && rvalue.header.ipHeader.ip_p != 1) { - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4)) < - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) < + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) return true; - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4)) > - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4)) > + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4))) return false; - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4 + 2)) < - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) < + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) return true; - if (*((uint16_t *)(pckt + ipHeader.ip_hl * 4 + 2)) > - *((uint16_t *)(rvalue.pckt + rvalue.ipHeader.ip_hl * 4 + 2))) + if (*((uint16_t *)(pckt + header.ipHeader.ip_hl * 4 + 2)) > + *((uint16_t *)(rvalue.pckt + rvalue.header.ipHeader.ip_hl * 4 + 2))) return false; } -if (ipHeader.ip_p < rvalue.ipHeader.ip_p) +if (header.ipHeader.ip_p < rvalue.header.ipHeader.ip_p) return true; return false; @@ -210,5 +214,3 @@ return false; //----------------------------------------------------------------------------- #endif - - -- 2.43.2