📄 arppacket.java
字号:
package jpcap;
/**
* ARP/RARP僷働僢僩傪昞尰偡傞僋儔僗偱偡丅
**/
public class ARPPacket extends Packet
{
/**
* 僴乕僪僂僃傾僞僀僾
**/
public short hardtype;
/**
* 僴乕僪僂僃傾僞僀僾:僀乕僒僱僢僩
**/
public static final short HARDTYPE_ETHER=1;
/**
* 僴乕僪僂僃傾僞僀僾:僩乕僋儞儕儞僌
**/
public static final short HARDTYPE_IEEE802=6;
/**
* 僴乕僪僂僃傾僞僀僾:僼儗乕儉儕儗乕
**/
public static final short HARDTYPE_FRAMERELAY=15;
/**
* 僾儘僩僐儖僞僀僾
**/
public short prototype;
/**
* 僾儘僩僐儖僞僀僾: IP
**/
public static final short PROTOTYPE_IP=2048;
/**
* 僴乕僪僂僄傾傾僪儗僗挿
**/
public short hlen;
/**
* 僾儘僩僐儖傾僪儗僗挿
**/
public short plen;
/**
* 僆儁儗乕僔儑儞
**/
public short operation;
/**
* ARP儕僋僄僗僩
**/
public static final short ARP_REQUEST=1;
/**
* ARP儕僾儔僀
**/
public static final short ARP_REPLY=2;
/**
* Reverse ARP儕僋僄僗僩
**/
public static final short RARP_REQUEST=3;
/**
* Reverse ARP儕僾儔僀
**/
public static final short RARP_REPLY=4;
/**
* Identify peer request
**/
public static final short INV_REQUEST=8;
/**
* Identify peer response
**/
public static final short INV_REPLY=9;
/**
* 憲怣幰僴乕僪僂僃傾傾僪儗僗
**/
public byte[] sender_hardaddr;
/**
* 憲怣幰僾儘僩僐儖傾僪儗僗
**/
public byte[] sender_protoaddr;
/**
* 僞乕僎僢僩僴乕僪僂僃傾傾僪儗僗
**/
public byte[] target_hardaddr;
/**
* 僞乕僎僢僩僾儘僩僐儖傾僪儗僗
**/
public byte[] target_protoaddr;
void setValue(short hardtype,short prototype,short hlen,short plen,
short operation,byte[] sha,byte[] spa,byte[] tha,byte[] tpa){
this.hardtype=hardtype;
this.prototype=prototype;
this.hlen=hlen;this.plen=plen;
this.operation=operation;
sender_hardaddr=sha;
sender_protoaddr=spa;
target_hardaddr=tha;
target_protoaddr=tpa;
}
/**
* 憲怣尦MAC傾僪儗僗傪String偱曉偡
**/
public Object getSenderHardwareAddress(){
switch(hardtype){
case HARDTYPE_ETHER:
char[] adr=new char[17];
for(int i=0;i<5;i++){
adr[i*3]=hexUpperChar(sender_hardaddr[i]);
adr[i*3+1]=hexLowerChar(sender_hardaddr[i]);
adr[i*3+2]=':';
}
adr[15]=hexUpperChar(sender_hardaddr[5]);
adr[16]=hexLowerChar(sender_hardaddr[5]);
return new String(adr);
default:
return "Unknown Protocol";
}
}
/**
* 憲怣愭MAC傾僪儗僗傪String偱曉偡
**/
public Object getTargetHardwareAddress(){
switch(hardtype){
case HARDTYPE_ETHER:
char[] adr=new char[17];
for(int i=0;i<5;i++){
adr[i*3]=hexUpperChar(target_hardaddr[i]);
adr[i*3+1]=hexLowerChar(target_hardaddr[i]);
adr[i*3+2]=':';
}
adr[15]=hexUpperChar(target_hardaddr[5]);
adr[16]=hexLowerChar(target_hardaddr[5]);
return new String(adr);
default:
return "Unknown Protocol";
}
}
/**
* 憲怣尦僾儘僩僐儖傾僪儗僗傪曉偡
**/
public Object getSenderProtocolAddress(){
switch(prototype){
case PROTOTYPE_IP:
return new IPAddress(sender_protoaddr);
default:
return "Unknown Protocol";
}
}
/**
* 憲怣愭僾儘僩僐儖傾僪儗僗傪曉偡
**/
public Object getTargetProtocolAddress(){
switch(prototype){
case PROTOTYPE_IP:
return new IPAddress(target_protoaddr);
default:
return "Unknown Protocol";
}
}
/**
* 偙偺僷働僢僩偺撪梕傪暥帤楍偱昞尰偡傞<BR>
*
* <BR>
* 宍幃: ARP(hardtype:prototype)
**/
public String toString(){
StringBuffer buf=new StringBuffer();
switch(operation){
case ARP_REQUEST: buf.append("ARP REQUEST ");break;
case ARP_REPLY: buf.append("ARP REPLY ");break;
case RARP_REQUEST: buf.append("RARP REQUEST ");break;
case RARP_REPLY: buf.append("RARP REPLY ");break;
case INV_REQUEST: buf.append("IDENTIFY REQUEST ");break;
case INV_REPLY: buf.append("IDENTIFY REPLY ");break;
default: buf.append("UNKNOWN ");break;
}
return buf.toString()+getSenderHardwareAddress()+"("+getSenderProtocolAddress()+") -> "+
getTargetHardwareAddress()+"("+getTargetProtocolAddress()+")";
}
private char hexUpperChar(byte b){
b=(byte)((b>>4)&0xf);
if(b==0) return '0';
else if(b<10) return (char)('0'+b);
else return (char)('a'+b-10);
}
private char hexLowerChar(byte b){
b=(byte)(b&0xf);
if(b==0) return '0';
else if(b<10) return (char)('0'+b);
else return (char)('a'+b-10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -