author | mickeyl <mickeyl> | 2003-10-03 13:43:57 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2003-10-03 13:43:57 (UTC) |
commit | 9450f41ce6109fb9d22fca7b1c72c606fd37f5a7 (patch) (side-by-side diff) | |
tree | f88ab19eaaff43d8f72abe773d60e318e9a9e314 /libopie2/opienet/opcap.cpp | |
parent | 78b29c765dbe70faec614796a4d1421eaf0ec773 (diff) | |
download | opie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.zip opie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.tar.gz opie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.tar.bz2 |
add defines for UDP-based protocols
detect DHCP and link it into the packet chain
-rw-r--r-- | libopie2/opienet/opcap.cpp | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp index cc8ce7f..f1f2b4b 100644 --- a/libopie2/opienet/opcap.cpp +++ b/libopie2/opienet/opcap.cpp @@ -28,32 +28,34 @@ If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* OPIE */ #include <opie2/opcap.h> /* QT */ #include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects) #include <qsocketnotifier.h> #include <qobjectlist.h> +#include "udp_ports.h" + /*====================================================================================== * OPacket *======================================================================================*/ OPacket::OPacket( int datalink, packetheaderstruct header, const unsigned char* data, QObject* parent ) :QObject( parent, "Generic" ), _hdr( header ), _data( data ) { //qDebug( "OPacket::OPacket(): (Len %d, CapLen %d)" /*, ctime((const time_t*) header.ts.tv_sec)*/, header.len, header.caplen ); _end = (unsigned char*) data + header.len; //qDebug( "OPacket::data @ %0x, end @ %0x", data, _end ); switch ( datalink ) { case DLT_EN10MB: qDebug( "OPacket::OPacket(): Received Packet. Datalink = ETHERNET" ); @@ -341,61 +343,72 @@ OMacAddress OARPPacket::senderMacAddress() const OMacAddress OARPPacket::targetMacAddress() const { return OMacAddress( _arphdr->ar_tha ); } /*====================================================================================== * OUDPPacket *======================================================================================*/ OUDPPacket::OUDPPacket( const unsigned char* end, const struct udphdr* data, QObject* parent ) :QObject( parent, "UDP" ), _udphdr( data ) { qDebug( "OUDPPacket::OUDPPacket(): decoding UDP header..." ); + qDebug( "fromPort = %d", fromPort() ); + qDebug( " toPort = %d", toPort() ); + + // TODO: Make this a case or a hash if we know more udp protocols + + if ( fromPort() == UDP_PORT_BOOTPS || fromPort() == UDP_PORT_BOOTPC || + toPort() == UDP_PORT_BOOTPS || toPort() == UDP_PORT_BOOTPC ) + { + qDebug( "seems to be part of a DHCP conversation => creating DHCP packet." ); + new ODHCPPacket( end, (const struct dhcp_packet*) (data+1), this ); + } } OUDPPacket::~OUDPPacket() { } int OUDPPacket::fromPort() const { - return _udphdr->source; + return EXTRACT_16BITS( &_udphdr->source ); } int OUDPPacket::toPort() const { - return _udphdr->dest; + return EXTRACT_16BITS( &_udphdr->dest ); } int OUDPPacket::length() const { - return _udphdr->len; + return EXTRACT_16BITS( &_udphdr->len ); } int OUDPPacket::checksum() const { - return _udphdr->check; + return EXTRACT_16BITS( &_udphdr->check ); } /*====================================================================================== * ODHCPPacket *======================================================================================*/ ODHCPPacket::ODHCPPacket( const unsigned char* end, const struct dhcp_packet* data, QObject* parent ) :QObject( parent, "DHCP" ), _dhcphdr( data ) { qDebug( "ODHCPPacket::ODHCPPacket(): decoding DHCP information..." ); } @@ -411,63 +424,63 @@ ODHCPPacket::~ODHCPPacket() OTCPPacket::OTCPPacket( const unsigned char* end, const struct tcphdr* data, QObject* parent ) :QObject( parent, "TCP" ), _tcphdr( data ) { qDebug( "OTCPPacket::OTCPPacket(): decoding TCP header..." ); } OTCPPacket::~OTCPPacket() { } int OTCPPacket::fromPort() const { - return _tcphdr->source; + return EXTRACT_16BITS( &_tcphdr->source ); } int OTCPPacket::toPort() const { - return _tcphdr->dest; + return EXTRACT_16BITS( &_tcphdr->dest ); } int OTCPPacket::seq() const { - return _tcphdr->seq; + return EXTRACT_16BITS( &_tcphdr->seq ); } int OTCPPacket::ack() const { - return _tcphdr->ack_seq; + return EXTRACT_16BITS( &_tcphdr->ack_seq ); } int OTCPPacket::window() const { - return _tcphdr->window; + return EXTRACT_16BITS( &_tcphdr->window ); } int OTCPPacket::checksum() const { - return _tcphdr->check; + return EXTRACT_16BITS( &_tcphdr->check ); } /*====================================================================================== * OPrismHeaderPacket *======================================================================================*/ OPrismHeaderPacket::OPrismHeaderPacket( const unsigned char* end, const struct prism_hdr* data, QObject* parent ) :QObject( parent, "Prism" ), _header( data ) { qDebug( "OPrismHeaderPacket::OPrismHeaderPacket(): decoding PRISM header..." ); qDebug( "Signal Strength = %d", data->signal.data ); new OWaveLanPacket( end, (const struct ieee_802_11_header*) (data+1), this ); |