on ethernetPacket *
{
dword ipHeaderLength;
byte ipProtocol;
switch(this.type)
{
case 0x0800: // IPv4
ipHeaderLength = (this.Byte(0) & 0x0F) * 4;
ipProtocol = this.Byte(9);
switch(ipProtocol)
{
case 17:
HandleUDP( this, ipHeaderLength+8, swapWord(this.Word(ipHeaderLength)), swapWord(this.Word(ipHeaderLength+2)) );
break;
}
break;
}
if(this.IsAvailable("tcp", "data"))
{
byte buffer[1500];
word payloadLength;
payloadLength = this.GetData("tcp", "data", buffer);
write("tcp payload length: %d", payloadLength);
}
}
void HandleUDP( ethernetPacket * pkt, word udpDataOffset, word srcPort, word dstPort )
{
char buffer[100];
word length;
length = pkt.GetData( udpDataOffset, buffer, elcount(buffer)-1 );
buffer[length] = 0; // terminating zero for strings
write( "UDP (port 0x%X to 0x%X): %s", srcPort, dstPort, buffer );
}