📄 arppacket.java
字号:
package jpcap.packet;
import java.net.InetAddress;
import java.net.UnknownHostException;
/** This class represents ARP/RARP packet. */
public class ARPPacket extends Packet
{
private static final long serialVersionUID = 3271911802471786372L;
/** Hardware type */
public short hardtype;
/** Hardware type: Ethernet */
public static final short HARDTYPE_ETHER=1;
/** Hardware type: Token ring */
public static final short HARDTYPE_IEEE802=6;
/** Hardware type: Frame relay */
public static final short HARDTYPE_FRAMERELAY=15;
/** Protocol type */
public short prototype;
/** Protocol type: IP */
public static final short PROTOTYPE_IP=2048;
/** Hardware address length */
public short hlen;
/** Protocol address length */
public short plen;
/** Operation */
public short operation;
/** ARP request */
public static final short ARP_REQUEST=1;
/** ARP reply */
public static final short ARP_REPLY=2;
/** Reverse ARP request */
public static final short RARP_REQUEST=3;
/** Reverse ARP reply */
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;
/** Sender hardware address */
public byte[] sender_hardaddr;
/** Sender protocol address */
public byte[] sender_protoaddr;
/** Target hardware address */
public byte[] target_hardaddr;
/** Target protocol address */
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;
}
/** Returns the hardware address (MAC address) of the sender.
* @return Hardware address of the sender
*/
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";
}
}
/** Returns the hardware address (MAC address) of the target.
* @return Hardware address of the target
*/
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";
}
}
/** Returns the protocol address of the sender.
* @return Protocol address of the sender
*/
public Object getSenderProtocolAddress(){
switch(prototype){
case PROTOTYPE_IP:
try {
return InetAddress.getByAddress(sender_protoaddr);
} catch (UnknownHostException e) {
return "Unknown Address";
}
default:
return "Unknown Protocol";
}
}
/** Returns the protocol address of the target.
* @return Protocol address of the target
*/
public Object getTargetProtocolAddress(){
switch(prototype){
case PROTOTYPE_IP:
try {
return InetAddress.getByAddress(target_protoaddr);
} catch (UnknownHostException e) {
return "Unknown Address";
}
default:
return "Unknown Protocol";
}
}
/** Returns a string representation of this ARP/RARP packet.<BR>
*
* <BR>
* Format: ARP(hardtype:prototype)
* @return a string representation of this ARP/RARP packet
*/
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 + -