⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rawpacket.java

📁 The WLAN Traffic Visualizer is a platform independent Java program providing accurate measurement of
💻 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 + -