1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-29 13:04:28 +01:00

Added PPI PDU.

This commit is contained in:
Matias Fontanini
2013-09-05 00:49:11 -03:00
parent de0ec914cc
commit 7d4222fb17
8 changed files with 41 additions and 11 deletions

View File

@@ -36,6 +36,7 @@ libtins_la_SOURCES=src/arp.cpp \
src/network_interface.cpp \
src/packet_sender.cpp \
src/packet_writer.cpp \
src/ppi.cpp \
src/pdu.cpp \
src/radiotap.cpp \
src/rawpdu.cpp \
@@ -91,6 +92,7 @@ libtins_HEADERS = include/internals.h \
include/bootp.h \
include/network_interface.h \
include/sll.h \
include/ppi.h \
include/radiotap.h \
include/dns.h \
include/rawpdu.h \

View File

@@ -113,10 +113,10 @@ am_libtins_la_OBJECTS = src/arp.lo src/bootp.lo \
src/ethernetII.lo src/icmp.lo src/icmpv6.lo src/internals.lo \
src/ip.lo src/ip_address.lo src/ipv6.lo src/ipv6_address.lo \
src/llc.lo src/loopback.lo src/network_interface.lo \
src/packet_sender.lo src/packet_writer.lo src/pdu.lo \
src/radiotap.lo src/rawpdu.lo src/rsn_information.lo \
src/sll.lo src/snap.lo src/sniffer.lo src/tcp.lo \
src/tcp_stream.lo src/udp.lo src/utils.lo \
src/packet_sender.lo src/packet_writer.lo src/ppi.lo \
src/pdu.lo src/radiotap.lo src/rawpdu.lo \
src/rsn_information.lo src/sll.lo src/snap.lo src/sniffer.lo \
src/tcp.lo src/tcp_stream.lo src/udp.lo src/utils.lo \
src/dot11/dot11_base.lo src/dot11/dot11_data.lo \
src/dot11/dot11_mgmt.lo src/dot11/dot11_beacon.lo \
src/dot11/dot11_assoc.lo src/dot11/dot11_auth.lo \
@@ -324,6 +324,7 @@ libtins_la_SOURCES = src/arp.cpp \
src/network_interface.cpp \
src/packet_sender.cpp \
src/packet_writer.cpp \
src/ppi.cpp \
src/pdu.cpp \
src/radiotap.cpp \
src/rawpdu.cpp \
@@ -378,6 +379,7 @@ libtins_HEADERS = include/internals.h \
include/bootp.h \
include/network_interface.h \
include/sll.h \
include/ppi.h \
include/radiotap.h \
include/dns.h \
include/rawpdu.h \
@@ -533,6 +535,7 @@ src/packet_sender.lo: src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/packet_writer.lo: src/$(am__dirstamp) \
src/$(DEPDIR)/$(am__dirstamp)
src/ppi.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/pdu.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/radiotap.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
src/rawpdu.lo: src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
@@ -638,6 +641,8 @@ mostlyclean-compile:
-rm -f src/packet_writer.lo
-rm -f src/pdu.$(OBJEXT)
-rm -f src/pdu.lo
-rm -f src/ppi.$(OBJEXT)
-rm -f src/ppi.lo
-rm -f src/pppoe.$(OBJEXT)
-rm -f src/pppoe.lo
-rm -f src/radiotap.$(OBJEXT)
@@ -691,6 +696,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/packet_sender.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/packet_writer.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/pdu.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ppi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/pppoe.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/radiotap.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/rawpdu.Plo@am__quote@

View File

@@ -80,7 +80,7 @@ namespace Endian {
* \param data The data to convert.
*/
inline uint64_t do_change_endian(uint64_t data) {
return (((uint64_t)(do_change_endian((uint32_t)((data << 32) >> 32))) << 32) |
return (((uint64_t)(do_change_endian((uint32_t)(data & 0xffffffff))) << 32) |
(do_change_endian(((uint32_t)(data >> 32)))));
}

View File

@@ -124,6 +124,17 @@ public:
return "The provided socket type is invalid";
}
};
/**
* \brief Exception thrown when an unkown link layer PDU type is
* found while sniffing.
*/
class unknown_link_type : public std::exception {
public:
const char *what() const throw() {
return "The sniffed link layer PDU type is unknown";
}
};
}
#endif // TINS_EXCEPTIONS_H

View File

@@ -118,6 +118,10 @@ bool increment(IPv4Address &addr);
bool increment(IPv6Address &addr);
bool decrement(IPv4Address &addr);
bool decrement(IPv6Address &addr);
inline bool is_dot3(const uint8_t *ptr, size_t sz) {
return (sz >= 13 && ptr[12] < 8);
}
} // namespace Internals
} // namespace Tins
/**

View File

@@ -117,7 +117,8 @@ namespace Tins {
DHCPv6,
DOT1Q,
PPPOE,
STP
STP,
PPI
};
/**

View File

@@ -47,6 +47,8 @@
#include "sll.h"
#include "cxxstd.h"
#include "exceptions.h"
#include "internals.h"
#include "ppi.h"
namespace Tins {
class SnifferIterator;
@@ -240,9 +242,7 @@ namespace Tins {
BaseSniffer(const BaseSniffer&);
BaseSniffer &operator=(const BaseSniffer&);
static bool is_dot3(const uint8_t *ptr, size_t sz) {
return (sz >= 13 && ptr[12] < 8);
}
template<class ConcretePDU, class Functor>
static bool call_functor(LoopData<Functor> *data, const u_char *packet, const struct pcap_pkthdr *header);
@@ -321,7 +321,7 @@ namespace Tins {
PCapLoopBreaker _(ret_val, data->handle);
try {
if(data->iface_type == DLT_EN10MB) {
ret_val = is_dot3((const uint8_t*)packet, header->caplen) ?
ret_val = Internals::is_dot3((const uint8_t*)packet, header->caplen) ?
call_functor<Tins::Dot3>(data, packet, header) :
call_functor<Tins::EthernetII>(data, packet, header);
}
@@ -340,6 +340,8 @@ namespace Tins {
ret_val = call_functor<Tins::Loopback>(data, packet, header);
else if(data->iface_type == DLT_LINUX_SLL)
ret_val = call_functor<Tins::SLL>(data, packet, header);
else if(data->iface_type == DLT_PPI)
ret_val = call_functor<Tins::PPI>(data, packet, header);
}
catch(malformed_packet&) {
ret_val = true;

View File

@@ -71,7 +71,7 @@ PtrPacket BaseSniffer::next_packet() {
if(content) {
try {
if(iface_type == DLT_EN10MB) {
if(is_dot3((const uint8_t*)content, header.caplen))
if(Internals::is_dot3((const uint8_t*)content, header.caplen))
ret = new Dot3((const uint8_t*)content, header.caplen);
else
ret = new EthernetII((const uint8_t*)content, header.caplen);
@@ -84,6 +84,10 @@ PtrPacket BaseSniffer::next_packet() {
ret = new Tins::Loopback((const uint8_t*)content, header.caplen);
else if(iface_type == DLT_LINUX_SLL)
ret = new Tins::SLL((const uint8_t*)content, header.caplen);
else if(iface_type == DLT_PPI)
ret = new Tins::PPI((const uint8_t*)content, header.caplen);
else
throw unknown_link_type();
}
catch(malformed_packet&) {}
}