Funkcia programu
Úlohou programu je načítať údaje z výstupných súborov generovaných hlavným programom, zotriediť dáta podľa pokynov používateľa a po zotriedení vygenerovať výstupné HTML stránky. Pre lepšiu orientáciu na stránkach sú IP res. MAC adresy nachádzajúce sa danom čase v ARP tabuľke zobrazené inou farbou ako adresy, ktoré sa v danom čase nepoužívajú.
Analýza programu
Program načíta údaje z výstupného súboru arp_vystup.txt do štruktúry sort_ip_struct a zo súboru arp_vystup_mac.txt do štruktúry sort_mac_struct. Výstupné súbory sú generované hlavným programom. Po načítaní sa dáta zotriedia podľa pokynov používateľa a vygenerujú sa výstupné HTML stránky.
Popis programu
Popis riešenia
Hlavný program generuje dve HTML stránky. Na jednej stránke je tabuľka s IP adresami, rozhraniami, MAC adresami a časmi (jendej IP adrese môže prislúchať viacero MAC adries a tým aj časov). Po kliknutí na odkaz nad niektorým zo stĺpcov sa vykoná CGI skript. Tento spustí program na triedenie s príslušnými parametrami. Program sort načíta potrebné údaje z výstupného textového súboru arp_vystup.txt generovaného hlavným programom do štruktúry sort_ip_struct. Vykoná sa triedenie a vygeneruje sa HTML stránka so zotriedenými údajmi. Po jednom kliknutí na odkaz sa vykoná vzostupné triedenie a po opätovnom kliknutí na ten istý odkaz sa vykoná zostupné triedenie. Na druhej stránke je tabuľka s MAC adresami, rozhraniami, IP adresami a časmi (jendej MAC adrese môže prislúchať viacero IP adries a tým aj časov). Po kliknutí na odkaz nad niektorým zo stĺpcov sa vykoná
CGI skript. Tento spustí program na triedenie s príslušnými parametrami. Program sort načíta potrebné údaje z výstupného textového súboru arp_vystup_mac.txt generovaného hlavným programom do štruktúry sort_mac_struct. Vykoná sa triedenie a vygeneruje sa HTML stránka so zotriedenými údajmi. Po jednom kliknutí na odkaz sa vykoná vzostupné triedenie a po opätovnom kliknutí na ten istý odkaz sa vykoná zostupné triedenie.
Popis údajových štruktúr, globálnych premenných
Štruktúry:
Do tejto štruktúry sa načítavajú potrebné údaje z výstupneho súboru arp_vystup.txt generovaného programom arpmonitor. Pozostáva z poľa, do ktorého sa ukladá rozhranie, dvojrozmerného poľa na ukladanie MAC adries prislúchajúcich jednej IP adrese a premenných, do ktorých sa ukladajú časy a IP adresa.
typedef struct{
int Ipa, Ipb, Ipc, Ipd;
char Inf[d_inf];
char Mac[p_mac][d_mac];
int mac_pocet;
int Rok_cas1[p_mac][1], Mesiac_cas1[p_mac][1], Den_cas1[p_mac][1], Hodina_cas1[p_mac][1], Minuta_cas1[p_mac][1], Sekunda_cas1[p_mac][1];
int cas1_pocet;
int Rok_cas2[p_mac][1], Mesiac_cas2[p_mac][1], Den_cas2[p_mac][1], Hodina_cas2[p_mac][1], Minuta_cas2[p_mac][1], Sekunda_cas2[p_mac][1];
int cas2_pocet;
} sort_ip_struct;
Do tejto štruktúry sa načítavajú potrebné údaje z výstupneho súboru arp_vystup_mac.txt generovaného programom arpmonitor. Pozostáva z poľa, do ktorého sa ukladá rozhranie, dvojrozmerného poľa na ukladanie IP adries prislúchajúcich jednej MAC adrese a premenných, do ktorých sa ukladajú časy a MAC adresa.
typedef struct{
char IP[p_ips][d_ip];
char INF[d_inf];
char MAC[d_mac];
int ip_pocet;
int Rok_cas11[p_mac][1], Mesiac_cas11[p_mac][1], Den_cas11[p_mac][1], Hodina_cas11[p_mac][1], Minuta_cas11[p_mac][1], Sekunda_cas11[p_mac][1];
int cas1_count;
int Rok_cas22[p_mac][1], Mesiac_cas22[p_mac][1], Den_cas22[p_mac][1], Hodina_cas22[p_mac][1], Minuta_cas22[p_mac][1], Sekunda_cas22[p_mac][1];
int cas2_count;
} sort_mac_struct;
Pole štruktúr popisujúce platné dlhé prepínače.
const struct option long_options[] = {
{ "ip", 0, NULL, 'i' },
{ "inf", 0, NULL, 'f' },
{ "mac", 0, NULL, 'm' },
{ "cas1", 0, NULL, 'c' },
{ "cas2", 0, NULL, 't' },
{ "cas11", 0, NULL, 'd' },
{ "cas22", 0, NULL, 'e' },
{ "vzostupne", 0, NULL, 'v' },
{ "zostupne", 0, NULL, 'z' },
{ "arp_vystup.txt", 0, NULL, 'a' },
{ "arp_vystup_mac.txt", 0, NULL, 'b' },
{ NULL, 0, NULL, 0 }
};
Globálne premenné:
Polia typu štruktúra:
sort_mac_struct mac[p_ip], macs[1];
sort_ip_struct ip[p_ip], ips[1];
Počty načítaných MAC resp. IP adries sú uložené v premenných:
int pocet_mac;
int pocet_ip;
Identifikácia vstupných súborov:
FILE *in, *vstup;
Identifikácia výstupných súborov:
FILE *out, *vystup;
Premenné, do ktorých sa načítavajú časy výstupných textových súborov vygenerovaných programom arpmonitor:
int den, mesiac, rok, hodina, minuta, sekunda;
int dn, m, rk, hod, min, sek;
Popis funkcií
Hlavná funkcia programu:
main(int argc, char *argv[])
Funkcia, ktorá skopíruje obsah súboru html.txt do výstupného súboru triedeny_ip_vystup.html:
void html()
Funkcia, ktorá skopíruje obsah súboru html2.txt do výstupného súboru triedeny_mac_vystup.html:
void htm2l()
Funkcia na načítanie IP adries, MAC adries, rozhraní a časov z výstupného súboru arp_vystup.txt:
void NacitanieIpStruktura()
Funkcia na načítanie MAC adries, IP adries, rozhraní a časov z výstupného súboru arp_vystup_mac.txt:
void NacitanieMacStruktura()
Funkcia na triedenie podľa IP adries. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_ip(int d)
Funkcia na triedenie podľa času, kedy bola IP adresa prvýkrát zaznamenaná v ARP tabuľke od spustenia programu. Triedia sa časy prislúchajúce jednej IP adrese. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_inter_cas1(int d)
Funkcia na triedenie podľa času, kedy bola IP adresa prvýkrát zaznamenaná v ARP tabuľke od spustenia programu. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_cas1(int d)
Funkcia na triedenie podľa času, kedy bola IP adresa poslednýkrát zaznamenaná v ARP tabuľke od spustenia programu. Triedia sa časy prislúchajúce jednej IP adrese. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_inter_cas2(int d)
Funkcia na triedenie podľa času, kedy bola IP adresa poslednýkrát zaznamenaná v ARP tabuľke od spustenia programu. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_cas2(int d)
Funkcia na triedenie podľa MAC adries. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_mac(int d)
Funkcia na triedenie podľa rozhraní. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_inf(int d)
Funkcia na triedenie podľa času, kedy bola MAC adresa prvýkrát zaznamenaná v ARP tabuľke od spustenia programu. Triedia sa časy prislúchajúce jednej MAC adrese. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_inter_cas11(int d)
Funkcia na triedenie podľa času, kedy bola MAC adresa prvýkrát zaznamenaná v ARP tabuľke od spustenia programu. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_cas11(int d)
Funkcia na triedenie podľa času, kedy bola MAC adresa poslednýkrát zaznamenaná v ARP tabuľke od spustenia programu. Triedia sa časy prislúchajúce jednej MAC adrese. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_inter_cas22(int d)
Funkcia na triedenie podľa času, kedy bola MAC adresa poslednýkrát zaznamenaná v ARP tabuľke od spustenia programu. Argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie.
void sort_cas22(int d)
Funkcia na výpis IP adries do výstupného HTML súboru triedeny_ip_vystup.html. Argument slúži na určenie poradia IP adresy v štruktúre.
void IpIpHtml(int w)
Funkcia na výpis rozhraní do výstupného HTML súboru triedeny_ip_vystup.html. Argument slúži na určenie poradia rozhrania v štruktúre.
void InfIpHtml(int w)
Funkcia na výpis MAC adries do výstupného HTML súboru triedeny_ip_vystup.html. Argumenty slúžia na určenie poradia MAC adresy pre jednu IP adresu a pre určenie poradia MAC adresy v štruktúre.
void MacIpHtml(int w, int t)
Funkcia na výpis času prvého záznamu IP adresy v ARP tabuľke do výstupného HTML súboru triedeny_ip_vystup.html. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre.
void Cas1IpHtml(int w, int t)
Funkcia na výpis času posledného záznamu IP adresy v ARP tabuľke do výstupného HTML súboru triedeny_ip_vystup.html. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre.
void Cas2IpHtml(int w, int t)
Funkcia na výpis IP adries do výstupného HTML súboru triedeny_mac_vystup.html. Argumenty slúžia na určenie poradia IP adresy pre jednu MAC adresu a pre určenie poradia IP adresy v štruktúre.
void IpMacHtml(int w, int t)
Funkcia na výpis rozhraní do výstupného HTML súboru triedeny_mac_vystup.html. Argument slúži na určenie poradia rozhrania v štruktúre.
void InfMacHtml(int w)
Funkcia na výpis MAC adries do výstupného HTML súboru triedeny_mac_vystup.html. Argument slúži na určenie poradia MAC adresy v štruktúre.
void MacMacHtml(int w)
Funkcia na výpis času prvého záznamu MAC adresy v ARP tabuľke do výstupného HTML súboru triedeny_mac_vystup.html. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre.
void Cas1MacHtml(int w, int t)
Funkcia na výpis času posledného záznamu MAC adresy v ARP tabuľke do výstupného HTML súboru triedeny_mac_vystup.html. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre.
void Cas2MacHtml(int w, int t)
Funkcia na výpis legendy do HTML súboru triedeny_ip_vystup.html
void LegendaIp()
Funkcia na výpis legendy do HTML súboru triedeny_mac_vystup.html
void LegendaMac()
Funkcia na výpis IP, MAC adries, časov a rozhraní do výstupného HTML súboru triedeny_ip_vystup.html. Jeden argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie a druhý určuje, ktorý CGI skrip sa má vypísať.
void VypisIpHtml(int d, int parameter)
Funkcia na výpis IP, MAC adries, časov a rozhraní do výstupného HTML súboru triedeny_mac_vystup.html. Jeden argument určuje, či sa má vykonať vzostupné alebo zostupné triedenie a druhý určuje, ktorý CGI skrip sa má vypísať.
void VypisMacHtml(int d, int parameter)
Hierarchia funkcií
Diagram objektov
Popis vstupných a výstupných súborov
Zoznam zdrojových textov
Zdrojový kód programu:
sort.c
Externý CSS súbor:
styly.csc
Pomocné súbory:
html.txt
html2.txt
Vstupné súbory (generované hlavným súborom):
arp_vystup.txt
arp_vystup_mac.txt
CGI programy:
ip_vzostupne.cgi
ip_zostupne.cgi
inf_vzostupne.cgi
inf_zostupne.cgi
mac_vzostupne.cgi
mac_zostupne.cgi
cas1_vzostupne.cgi
cas1_zostupe.cgi
cas2_vzostupne.cgi
cas2_zostupne.cgi
cas11_vzostupne.cgi
cas11_zostupe.cgi
cas22_vzostupne.cgi
cas22_zostupne.cgi
--
IvanaKsenicova - 29 May 2008