📄 rawpacket.java
字号:
package model;
//Copyright (C) 2008 Harald Unander, Wang Wenjuan
//
// This file is part of WlanTV.
//
// WlanTV is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// WlanTV is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with WlanTV. If not, see <http://www.gnu.org/licenses/>.
import java.io.Serializable;
import main.Main;
public class RawPacket implements Serializable {
private static final long serialVersionUID = 1L;
public long frameTimeRel;
public int frameNumber;
public String frameProtocols;
public long frameMacTime;
public int frameCh;
public float frameRate;
public int frameLen;
public int wlanSubtype;
public int wlanRetry;
public int wlanDuration;
public long wlanSa;
public long wlanDa;
public long wlanRa;
public long wlanTa;
public long wlanBssid;
public int wlanSeq;
public int wlanBadFcs;
public int wlanToDs;
public int wlanFromDs;
public int preamble;
public int wlanFrag;
public int channelType;
public int mgmtShortSlotTime;
public int mgmtPreamble;
public int rssi;
public int wlanFlags;
public int wlanMore;
public int mgmtTimCount;
public int mgmtTimPeriod;
public int wlanQosAck;
public int wlanQosEosp;
public int wlanQosFc_content;
public int wlanQosPriority;
private static enum RADIO_HDR {radiotap,prism,radio,other};
private static RADIO_HDR radioHdr;
private static int wiresharkLenCompensation;
// private static int channel;
private static enum EF {
frame0time_relative,
frame0number,
frame0len,
frame0protocols,
wlan0fc0type_subtype,
wlan0fc0retry,
wlan0duration,
wlan0sa,
wlan0da,
wlan0ra,
wlan0ta,
wlan0bssid,
wlan0frag,
wlan0fc0moredata,
wlan0seq,
wlan0fcs,
wlan0fcs_bad,
prism0channel0data,
prism0rate0data,
prism0frmlen0data,
radiotap0channel,
radiotap0channel0freq,
radiotap0datarate,
radiotap0length,
radiotap0mactime,
radiotap0flags0preamble,
radiotap0channel0type,
wlan_mgt0fixed0capabilities0short_slot_time,
wlan_mgt0fixed0capabilities0preamble,
wlan0fc0tods,
wlan0fc0fromds,
radiotap0dbm_antsignal,
wlan0flags,
wlan0fc0ds,
prism0signal0data,
wlan_mgt0tim0dtim_count,
wlan_mgt0tim0dtim_period,
wlan0qos0ack,
wlan0qos0eosp,
wlan0qos0fc_content,
wlan0qos0priority,
wlan0data_rate,
// wlan0channel,
wlan0signal_strength
};
public void setHeaderType(String str) {
String[] sa = str.split("!");
if (sa[EF.frame0protocols.ordinal()].contains("radiotap")) {
radioHdr = RADIO_HDR.radiotap;
// channel = parseInt(sa[EF.radiotap0channel.ordinal()]);
// if (channel==0) {
// channel = toChannel(parseInt(sa[EF.radiotap0channel0freq.ordinal()]));
// }
}
else if (sa[EF.frame0protocols.ordinal()].contains("prism")) {
radioHdr = RADIO_HDR.prism;
// channel = parseHex(sa[EF.prism0channel0data.ordinal()].substring(2));
}
else if (sa[EF.frame0protocols.ordinal()].contains("radio")) {
radioHdr = RADIO_HDR.radio;
// channel = parseHex(sa[EF.wlan0channel0data.ordinal()].substring(2));
}
else if (!sa[EF.frame0protocols.ordinal()].contains("wlan")) {
Main.myLogging.addWarning(this,"This is no WLAN capture");
radioHdr = RADIO_HDR.other;
}
else {
radioHdr = RADIO_HDR.other;
// channel = -1;
}
if (Main.properties.getProperty("wireshark.len.compensation","off").equals("on")) {
// System.out.println(Main.pilotProp.getProperty("wireshark.len.compensation","off"));
wiresharkLenCompensation = parseInt(sa[EF.radiotap0length.ordinal()]);
}
}
public void populateFromFields(String str) {
String str0 = str+"!0000!0000!0000!0000!0000!0000!0000!";
String str1 = str0.replace("!!","!0000!");
String str2 = str1.replace("!!","!0000!");
String[] sa = str2.split("!");
// if (!str.equals(str2)) {
// Main.log.println(str);
// Main.log.println(str2);
// }
// Parse basic fields
frameTimeRel = parseDouble(sa[EF.frame0time_relative.ordinal()],1000000);
frameNumber = parseInt(sa[EF.frame0number.ordinal()]);
frameLen = parseInt(sa[EF.frame0len.ordinal()]);
frameProtocols = sa[EF.frame0protocols.ordinal()];
wlanSubtype = parseHex(sa[EF.wlan0fc0type_subtype.ordinal()].substring(2));
wlanRetry = parseInt(sa[EF.wlan0fc0retry.ordinal()]);
wlanDuration = parseInt(sa[EF.wlan0duration.ordinal()]);
wlanSa = macToLong(sa[EF.wlan0sa.ordinal()]);
wlanDa = macToLong(sa[EF.wlan0da.ordinal()]);
wlanRa = macToLong(sa[EF.wlan0ra.ordinal()]);
wlanTa = macToLong(sa[EF.wlan0ta.ordinal()]);
wlanBssid = macToLong(sa[EF.wlan0bssid.ordinal()]);
wlanFrag = parseInt(sa[EF.wlan0frag.ordinal()]);
wlanMore = parseInt(sa[EF.wlan0fc0moredata.ordinal()]);
wlanSeq = parseInt(sa[EF.wlan0seq.ordinal()]);
wlanBadFcs = parseInt(sa[EF.wlan0fcs_bad.ordinal()]);
wlanToDs = parseInt(sa[EF.wlan0fc0tods.ordinal()]);
wlanFromDs = parseInt(sa[EF.wlan0fc0fromds.ordinal()]);
mgmtShortSlotTime = parseInt(sa[EF.wlan_mgt0fixed0capabilities0short_slot_time.ordinal()]);
mgmtPreamble = parseInt(sa[EF.wlan_mgt0fixed0capabilities0preamble.ordinal()]);
mgmtTimPeriod = parseInt(sa[EF.wlan_mgt0tim0dtim_period.ordinal()]);
mgmtTimCount = parseInt(sa[EF.wlan_mgt0tim0dtim_count.ordinal()]);
wlanQosAck = parseInt(sa[EF.wlan0qos0ack.ordinal()]);
wlanQosEosp = parseInt(sa[EF.wlan0qos0eosp.ordinal()]);
wlanQosFc_content = parseInt(sa[EF.wlan0qos0fc_content.ordinal()]);
wlanQosPriority = parseInt(sa[EF.wlan0qos0priority.ordinal()]);
wlanFlags = parseHex(sa[EF.wlan0flags.ordinal()].substring(2));
if (radioHdr == RADIO_HDR.radiotap) {
// Parse radiotap fields
// frameCh = parseInt(sa[EF.radiotap0channel.ordinal()]);
frameRate = parseInt(sa[EF.radiotap0datarate.ordinal()])/2f;
frameLen = frameLen - parseInt(sa[EF.radiotap0length.ordinal()]);
frameMacTime = parseInt(sa[EF.radiotap0mactime.ordinal()]);
preamble = parseInt(sa[EF.radiotap0flags0preamble.ordinal()]);
channelType = parseHex(sa[EF.radiotap0channel0type.ordinal()].substring(2));
rssi = parseInt(sa[EF.radiotap0dbm_antsignal.ordinal()]);
}
else if (radioHdr == RADIO_HDR.prism) {
// Parse prism fields
// frameCh = parseHex(sa[EF.prism0channel0data.ordinal()].substring(2));
frameRate = parseHex(sa[EF.prism0rate0data.ordinal()].substring(2))/2f;
frameLen = parseHex(sa[EF.prism0frmlen0data.ordinal()].substring(2));
rssi = parseHex(sa[EF.prism0signal0data.ordinal()].substring(2));
}
else if (radioHdr == RADIO_HDR.radio) {
frameRate = parseInt(sa[EF.wlan0data_rate.ordinal()])/1000000f;
rssi = parseInt(sa[EF.wlan0signal_strength.ordinal()]);
frameLen = parseInt(sa[EF.frame0len.ordinal()]);
}
if (frameLen==0)
frameLen = parseInt(sa[EF.frame0len.ordinal()]);
if (frameRate == 0) {
Main.myLogging.addWarning(this,"Zero frame rate set to 54");
frameRate = 54;
}
// if (wlanBadFcs != 0 && parseInt(sa[EF.wlan0fcs.ordinal()]) == 0) {
// System.out.println(wlanBadFcs + " "+parseInt(sa[EF.wlan0fcs.ordinal()]));
// }
// wlanBadFcs = 0;
}
// private static int toChannel(int channelFreq) {
// switch (channelFreq) {
// case 2412:
// return 1;
// case 2417:
// return 2;
// case 2422:
// return 3;
// case 2427:
// return 4;
// case 2432:
// return 5;
// case 2437:
// return 6;
// case 2442:
// return 7;
// case 2447:
// return 8;
// case 2452:
// return 9;
// case 2457:
// return 10;
// case 2462:
// return 11;
// case 2467:
// return 12;
// case 2472:
// return 13;
// case 2484:
// return 14;
// }
// return 0;
// }
static public StringBuffer getTsharkFieldString() {
StringBuffer sb = new StringBuffer(" -T fields ");
String val;
for (EF e : EF.values()) {
val = e.toString();
sb.append("-e "+val.toString().replace("0",".")+" ");
}
return sb;
}
public static String getFields(RawPacket p,char sep) {
StringBuffer sb = new StringBuffer();
sb.append("FrameNo\t" +p.frameNumber+sep);
// sb.append("TimeRel\t" +p.frameTimeRel+sep);
// sb.append("MACTime\t" +p.frameMacTime+sep);
sb.append("FrameLen\t" +p.frameLen+sep);
sb.append("Protocols\t" +p.frameProtocols+sep);
// sb.append("SubType\t" +String.format("%02X",p.wlanSubtype)+sep);
// sb.append("Channel\t" +p.frameCh+sep);
sb.append("Rate\t" +p.frameRate+sep);
// sb.append("Preamble\t" +p.preamble+sep);
sb.append("Ch.Type\t" +String.format("%04X", p.channelType)+sep);
// sb.append("Retry\t" +p.wlanRetry+sep);
sb.append("NAV\t" +p.wlanDuration+sep);
sb.append("WlanSA\t" +longToMac(p.wlanSa)+sep);
sb.append("WlanDA\t" +longToMac(p.wlanDa)+sep);
sb.append("WlanRA\t" +longToMac(p.wlanRa)+sep);
sb.append("WlanTA\t" +longToMac(p.wlanTa)+sep);
sb.append("BSSid\t" +longToMac(p.wlanBssid)+sep);
// sb.append("WlanFrag\t" +p.wlanFrag+sep);
// sb.append("WlanMore\t" +p.wlanMore+sep);
sb.append("WlanSeq\t" +p.wlanSeq+sep);
// sb.append("BadFCS\t" +p.wlanBadFcs+sep);
// sb.append("ToDS\t" +p.wlanToDs+sep);
// sb.append("FromDS\t" +p.wlanFromDs+sep);
// sb.append("DS\t" +p.wlanDs+sep);
// sb.append("MgmtSlotTime\t" +p.mgmtShortSlotTime+sep);
// sb.append("MgmtPreamble\t" +p.mgmtPreamble+sep);
sb.append("DTIM\t" +p.mgmtTimCount+"/"+p.mgmtTimPeriod+sep);
// sb.append("TimPeriod\t" +p.mgmtTimPeriod+sep);
// sb.append("TimCount\t" +p.mgmtTimCount+sep);
sb.append("RSSI\t" +p.rssi+sep);
sb.append("Flags\t" +getFlags(p.wlanFlags,p.wlanBadFcs)+sep);
sb.append("QosAck\t" +p.wlanQosAck+sep);
sb.append("QosEosp\t" +p.wlanQosEosp+sep);
// sb.append("QosFcCont\t" +p.wlanQosFc_content+sep);
sb.append("QosPriority\t" +p.wlanQosPriority);
return sb.toString();
}
private static String getFlags(int f,int badFcs) {
StringBuffer sb = new StringBuffer("opmPRMFTC");
if ((f&0x80) == 0) sb.setCharAt(0,'.');
if ((f&0x40) == 0) sb.setCharAt(1,'.');
if ((f&0x20) == 0) sb.setCharAt(2,'.');
if ((f&0x10) == 0) sb.setCharAt(3,'.');
if ((f&0x08) == 0) sb.setCharAt(4,'.');
if ((f&0x04) == 0) sb.setCharAt(5,'.');
if ((f&0x02) == 0) sb.setCharAt(6,'.');
if ((f&0x01) == 0) sb.setCharAt(7,'.');
if (badFcs!=0) sb.setCharAt(8,'.');
return sb.toString();
}
public static long parseLong(String s) {
try {
return Long.parseLong(s);
} catch (Exception e){
return 0;
}
}
public static int parseInt(String s) {
try {
return Integer.parseInt(s);
} catch (Exception e){
return 0;
}
}
public static byte parseByte(String s) {
try {
return Byte.parseByte(s);
} catch (Exception e){
return 0;
}
}
public static int parseHex(String s) {
try {
return (int)Long.parseLong(s,16);
} catch (Exception e){
System.out.println(e.getMessage());
return 0;
}
}
public static long parseDouble(String s, int scale) {
try {
return Math.round(scale*Double.parseDouble(s));
} catch (Exception e){
return 0;
}
}
public static long macToLong(String s) {
String ns = s.replaceAll(":","");
try {
return (long) (Long.parseLong(ns,16));
} catch (Exception e){
return 0;
}
}
public static String longToMac(long l) {
String s = String.format("%012X",l);
return s.substring(0,2)+":"+s.substring(2,4)+":"+s.substring(4,6)+":"+
s.substring(6,8)+":"+s.substring(8,10)+":"+s.substring(10,12);
}
public static int getWiresharkLenCompensation() {
return wiresharkLenCompensation;
}
// public static String getChannel() {
// return Integer.toString(channel);
// }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -