Systemy Rozproszone Temat projektu: Regułowy system analizujacy logi Spis treści autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki Cel Projektu...2 Dane aplikacji...2 Technologia...2 Zarządzanie plikami...3 Regóły w aplikacji...3 Relacja równości...6 Relacja nierówności...6 Relacja relacja zawierania...7 Relacja relacja następstwa...7 Model UML...9 Wnioski...9 Projekt udostępniony na: http://code.google.com/p/log-analizator
Cel Projektu Celem projektu jest umożliwienie analizy pliku logów. W szczególności umożliwia on analizę logów z progrmu analizującego ruch w sieci - WireShark. Pozwala na zdefiniowanie reguł dotyczących atrybutów w danej kolumnie. Umożliwia wczytanie i zapis pliku o określonym formacie. Dane aplikacji Dane aplikacji wprowadzane są z menu aplikacji przez opcję Log z przedziału kolumna "No.","Time","Source","Destination". Definicja zakresu wartosciach. "No.","Time","Source","Destination","Protocol","Info" "1","0.000000","192.168.2.26","192.168.2.255","NBNS","Name query NB ISATAP<00>" "2","0.000924","169.254.241.58","169.254.255.255","NBNS","Name query NB ISATAP<00>" "3","0.035068","3com_9f:7d:06","Broadcast","ARP","Who has 192.168.2.195? Tell 192.168.2.165" "4","0.750808","fe80::4864:4a8f:5048:6ae5","ff02::1:3","LLMNR","Standard query A isatap" "5","0.751003","192.168.2.26","224.0.0.252","LLMNR","Standard query A isatap" "6","0.851334","fe80::4864:4a8f:5048:6ae5","ff02::1:3","LLMNR","Standard query A isatap" "7","0.851348","192.168.2.26","224.0.0.252","LLMNR","Standard query A isatap" "8","0.852112","fe80::3406:7da0:96fe:f13a","ff02::1:3","LLMNR","Standard query A isatap" "9","0.853040","169.254.241.58","224.0.0.252","LLMNR","Standard query A isatap" "10","1.051853","192.168.2.26","192.168.2.255","NBNS","Name query NB ISATAP<00>" "11","1.052862","169.254.241.58","169.254.255.255","NBNS","Name query NB ISATAP<00>" "12","1.134358","3com_9f:7d:06","Broadcast","ARP","Who has 192.168.2.61? Tell 192.168.2.165" Technologia Projekt został wykonany w technologii JAVA z wykorzystaniem komponentów Swing. Do wersjonowania i zarządzania projektem wykorzystaliśmy system Google Code. Projekt udostępniony został na: http://code.google.com/p/log-analizator Do wersjonowania wykorzystaliśmy system SVN udostępniony przez Google.
Zarządzanie plikami Wczytanie pliku do aplikacji odbywa się przez menu aplikacji Regóły w aplikacji
Wybór regół z aplikacji Wybór rególy odbywa się poprzez interfejs użytkownika przez okreslony scenariusz 1. Wybór kolumny której dotyczyc ma regóła 2. Wybór konkretnej regóły filtrującej 3. Ustawienie parametrów regóły 4. Dodanie regóły do zbioru regół Szczegóły implementacji /** * Model regol w systemie * @author sadzio
* public class RuleModel { private LinkedList<Rule> rulearraylist; private HashMap<Rule, Class> availablerulearraylist; public RuleModel() { rulearraylist = new LinkedList<Rule>(); availablerulearraylist = new HashMap<Rule, Class>(); // tu dodajemy zaimplementowane reguly availablerulearraylist.put(new EqualsRule(), EqualsRule.class); availablerulearraylist.put(new NotEqualsRule(), NotEqualsRule.class); availablerulearraylist.put(new MatchesRule(), MatchesRule.class); availablerulearraylist.put(new PairRule(), PairRule.class); public ArrayList<Rule> getavailablerulecollection() { ArrayList<Rule> arrret = new ArrayList<Rule>(); for (Entry<Rule, Class> entry : availablerulearraylist.entryset()) { arrret.add(entry.getkey()); return arrret; public Class getrulecless(rule rule) { return availablerulearraylist.get(rule); public HashMap<Rule, Class> getavailablerulearraylist() { return availablerulearraylist; public void setrulearraylist(linkedlist<rule> rulearraylist) { this.rulearraylist = rulearraylist; public List<Rule> getrulearraylist() { return rulearraylist; public void addruleaction(rule rule) { rulearraylist.add(rule); /** * sprawdza czy wiersz danych pasuje do wybranych regã³ł * @param row * @return public boolean isparsepositive(row row) { for (Rule rule : rulearraylist) { // stosule logiczny and na regulach if (!rule.isparsepositive(row)) return false; return true;
Relacja równości Wybór regół z aplikacji pozwala na filtrowanie wierszy o zadanej wartośici w wybranej kolumnie. Szczegóły implementacji /** * Regóła okreslająca rã³wność wartości * @author sadzio * public class EqualsRule extends Rule { public EqualsRule() { super(); @Override public String tostring() { return "EqualsRule:" + column.tostring() + "==" + stringvalue; public boolean isparsepositive(row row) { return row.getrovvalue(column).equals(stringvalue); public String getname() { return "EqualsRule"; Relacja nierówności Wybór regół z aplikacji pozwala na filtrowanie wierszy o wartości różnej od wybranej. Szczegóły implementacji /** * Regola okreslająca relacje nierownosci * @author sadzio * public class NotEqualsRule extends Rule { public NotEqualsRule() { super(); @Override public String tostring() {
return "NotEqualsRule:" + column.tostring() + "!=" + stringvalue; public boolean isparsepositive(row row) { return!row.getrovvalue(column).equals(stringvalue); public String getname() { return "NotEqualsRule"; Relacja relacja zawierania Wybór regół z aplikacji pozwala na filtrowanie wierszy októra zawiera w całości zadaną wartośić w wybranej kolumnie. Szczegóły implementacji /** * Regola okreslająca zawieranie sie w stringu zadanej wartości * @author sadzio * public class MatchesRule extends Rule { public MatchesRule() { super(); @Override public String tostring() { return "LikeRule:" + column.tostring() + " like " + stringvalue; public boolean isparsepositive(row row) { return row.getrovvalue(column).matches("*" + stringvalue + "*"); public String getname() { return "LikeRule"; Relacja relacja następstwa Wybór regół z aplikacji pozwala na zdefiniowanie regóły która pozwala zdefiniować pary gdzie wartości w zadanej kolumnie występują jeden po drógim w zadanej kolejności. Szczegóły implementacji
/** * Regola okreslająca wystepowania regoly pary w relacji następstwa pierwszej wartosci * dodanej (setvalue) po drugiej. * * @author sadzio * public class PairRule extends Rule { private String firststring1; private String secondstring2; boolean firststring; boolean prevmatch; private Row row; public PairRule(Column column, String value) { super(); this.column = column; this.stringvalue = value; public PairRule() { super(); @Override public String tostring() { return "PairRule:" + firststring1 + ">>" + secondstring2; public boolean isparsepositive(row row) { if (prevmatch) { boolean pos = row.getrovvalue(column).equals(secondstring2); if (pos) { prevmatch = false; this.row.setenable(); return true; prevmatch = row.getrovvalue(column).equals(firststring1); if (prevmatch) { this.row = row; return false; public String getname() { return "PrefixRule"; @Override public void setvelue(string text) { if (firststring) { secondstring2 = text; else { firststring = true; firststring1 = text; ;
Model UML Projekt jest podzielony na trzy niezależne części. Model danych, warstwę wizualizacyjną oraz analizator regółowy parser, który korzysta z powyżyszych. Głowną klasą jest View Odpowiada ona za prezentacje komponentów aplikacji. Zawiera w sobie elementy sterujące obiekty typu Action. Warstwę danych określają dwie klasy Rule i Column. Klasa Rule określa regółę jest ona bazą dle regół takich jak MatchesRule, PairRule, LikeRule, EqualsRule, NotEqualsRule. Wykorzystane są one w klasie zarządzającej regółami RuleModel. Definicę kolumny w aplikacji reprezentuje klasa Column, jest ona elementem ColumnModel, który określa struktórę pliku logu.
Wnioski Projekt został wykonany zgodnie z założeniami. Podczas pisania i aplikacji wykorzystaliśmy udostępnione przez Google narzędzia do zarządzania projektem. Portal do prowadzanie projektu google code znacznie ułatwił pracę. Usprawnił komunikację pomiędzy programistami i usestymatyzował proces tworzenia oprogramowania oraz zarządzania wersjami.