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

📄 ruleset.java

📁 接收网络设备上NetFlow工具导出的NetFlow数据
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package cai.flow.collector.interpretator;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import cai.flow.packets.Flow;
import cai.flow.struct.Address;
import cai.flow.struct.Prefix;

abstract class PT_Var {
	public abstract boolean isNumeric();

	public abstract boolean isAddress();

	public abstract boolean isPrefix();

	public abstract String toString();
}

class PT_V_Port extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "Port";
	}
}

class PT_V_SrcPort extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "SrcPort";
	}
}

class PT_V_DstPort extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "DstPort";
	}
}

class PT_V_Proto extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "Proto";
	}
}

class PT_V_TOS extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "TOS";
	}
}

class PT_V_AS extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "AS";
	}
}

class PT_V_SrcAS extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "SrcAS";
	}
}

class PT_V_DstAS extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "DstAS";
	}
}

class PT_V_Addr extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return true;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "Addr";
	}
}

class PT_V_SrcAddr extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return true;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "SrcAddr";
	}
}

class PT_V_DstAddr extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return true;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "DstAddr";
	}
}

class PT_V_NextHop extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return true;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "NextHop";
	}
}

class PT_V_If extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "If";
	}
}

class PT_V_InIf extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "InIf";
	}
}

class PT_V_OutIf extends PT_Var {
	public boolean isNumeric() {
		return true;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return false;
	}

	public String toString() {
		return "OutIf";
	}
}

class PT_V_Prefix extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return true;
	}

	public String toString() {
		return "Prefix";
	}
}

class PT_V_SrcPrefix extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return true;
	}

	public String toString() {
		return "SrcPrefix";
	}
}

class PT_V_DstPrefix extends PT_Var {
	public boolean isNumeric() {
		return false;
	}

	public boolean isAddress() {
		return false;
	}

	public boolean isPrefix() {
		return true;
	}

	public String toString() {
		return "DstPrefix";
	}
}

class PT_O_EndOfLine {
	public String toString() {
		return "*End-Of-Line*";
	}
}

class PT_O_LParen {
	public String toString() {
		return "(";
	}
}

class PT_O_RParen {
	public String toString() {
		return ")";
	}
}

class PT_O_Or {
	public String toString() {
		return "||";
	}
}

class PT_O_And {
	public String toString() {
		return "&&";
	}
}

class PT_O_Not {
	public String toString() {
		return "!";
	}
}

abstract class PT_O_Comp {
	public abstract String toString();
}

class PT_O_In extends PT_O_Comp {
	public String toString() {
		return "~";
	}
}

abstract class PT_O_Weak extends PT_O_Comp {
}

abstract class PT_O_Strong extends PT_O_Comp {
}

class PT_O_Equal extends PT_O_Weak {
	public String toString() {
		return "=";
	}
}

class PT_O_NotEqual extends PT_O_Weak {
	public String toString() {
		return "!=";
	}
}

class PT_O_Less extends PT_O_Strong {
	public String toString() {
		return "<";
	}
}

class PT_O_LessEqual extends PT_O_Strong {
	public String toString() {
		return "<=";
	}
}

class PT_O_Great extends PT_O_Strong {
	public String toString() {
		return ">";
	}
}

class PT_O_GreatEqual extends PT_O_Strong {
	public String toString() {
		return ">=";
	}
}

class PT_V_Number {
	public long v;

	public PT_V_Number(long v) {
		this.v = v;
	}

	public String toString() {
		return "Number " + v;
	}
}

class PT_V_Range {
	public long s, e;

	public PT_V_Range(long s, long e) {
		this.s = s;
		this.e = e;
	}

	public String toString() {
		return "Range " + s + "-" + e;
	}
}

class PT_V_Address {
	public long addr;

	public PT_V_Address(long addr) {
		this.addr = addr;
	}

	public String getValue() {
		return ((addr >>> 24) & 0xff) + "." + ((addr >>> 16) & 0xff) + "."
				+ ((addr >>> 8) & 0xff) + "." + (addr & 0xff);
	}

	public String toString() {
		return "Address " + getValue();
	}
}

class PT_V_VPrefix extends Prefix {
	public PT_V_VPrefix(long address, byte mask) {
		super(address, mask);
	}

	public String toString() {
		return "Network " + ((address >>> 24) & 0xff) + "."
				+ ((address >>> 16) & 0xff) + "." + ((address >>> 8) & 0xff)
				+ "." + (address & 0xff) + "/" + mask;
	}
}

class PT_Lexer {
	static String word_delimiters = " \t()!=|&<>~";

	static Hashtable vars;

	static {
		vars = new Hashtable();

		vars.put(new String("port"), new PT_V_Port());
		vars.put(new String("srcport"), new PT_V_SrcPort());
		vars.put(new String("dstport"), new PT_V_DstPort());
		vars.put(new String("proto"), new PT_V_Proto());
		vars.put(new String("tos"), new PT_V_TOS());
		vars.put(new String("as"), new PT_V_AS());
		vars.put(new String("srcas"), new PT_V_SrcAS());
		vars.put(new String("dstas"), new PT_V_DstAS());
		vars.put(new String("addr"), new PT_V_Addr());
		vars.put(new String("srcaddr"), new PT_V_SrcAddr());
		vars.put(new String("dstaddr"), new PT_V_DstAddr());
		vars.put(new String("nexthop"), new PT_V_NextHop());
		vars.put(new String("if"), new PT_V_If());
		vars.put(new String("inif"), new PT_V_InIf());
		vars.put(new String("outif"), new PT_V_OutIf());
		vars.put(new String("prefix"), new PT_V_Prefix());
		vars.put(new String("srcprefix"), new PT_V_SrcPrefix());
		vars.put(new String("dstprefix"), new PT_V_DstPrefix());
	}

	String source;

	char[] src;

	String i_am;

	Object back_obj;

	public int length;

	public int pos, cur_word;

	public PT_Lexer(String s, String who_i_am) {
		i_am = who_i_am;
		source = s + " ";
		length = s.length() + 1;
		src = source.toCharArray();
		pos = 0;
		cur_word = 0;
		back_obj = null;
	}

	private String filler(int pos, char ch) {
		if (pos > 0) {
			char[] b = new char[pos];

			for (int i = 0; i < pos; i++)
				b[i] = ch;

			return new String(b);
		}

		return "";
	}

	public PT_Error compose_error(String m1) {
		String ret = "\n*** Error while parsing of " + i_am + "\n"
				+ source.substring(0, length - 1) + "\n";

		if (pos - cur_word - 2 >= 0)
			ret += filler(cur_word, ' ') + "^"
					+ filler(pos - cur_word - 2, '-') + "^ " + m1;
		else
			ret += filler(cur_word, ' ') + "^ " + m1;

		return new PT_Error(ret);
	}

	public void error(String m1) throws PT_Error {
		throw compose_error(m1);
	}

	public void error(String msg, int start) throws PT_Error {
		int pos;
		PT_Error err;

		pos = cur_word;
		cur_word = start;
		err = compose_error(msg);
		cur_word = pos;

		throw err;
	}

	public void back(Object o) {
		if (!(o instanceof PT_O_EndOfLine))
			back_obj = o;
	}

	public Object get_symbol() throws PT_Error {
		if (back_obj != null) {
			Object a = back_obj;

			back_obj = null;
			return a;
		}

		while (pos < length && (src[pos] == ' ' || src[pos] == '\t'))
			pos++;

		if (pos >= length) {
			cur_word = pos - 1;
			return new PT_O_EndOfLine();
		}

		cur_word = pos;

		char ch = src[pos++], ch1 = src[pos];

		switch (ch) {
		case '=':
			return new PT_O_Equal();
		case '(':
			return new PT_O_LParen();
		case ')':
			return new PT_O_RParen();
		case '~':

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -