-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharpParser.java
More file actions
117 lines (103 loc) · 3.92 KB
/
arpParser.java
File metadata and controls
117 lines (103 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import java.util.Arrays;
public class arpParser{
public static byte[] ARPparser(byte[] etherPacket) {
byte [] etherType = Arrays.copyOfRange(etherPacket, 12, 14);
byte[] arpPacket=null;
if (Lib.byteArrayToInt(etherType) == 2054){ //ARP 0x806
arpPacket = Lib.copyByteArray(etherPacket, 14); //from 14 to end, header end at 37
}
return arpPacket;
}
//public static String arpPacketReassembler(byte[] fragment, int fragOffset){***}
public static String getARPHeader(byte[] arpPacket){
String hardw = gethardwType(arpPacket);
String prot = getprotType( arpPacket);
int len = gethardwAddrLen( arpPacket);
int protLen = getprotAddrLen( arpPacket);
int op = getopCode( arpPacket);
String sHard = getsHardAddr( arpPacket);
String sIp = getsIPAddr( arpPacket);
String targetHard = gettargetHardAddr( arpPacket);
String tIp = gettargetIPAddr( arpPacket);
String toPrint = "Hardware Type: "+hardw+"\n"
+ "Protocol Type: "+prot+"\n"
+ "Hardware Address Length: "+len+"\n"
+ "Protocol Address Length: "+protLen+"\n"
+ "Option Code: "+op+"\n"
+ "Source Hardware Address: "+sHard+"\n"
+ "Source IP Address: "+sIp+"\n"
+ "Target Hardware Address: "+targetHard+"\n"
+ "Target IP Address: "+tIp+"\n";
return toPrint;
}
public static String getARPPacket(byte[] arpPacket){
String hardw = gethardwType(arpPacket);
String prot = getprotType( arpPacket);
int len = gethardwAddrLen( arpPacket);
int protLen = getprotAddrLen( arpPacket);
int op = getopCode( arpPacket);
String sHard = getsHardAddr( arpPacket);
String sIp = getsIPAddr( arpPacket);
String targetHard = gettargetHardAddr( arpPacket);
String tIp = gettargetIPAddr( arpPacket);
byte[] payload = Lib.copyByteArray(arpPacket, 28);
String toPrint = "Hardware Type: "+hardw+"\n"
+ "Protocol Type: "+prot+"\n"
+ "Hardware Address Length: "+len+"\n"
+ "Protocol Address Length: "+protLen+"\n"
+ "Option Code: "+op+"\n"
+ "Source Hardware Address: "+sHard+"\n"
+ "Source IP Address: "+sIp+"\n"
+ "Target Hardware Address: "+targetHard+"\n"
+ "Target IP Address: "+tIp+"\n"
+"Payload: "+ Lib.getString(payload);
return toPrint;
}
public static String gethardwType(byte[] arpPacket) {
byte[] hardwType = Arrays.copyOfRange(arpPacket, 0, 2);
String hardw = Lib.getString(hardwType);
return hardw;
}
public static String getprotType(byte[] arpPacket) {
byte[] protType = Arrays.copyOfRange(arpPacket, 2, 4);
String prot = Lib.getString(protType);
return prot;
}
public static int gethardwAddrLen(byte[] arpPacket) {
byte hardwAddrLen = arpPacket[4];
int len = hardwAddrLen;
return len;
}
public static int getprotAddrLen(byte[] arpPacket) {
byte protAddrLen = arpPacket[5];
int len = protAddrLen;
return len;
}
public static int getopCode(byte[] arpPacket) {
byte [] opCode = Arrays.copyOfRange(arpPacket, 6, 8);
int op = Lib.byteArrayToInt(opCode);
return op;
}
public static String getsHardAddr(byte[] arpPacket) {
byte [] sHardAddr = Arrays.copyOfRange(arpPacket, 8, 14);
String sHard = Lib.getString(sHardAddr);
sHard = sHard.replaceAll(" ", ":");
return sHard;
}
public static String getsIPAddr(byte[] arpPacket) {
byte [] sIPAddr = Arrays.copyOfRange(arpPacket, 14, 18);
String sIp = Lib.getIPAddress(Lib.getString(sIPAddr).replaceAll("\\s+", ""));
return sIp;
}
public static String gettargetHardAddr(byte[] arpPacket) {
byte [] targetHardAddr = Arrays.copyOfRange(arpPacket, 18, 24);
String targetHard = Lib.getString(targetHardAddr);
targetHard = targetHard.replaceAll(" ", ":");
return targetHard;
}
public static String gettargetIPAddr(byte[] arpPacket) {
byte [] targetIPAddr = Arrays.copyOfRange(arpPacket, 24, 28);
String tIp = Lib.getIPAddress(Lib.getString(targetIPAddr).replaceAll("\\s+", ""));
return tIp;
}
}