📄 ruleset.java
字号:
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 + -