📄 ippacket.java
字号:
package jpcap.packet;
import java.net.InetAddress;
import java.net.UnknownHostException;
/** This class represents an IP packet.<P>
* Both IPv4 and IPv6 are supported.
*/
public class IPPacket extends Packet
{
/** IP version (v4/v6) */
public byte version;
/** Priority (class) (v4/v6) */
public byte priority;
/** IP flag bit: [D]elay (v4) */
public boolean d_flag;
/** IP flag bit: [T]hrough (v4) */
public boolean t_flag;
/** IP flag bit: [R]eliability (v4) */
public boolean r_flag;
// added by Damien Daspit 5/7/01
/** Type of Service (TOS) (v4/v6) */
public byte rsv_tos;
// *****************************
/** Packet length (v4/v6) */
public short length;
/** Fragmentation reservation flag (v4) */
public boolean rsv_frag;
/** Don't fragment flag (v4) */
public boolean dont_frag;
/** More fragment flag (v4) */
public boolean more_frag;
/** Fragment offset (v4) */
public short offset;
/** Hop Limit, Time To Live (TTL) (v4/v6) */
public short hop_limit;
/** Protocol (v4/v6) */
public short protocol;
/** Protocol number for ICMP */
public static final short IPPROTO_ICMP=1;
/** Protocol number for IGMP */
public static final short IPPROTO_IGMP=2;
/** Protocol number for IP in IP */
public static final short IPPROTO_IP=4;
/** Protocol number for TCP */
public static final short IPPROTO_TCP=6;
/** Protocol number for UDP */
public static final short IPPROTO_UDP=17;
/** Protocol number for IPv6 */
public static final short IPPROTO_IPv6=41;
/** Protocol number for IPv6 hop-by-hop option */
public static final short IPPROTO_HOPOPT=0;
/** Protocol number for routing header for IPv6 */
public static final short IPPROTO_IPv6_Route=43;
/** Protocol number for fragment header for IPv6 */
public static final short IPPROTO_IPv6_Frag=44;
/** Protocol number for IPv6 ICMP*/
public static final short IPPROTO_IPv6_ICMP=58;
/** Protocol number for no next header header for IPv6 */
public static final short IPPROTO_IPv6_NoNxt=59;
/** Protocol number for destination option for IPv6 */
public static final short IPPROTO_IPv6_Opts=60;
/** IDENTIFICATION (v4) */
public int ident;
/** Flow label (v6) */
public int flow_label;
/** Source IP address */
public InetAddress src_ip;
/** Destination IP address */
public InetAddress dst_ip;
/** Option in IPv4 header (v4) */
public byte[] option;
/** Option headers in IPv6Option (v6) */
public java.util.List options=null;
/** Sets the IPv4 parameters
* @param d_flag IP flag bit: [D]elay
* @param t_flag IP flag bit: [T]hrough
* @param r_flag IP flag bit: [R]eliability
* @param rsv_tos Type of Service (TOS)
* @param priority Priority
* @param rsv_frag Fragmentation Reservation flag
* @param dont_frag Don't fragment flag
* @param more_frag More fragment flag
* @param offset Offset
* @param ident Identifier
* @param ttl Time To Live
* @param protocol Protocol <BR>
* This value is ignored when this packets
* inherits a higher layer protocol(e.g. TCPPacket)
* @param src Source IP address
* @param dst Destination IP address
*/
public void setIPv4Parameter(int priority,
boolean d_flag,boolean t_flag,boolean r_flag, int rsv_tos,
boolean rsv_frag,boolean dont_frag,boolean more_frag,
int offset,int ident,int ttl,
int protocol,InetAddress src,InetAddress dst){
this.version=4;
this.priority=(byte)priority;
this.d_flag=d_flag;this.t_flag=t_flag;this.r_flag=r_flag;
// added by Damien Daspit 5/7/01
this.rsv_tos=(byte)rsv_tos;
// *****************************
this.rsv_frag=rsv_frag;this.dont_frag=dont_frag;
this.more_frag=more_frag;
offset=(short)offset;
this.ident=ident;
this.hop_limit=(short)ttl;
this.protocol=(short)protocol;
this.src_ip=src;
this.dst_ip=dst;
}
/** Sets the IPv6 parameters
* @param cls class
* @param flowlabel flow label
* @param nxt_hdr next header
* @param hop_limit hop limit
* @param src source address
* @param dst destination address
*/
public void setIPv6Parameter(int cls,int flowlabel,int nxt_hdr,
int hop_limit,InetAddress src,InetAddress dst){
this.version=6;
this.priority=(byte)cls;
this.flow_label=flowlabel;
this.protocol=(short)nxt_hdr;
this.hop_limit=(short)hop_limit;
this.src_ip=src;
this.dst_ip=dst;
}
void setIPv4Value(byte ver,byte pri,boolean d,boolean t,boolean r,byte rsv_tos,
boolean rf,boolean df,boolean mf,short offset,
short len,short ident,short ttl,short proto,
byte[] src,byte[] dst){
this.version=ver;
this.priority=pri;
d_flag=d;t_flag=t;r_flag=r;
// added by Damien Daspit 5/7/01
this.rsv_tos=rsv_tos;
// *****************************
rsv_frag=rf;dont_frag=df;more_frag=mf;
this.offset=offset;
this.length=len;
this.ident=ident;
this.hop_limit=ttl;
this.protocol=proto;
try {
this.src_ip=InetAddress.getByAddress(src);
this.dst_ip=InetAddress.getByAddress(dst);
} catch (UnknownHostException e) {
}
}
void setOption(byte[] option){
this.option=option;
}
void setIPv6Value(byte ver,byte v6class,int flow,
short payload,byte nxt,short hlim,
byte[] src,byte[] dst){
this.version=ver;
this.priority=v6class;
this.flow_label=flow;
this.length=payload;
this.protocol=nxt;
this.hop_limit=hlim;
try {
this.src_ip=InetAddress.getByAddress(src);
this.dst_ip=InetAddress.getByAddress(dst);
} catch (UnknownHostException e) {
}
}
void addOptionHeader(IPv6Option header){
if(options==null)
options=new java.util.ArrayList();
options.add(header);
}
byte[] getSourceAddress(){
return src_ip.getAddress();
}
byte[] getDestinationAddress(){
return dst_ip.getAddress();
}
/** Returns a string represenation of this packet.<P>
* Format(IPv4): src_ip->dst_ip protocol(protocol) priority(priority)
* [D][T][R] hop(hop_limit) [RF/][DF/][MF] offset(offset) ident(ident)<P>
*
* Format(IPv6): src_ip->dst_ip protocol(protocol) priority(priority)
* flowlabel(flow_label) hop(hop_limit)
* @return a string represenation of this packet
*/
public String toString(){
if(version==4){
return super.toString()+" "+src_ip+"->"+
dst_ip+" protocol("+protocol+
") priority("+priority+") "+(d_flag?"D":"")+(t_flag?"T":"")+
(r_flag?"R":"")+" hop("+hop_limit+") "+(rsv_frag?"RF/":"")+
(dont_frag?"DF/":"")+(more_frag?"MF":"")+" offset("+offset+
") ident("+ident+")";
}else{
return super.toString()+" "+src_ip+"->"+
dst_ip+" protocol("+protocol+") priority("+priority+
") flowlabel("+flow_label+") hop("+hop_limit+")";
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -