summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/opcap.cpp42
-rw-r--r--libopie2/opienet/opcap.h2
2 files changed, 35 insertions, 9 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index 913d42e..6ddd457 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -67,59 +67,85 @@ OPacket::OPacket( packetheaderstruct header, const unsigned char* data, QObject*
OPacket::~OPacket()
{
}
OPacketCapturer* OPacket::packetCapturer() const
{
return parent()->inherits( "OPacketCapturer" ) ? static_cast<OPacketCapturer*>( parent() ) : 0;
}
timevalstruct OPacket::timeval() const
{
return _hdr.ts;
}
int OPacket::caplen() const
{
return _hdr.caplen;
}
-void OPacket::dump() const
-{
- printf( "OPacket::dump()\n" );
- printf( "----------------\n" );
+QString OPacket::dump( int bpl ) const
+{
+ static int index = 0;
+ index++;
+ int len = _hdr.caplen;
+ QString str;
+ str.sprintf( "\n<----- Packet #%04d Len = 0x%X (%d) ----->\n\n", index, len, len );
+ str.append( "0000: " );
+ QString tmp;
+ QString bytes;
+ QString chars;
+
+ for ( int i = 0; i < len; ++i )
+ {
+ tmp.sprintf( "%02X ", _data[i] ); bytes.append( tmp );
+ if ( (_data[i] > 31) && (_data[i]<128) ) chars.append( _data[i] );
+ else chars.append( '.' );
+
+ if ( !((i+1) % bpl) )
+ {
+ str.append( bytes );
+ str.append( ' ' );
+ str.append( chars );
+ str.append( '\n' );
+ tmp.sprintf( "%04X: ", i+1 ); str.append( tmp );
+ bytes = "";
+ chars = "";
+ }
- for ( int i = 0; i < _hdr.caplen; ++i )
+ }
+ if ( (len % bpl) )
{
- printf( "%02x ", _data[i] );
- if ( !((i+1) % 32) ) printf( "\n" );
+ str.append( bytes.leftJustify( 1 + 3*bpl ) );
+ str.append( chars );
}
- printf( "\n\n" );
+ str.append( '\n' );
+ return str;
}
int OPacket::len() const
{
return _hdr.len;
}
/*======================================================================================
* OEthernetPacket
*======================================================================================*/
OEthernetPacket::OEthernetPacket( const unsigned char* end, const struct ether_header* data, QObject* parent )
:QObject( parent, "Ethernet" ), _ether( data )
{
qDebug( "Source = %s", (const char*) sourceAddress().toString() );
qDebug( "Destination = %s", (const char*) destinationAddress().toString() );
if ( sourceAddress() == OMacAddress::broadcast )
qDebug( "Source is broadcast address" );
if ( destinationAddress() == OMacAddress::broadcast )
diff --git a/libopie2/opienet/opcap.h b/libopie2/opienet/opcap.h
index 0b06572..04d22ff 100644
--- a/libopie2/opienet/opcap.h
+++ b/libopie2/opienet/opcap.h
@@ -59,49 +59,49 @@ typedef struct timeval timevalstruct;
typedef struct pcap_pkthdr packetheaderstruct;
/* FORWARDS */
class OPacketCapturer;
class QSocketNotifier;
/*======================================================================================
* OPacket - A frame on the wire
*======================================================================================*/
class OPacket : public QObject
{
Q_OBJECT
public:
OPacket( packetheaderstruct, const unsigned char*, QObject* parent );
virtual ~OPacket();
timevalstruct timeval() const;
OPacketCapturer* packetCapturer() const;
int caplen() const;
int len() const;
- void dump() const;
+ QString dump( int = 32 ) const;
private:
const packetheaderstruct _hdr; // pcap packet header
const unsigned char* _data; // pcap packet data
const unsigned char* _end; // end of pcap packet data
};
/*======================================================================================
* OEthernetPacket - DLT_EN10MB frame
*======================================================================================*/
class OEthernetPacket : public QObject
{
Q_OBJECT
public:
OEthernetPacket( const unsigned char*, const struct ether_header*, QObject* parent = 0 );
virtual ~OEthernetPacket();
OMacAddress sourceAddress() const;
OMacAddress destinationAddress() const;
int type() const;
private: