SourceForge Jpcap

net.sourceforge.jpcap.net
Class ICMPPacket

java.lang.Object
  extended by net.sourceforge.jpcap.net.Packet
      extended by net.sourceforge.jpcap.net.EthernetPacket
          extended by net.sourceforge.jpcap.net.IP.Packet
              extended by net.sourceforge.jpcap.net.IPv4.Packet
                  extended by net.sourceforge.jpcap.net.IPPacket
                      extended by net.sourceforge.jpcap.net.ICMPPacket
All Implemented Interfaces:
Serializable, EthernetFields, ICMPFields, IP.ICMP, IPFields

public class ICMPPacket
extends IPPacket
implements ICMPFields, IP.ICMP

An ICMP packet.

Extends an IP packet, adding an ICMP header and ICMP data payload.

Version:
$Revision: 1.1 $
Author:
Patrick Charles, Jonas Lehmann, Esmond Pitt
See Also:
Serialized Form
Last modified by:
$Author: esmondpitt $
Last modified at:
$Date: 2008/08/21 02:58:20 $

Nested Class Summary
 
Nested classes/interfaces inherited from class net.sourceforge.jpcap.net.IPPacket
IPPacket.TestProbe
 
Field Summary
 
Fields inherited from class net.sourceforge.jpcap.net.IP.Packet
_ipHeaderLength, _ipOffset
 
Fields inherited from class net.sourceforge.jpcap.net.EthernetPacket
_byteBuffer, _bytes, _ethOffset, _timeval
 
Fields inherited from interface net.sourceforge.jpcap.net.ICMPFields
ICMP_CODE_LEN, ICMP_CODE_POS, ICMP_CSUM_LEN, ICMP_CSUM_POS, ICMP_HEADER_LEN, ICMP_SUBC_LEN, ICMP_SUBC_POS
 
Fields inherited from interface net.sourceforge.jpcap.net.IPFields
IP_CODE_LEN, IP_CODE_POS, IP_CSUM_LEN, IP_CSUM_POS, IP_DST_POS, IP_FRAG_LEN, IP_FRAG_POS, IP_HEADER_LEN, IP_ID_LEN, IP_ID_POS, IP_LEN_LEN, IP_LEN_POS, IP_SRC_POS, IP_TOS_LEN, IP_TOS_POS, IP_TTL_LEN, IP_TTL_POS, IP_VER_LEN, IP_VER_POS
 
Fields inherited from interface net.sourceforge.jpcap.net.EthernetFields
ETH_CODE_LEN, ETH_CODE_POS, ETH_DST_POS, ETH_HEADER_LEN, ETH_SRC_POS
 
Constructor Summary
ICMPPacket(int lLen, byte[] bytes)
          Construct a new ICMP packet.
ICMPPacket(int lLen, byte[] bytes, Timeval tv)
          Construct a new ICMP packet, including the capture time.
ICMPPacket(int lLen, ByteBuffer bb, Timeval tv)
          Construct a new ICMP packet, including the capture time.
 
Method Summary
 int getChecksum()
          Return the actual packet checksum as received. Derived classes override this to return the most specific checksum, e.g.: The implementation in Packet.getChecksum() returns zero.
 String getColor()
          Fetch ASCII escape sequence of the color associated with this packet type.
 byte[] getData()
          Fetch the data portion of the packet. This is overridden in derived classes to return successively smaller and smaller amounts of data. For example:
  • EthernetPacket.getData() returns the entire Ethernet payload excluding the Ethernet header
  • IP.Packet.getData() only returns the IP payload, i.e. excluding the IP header which is in the Ethernet payload
  • TCPPacket.getData() only returns the TCP payload, i.e. excluding the TCP header which is in the IP payload
 byte[] getHeader()
          Fetch header portion of the packet. This is overridden in derived classes to return the header appropriate to the packet class. For example:
 int getICMPChecksum()
          Fetch the ICMP checksum.
 byte[] getICMPData()
          Fetch the ICMP data as a byte array.
 byte[] getICMPHeader()
          Fetch the ICMP header as a byte array.
 int getMessageCode()
          Fetch the ICMP message type, including subcode.
 int getMessageMajorCode()
          Fetch the ICMP message type code.
 int getMessageMinorCode()
          Fetch the ICMP message subcode.
 int getMessageType()
          Deprecated. use getMessageMajorCode().
 boolean isValidChecksum()
          Return true iff all the checksums in the packet are valid, otherwise false. Derived classes with checksums should override, and should call super.isValidChecksum() to check the validity of base class checksums. The Packet.isValidChecksum() implementation just returns true.
 void setChecksums()
          Set all the checksums in this packet prior to sending. Calling this method sets all the IP, ICMP, IGMP, TCP, UDP etc checksums as appropriate. It is called automatically by PacketOutputStream.writePacket(Packet). Derived classes must override this abstract method, and must call super.setChecksums(), after setting their own checksums (unless super.setChecksums() is abstract, i.e. this method). Otherwise the lower-level checksums will not be correct.

After calling this method the EthernetPacket.hashCode() of this object will probably change.

 void setMessageCode(short code)
          Set the ICMP message code and subcode (16 bits) as per IP.ICMP.getMessageCode().
 String toColoredString(boolean colored)
          Generate string with contents describing this packet.
 
Methods inherited from class net.sourceforge.jpcap.net.IPPacket
getDestinationAddress, getDestinationAddressAsLong, getDestinationAddressBytes, getIpHeaderLength, getSourceAddress, getSourceAddressAsLong, getSourceAddressBytes, onesCompSum
 
Methods inherited from class net.sourceforge.jpcap.net.IPv4.Packet
computeReceiverChecksum, computeReceiverIPChecksum, computeSenderChecksum, computeSenderIPChecksum, getDestinationInetAddress, getFragmentFlags, getFragmentOffset, getId, getIPChecksum, getIPData, getIPHeader, getIPHeaderLength, getIPProtocol, getLength, getProtocol, getSourceInetAddress, getTimeToLive, getTypeOfService, getVersion, isValidIPChecksum, setDestinationInetAddress, setSourceInetAddress, toColoredVerboseString
 
Methods inherited from class net.sourceforge.jpcap.net.IP.Packet
getHeaderLength
 
Methods inherited from class net.sourceforge.jpcap.net.EthernetPacket
equals, getDestinationHwAddress, getDestinationMACAddress, getEthernetCRC32, getEthernetData, getEthernetHeader, getEthernetHeaderLength, getEthernetProtocol, getPacketData, getPacketLength, getSourceHwAddress, getSourceMACAddress, getTimeval, hashCode, setDestinationMACAddress, setEthernetProtocol, setSourceMACAddress, toByteArray, toString
 
Methods inherited from class net.sourceforge.jpcap.net.Packet
ipChecksum
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ICMPPacket

public ICMPPacket(int lLen,
                  byte[] bytes)
Construct a new ICMP packet.

Parameters:
lLen - link-layer header length
bytes - Packet data

ICMPPacket

public ICMPPacket(int lLen,
                  byte[] bytes,
                  Timeval tv)
Construct a new ICMP packet, including the capture time.

Parameters:
lLen - link-layer header length
bytes - Packet data
tv - Timestamp

ICMPPacket

public ICMPPacket(int lLen,
                  ByteBuffer bb,
                  Timeval tv)
Construct a new ICMP packet, including the capture time.

Parameters:
lLen - link-layer header length
bb - Packet data in a ByteBuffer
tv - Timestamp
Since:
2.0.0
Method Detail

getICMPHeader

public byte[] getICMPHeader()
Description copied from interface: IP.ICMP
Fetch the ICMP header as a byte array. Modifying this byte array has no effect on the packet.

Specified by:
getICMPHeader in interface IP.ICMP
Returns:
the ICMP header.

getHeader

public byte[] getHeader()
Fetch header portion of the packet. This is overridden in derived classes to return the header appropriate to the packet class. For example:

Overrides:
getHeader in class IP.Packet

getICMPData

public byte[] getICMPData()
Description copied from interface: IP.ICMP
Fetch the ICMP data as a byte array. Modifying this byte array has no effect on the packet.

Specified by:
getICMPData in interface IP.ICMP
Returns:
the ICMP data

getData

public byte[] getData()
Fetch the data portion of the packet. This is overridden in derived classes to return successively smaller and smaller amounts of data. For example:

Overrides:
getData in class IP.Packet

getMessageCode

public int getMessageCode()
Description copied from interface: IP.ICMP
Fetch the ICMP message type, including subcode. Return value can be used with ICMPMessage.getDescription().

Specified by:
getMessageCode in interface IP.ICMP
Returns:
a 2-byte value containing the message type in the high byte and the message type subcode in the low byte.

setMessageCode

public void setMessageCode(short code)
Description copied from interface: IP.ICMP
Set the ICMP message code and subcode (16 bits) as per IP.ICMP.getMessageCode().

Specified by:
setMessageCode in interface IP.ICMP
Parameters:
code - 2-byte code value.

getMessageMajorCode

public int getMessageMajorCode()
Fetch the ICMP message type code.

Formerly getMessageType().

Specified by:
getMessageMajorCode in interface IP.ICMP
Returns:
the ICMP message type code.

getMessageType

@Deprecated
public int getMessageType()
Deprecated. use getMessageMajorCode().

For backward compatibility.


getMessageMinorCode

public int getMessageMinorCode()
Description copied from interface: IP.ICMP
Fetch the ICMP message subcode.

Specified by:
getMessageMinorCode in interface IP.ICMP
Returns:
the ICMP message subcode.

getChecksum

public int getChecksum()
Return the actual packet checksum as received. Derived classes override this to return the most specific checksum, e.g.: The implementation in Packet.getChecksum() returns zero.

Overrides:
getChecksum in class IPv4.Packet

getICMPChecksum

public int getICMPChecksum()
Description copied from interface: IP.ICMP
Fetch the ICMP checksum.

Specified by:
getICMPChecksum in interface IP.ICMP
Returns:
the ICMP checksum.

isValidChecksum

public boolean isValidChecksum()
Return true iff all the checksums in the packet are valid, otherwise false. Derived classes with checksums should override, and should call super.isValidChecksum() to check the validity of base class checksums. The Packet.isValidChecksum() implementation just returns true.

Overrides:
isValidChecksum in class IPv4.Packet
Returns:
true iff all the checksums in the packet are valid.

setChecksums

public void setChecksums()
Set all the checksums in this packet prior to sending. Calling this method sets all the IP, ICMP, IGMP, TCP, UDP etc checksums as appropriate. It is called automatically by PacketOutputStream.writePacket(Packet). Derived classes must override this abstract method, and must call super.setChecksums(), after setting their own checksums (unless super.setChecksums() is abstract, i.e. this method). Otherwise the lower-level checksums will not be correct.

After calling this method the EthernetPacket.hashCode() of this object will probably change.

Overrides:
setChecksums in class IPv4.Packet

toColoredString

public String toColoredString(boolean colored)
Generate string with contents describing this packet.

Overrides:
toColoredString in class IP.Packet
Parameters:
colored - whether or not the string should contain ansi color escape sequences.

getColor

public String getColor()
Fetch ASCII escape sequence of the color associated with this packet type.

Overrides:
getColor in class IP.Packet
Returns:
ASCII escape sequence string

Copyright © Patrick Charles & Jonas Lehmann, 2001; Esmond Pitt, 2008.