Funkcia programu
Funkciou programu je monitorovať zmeny v ARP tabuľke v malých LAN sieťach, t.j. v sieťach s jedným smerovačom (router). ARP tabuľka sa načítava každých 5 sekúnd. Obsah vstupného súboru sa získava prostredníctvom príkazu arp -n. Obsah vstupného súboru sa spracuje a potrebné údaje sa zapisujú do dvoch výstupných textových súborov a zároveň sa generujú dve HTML stránky. Do jedného súboru a stránky sa zapisujú IP adresy a k nim prislúchajúce rozhrania (interface), MAC adresy a časy (čas, keď bola IP adresa s príslušnou MAC adresou prvýkrát zaznamenaná v ARP tabuľke a čas posledného záznamu IP adresy s príslušnou MAC adresou v ARP tabuľke). V druhom súbore a stránke sa k MAC adresám vypisujú rozhrania (interface), IP adresy a časy (čas, keď bola MAC adresa s príslušnou IP adresou prvýkrát zaznamenaná v ARP tabuľke a čas posledného záznamu MAC adresy s príslušnou IP adresou v ARP tabuľke). Údaje na stránkach je možné triediť vzostupne i zostupne. 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 prostredníctvom príkazu arp -n získava obsah ARP tabuľky. Prostredníctvom funkcie system() a príkazu grep (system("arp -n | grep ether > arp_vstup.txt")) sa z ARP tabuľky získajú len korektné riadky a presmerujú sa do vstupného súboru arp_vstup.txt. Dáta zo vstupného súboru sú načítavané do štruktúry. V prípade, že výstupné súbory arp_vystup.txt a arp_vystup_mac.txt neexistujú, vytvoria sa a zapíšu sa do nich údaje zo štruktúry arp_struct. Táto je odrazom ARP tabuľky. Ak výstupné súbory existujú, do súboru arp_vystup.txt sa vypíšu údaje zo štruktúr arpmon_struct a arpmonitor_struct a do súboru arp_vystup_mac.txt sa vypíšu údaje zo štruktúr arpmonitorMac_struct a arpmonMac_struct. Ide o údaje z výstupných súborov doplnené o údaje z ARP tabuľky. Takto sa generujú aj výstupné súbory arp_vystup.html a arp_vystup_mac.html. Tento proces sa opakuje každých 5 sekúnd. Na stránkach je možné vzostupné i zostupné triedenie podľa pokynov používateľa. Po kliknutí na odkaz nad niektorým zo stĺpcov sa vykoná 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 programu
Popis riešenia
Program prostredníctvom príkazu arp -n získava obsah ARP tabuľky. Z ARP tabuľky sa získavajú len korektné riadky pre ďalšie spracovanie a tie sú presmerované do vstupného súboru arp_vstup.txt. Do štruktúry arpmon_struct sa z tohto súboru načítavajú IP adesy, k nim prislúchajúce MAC adresy, rozhrania (interfaces) a časy. Do štruktúry arpmonMac_struct sa z vstupného súboru načítavajú MAC adesy, k nim prislúchajúce IP adresy, rozhrania (interfaces) a časy. Ak výstupné súbory ešte neboli vytvorené, vytvoria sa a zapíše sa do nich obsah zo štruktúry arp_struct. Výstupné súbory sa dopĺňajú o nové údaje z ARP tabuľky. V jednom výstupnom textovom súbore sú v riadkoch vypísané IP adresy, k nim prislúchajúce rozhrania, MAC adresy a časy. V druhom textovom súbore sú v tiež v riadkoch vypísané MAC adresy, k nim prislúchajúce rozhrania, IP adresy a časy. S takýmito obsahmi sa generujú aj html stránky. Údaje sú však zapísané do tabuliek. Získavanie obsahu ARP tabuľky, jeho následné spracovanie a výpis do súborov sa opakuje každých 5 sekúnd. Údaje na stránkach je možné triediť. 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 vykoná 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:
Zo vstupného súboru sú do tejto štruktúry načítavané potrebné informácie. Štruktúra pozostáva z troch polí, do ktorých sa ukladajú IP a MAC adresy a rozhrania.
typedef struct{
char IP[d_ip];
char interface[d_inf];
char MAC[ d_mac];
} arp_struct;
Do štruktúry sa načítavajú informácie z výstupného súboru arp_vystup.txt. Pozostáva z dvoch jednorozmerných polí na ukladanie IP adries a rozhraní, troch dvojrozmerných polí umožňujúcich uložiť viacero MAC adries a časov pre jednu IP adresu, a troch premenných, do ktorých sa ukladá počet MAC adries a počet časov pre jednu IP adresu.
typedef struct{
char IPadd[d_ip];
char rozhranie[d_inf];
char MACadd[pocet_mac][d_mac];
int mac_count;
char cas1[pocet_mac][d_cas];
int cas1_count;
char cas2[pocet_mac][d_cas];
int cas2_count;
} arpmon_struct;
Funkcia porovnanie() porovnáva obsahy predchádzajúcich štruktúr. Údaje, ktoré sú v štruktúre arp_struct, ale ešte sa nenachádzajú v štruktúre arpmon_struct sa zapisujú do nasledujúcej štruktúry. Je zložená z troch polí na ukladanie IP a MAC adries a rozhraní.
typedef struct{
char IPadresa[d_ip];
char interf[d_inf];
char MACadresa[d_mac];
} arpmonitor_struct;
Do štruktúry sa načítavajú informácie z výstupného súboru arp_vystup_mac.txt. Pozostáva z dvoch jednorozmerných polí na ukladanie MAC adries a rozhraní, troch dvojrozmerných polí umožňujúcich uložiť viacero IP adries a časov pre jednu MAC adresu, a troch premenných, do ktorých sa ukladá počet IP adries a počet časov pre jednu MAC adresu.
typedef struct{
char IpAdd[pocet_mac][d_ip];
char Rozhranie[d_inf];
char MacAdd[d_mac];
int ip_count;
char time1[pocet_mac][d_cas];
int time1_count;
char time2[pocet_mac][d_cas];
int time2_count;
} arpmonMac_struct;
Funkcia porovnanie() porovnáva obsahy štruktúr arp_struct a arpmonMac_struct. Údaje, ktoré sú v štruktúre arp_struct, ale ešte sa nenachádzajú v štruktúre arpmonMac_struct sa zapisujú do nasledujúcej štruktúry. Je zložená z troch polí na ukladanie IP a MAC adries a rozhraní.
typedef struct{
char IpAdresa[d_ip];
char Interf[d_inf];
char MacAdresa[d_mac];
} arpmonitorMac_struct;
Štruktúra obsahujúca kalendárny dátum a čas.
struct tm * timeinfo;
Globálne premenné:
Polia typu štruktúra:
arp_struct arp[pocet_poloziek];
arpmon_struct arpmon[pocet_poloziek];
arpmonitor_struct arpmon[pocet_poloziek];
arpmonMac_struct arpmonMac[pocet_poloziek];
arpmonitorMac_struct arpmonitorMac[pocet_poloziek];
Počty načítaných MAC resp. IP adries pre príslušnú čtruktúru:
int arp_count=0;
int arpmon_count=0;
int arpmonitor_count=0;
int arpmonMac_count=0;
int arpmonitorMac_count=0;
Premenné potrebné na zaznamenanie dátumu a času:
time_t rawtime;
char buffer[d_cas];
Identifikácia vstupného súboru:
FILE *fin;
Identifikácia výstupných textových súborov:
FILE *fout;
FILE *out;
Identifikácia výstupného html súboru:
FILE *fhtml;
Identifikácia pomocných súborov:
FILE *html2;
FILE *f_html;
Popis funkcií
Hlavná funkcia programu:
int main()
Funkcia, ktorá skopíruje obsah súboru html.txt do výstupného súboru arp_vystup.html:
void html()
Funkcia, ktorá skopíruje obsah súboru html2.txt do výstupného súboru arp_vystup_mac.html:
void html2()
Funkcia na výpis IP adries zo štruktúry arp_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpTxtArp(int w)
Funkcia na výpis IP adries zo štruktúry arp_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpHtmlArp(int w)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpTxtArpmon(int w)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpHtmlArpmon(int w)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpTxtArpmonitor(int w)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpHtmlArpmonitor(int w)
Funkcia na výpis IP adries zo štruktúry arp_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpTxtArp2(int w)
Funkcia na výpis IP adries zo štruktúry arp_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpHtmlArp2(int w)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup_mac.txt. Argumenty slúžia na určenie poradia IP adresy pre jednu MAC adresu a pre určenie poradia IP adresy v štruktúre:
void IpTxtArpmon2(int w, int t)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného html súboru arp_vystup_mac.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 IpHtmlArpmon2(int w, int t)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpTxtArpmonitor2(int w)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia IP adresy v štruktúre:
void IpHtmlArpmonitor2(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacTxtArp(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacHtmlArp(int w)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup.txt. Argumenty slúžia na určenie poradia MAC adresy pre jednu IP adresu a pre určenie poradia MAC adresy v štruktúre:
void MacTxtArpmon(int w, int t)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného html súboru arp_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 MacHtmlArpmon(int w, int t)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupnéhodo textového súboru arp_vystup.txt. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacTxtArpmonitor(int w)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacHtmlArpmonitor(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacTxtArp2(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacHtmlArp2(int w)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacTxtArpmon2(int w)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacHtmlArpmon2(int w)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupnéhodo textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacTxtArpmonitor2(int w)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia MAC adresy v štruktúre:
void MacHtmlArpmonitor2(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void InfTxtArp(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArp(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfTxtArpmon(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArpmon(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného textového súboru arp_vystup.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfTxtArpmonitor(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArpmonitor(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void InfTxtArp2(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArp2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfTxtArpmon2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArpmon2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného textového súboru arp_vystup_mac.txt. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfTxtArpmonitor2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného html súboru arp_vystup_mac.html. Argument slúži na určenie poradia rozhrania v štruktúre:
void void InfHtmlArpmonitor2(int w)
Funkcia na načítanie IP adries, MAC adries a rozhraní zo vstupného súboru:
void CitanieArp()
Funkcia na načítanie IP adries, MAC adries, rozhraní a časov z výstupného súboru arp_vystup.txt:
void CitanieSubor()
Funkcia na načítanie MAC adries, IP adries, rozhraní a časov z výstupného súboru arp_vystup_mac.txt:
void CitanieSubor2()
Funkcia na porovnanie obsahov štruktúr:
void Porovnanie()
Funkcia na porovnanie obsahov štruktúr:
void Porovnanie2()
Funkcia na výpis IP, MAC adries, rozhraní a časov do výstupného textového súboru arp_vystup.txt:
void VypisTxt()
Funkcia na výpis IP, MAC adries a rozhraní do výstupného html súboru arp_vystup.html:
void VypisHtml()
Funkcia na výpis MAC, IP adries, rozhraní a časov do výstupného textového súboru arp_vystup_mac.txt:
void VypisTxtMac()
Funkcia na výpis MAC, IP adries a rozhraní do výstupného html súboru arp_vystup_mac.html:
void VypisHtmlMac()
Funkcia na výpis času prvého zaznamenania IP adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup.txt. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre:
void Cas1TxtArpmon(int w, int t)
Funkcia na výpis času prvého zaznamenania MAC adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup_mac.txt. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre:
void Cas1TxtArpmon2(int w, int t)
Funkcia na výpis času posledného zaznamenania IP adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup.txt. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre:
void Cas2TxtArpmon(int w, int t)
Funkcia na výpis času posledného zaznamenania MAC adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup_mac.txt. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre:
void Cas2TxtArpmon2(int w, int t)
Funkcia na výpis času prvého zaznamenania IP adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup.html. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre:
void Cas1HtmlArpmon(int w, int t)
Funkcia na výpis času prvého zaznamenania MAC adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup_mac.html. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre:
void Cas1HtmlArpmon2(int w, int t)
Funkcia na výpis času posledného zaznamenania IP adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup.html. Argumenty slúžia na určenie poradia času pre jednu IP adresu a pre určenie poradia času v štruktúre:
void Cas2HtmlArpmon(int w, int t)
Funkcia na výpis času posledného zaznamenania MAC adresy v ARP tabuľke zo štruktúry arpmon_struct do súboru arp_vystup_mac.html. Argumenty slúžia na určenie poradia času pre jednu MAC adresu a pre určenie poradia času v štruktúre:
void Cas2HtmlArpmon2(int w, int t)
Funkcia na výpis legendy do súboru arp_vystup.html:
void LegendaIP()
Funkcia na výpis legendy do súboru arp_vystup_mac.html:
void LegendaMac()
Hierarchia funkcií
Diagram objektov
Popis vstupných a výstupných súborov
arp_vstup.txt
Do tohto súboru je presmerovaný obsah ARP tabuľky. Údaje z tohoto vstupného súboru sú ďalej spracovávané. Obsah súboru môže vyzerať následovne:
147.232.178.5 ether 56:55:AA:CC:EE:44 C eth0
147.232.178.4 ether 22:52:22:CA:5E:45 C eth0
147.232.178.1 ether 10:13:C3:17:EE:44 C eth0
arp_vystup.txt
Do tohto súboru sa vypisujú IP adresy k nim prislúchajúce MAC adresy, rozhrania a časy.
Napr.:
147.232.178.3 eth0 44:52:AB:CA:5E:45 31.05.2008 18:20:58 31.05.2008 18:21:08
147.232.178.2 eth0 33:55:AA:CC:EE:44 31.05.2008 18:20:58 31.05.2008 18:21:08
56:55:AA:CC:EE:44 31.05.2008 18:22:50 31.05.2008 18:23:28
147.232.178.1 eth0 00:13:C3:17:EE:44 31.05.2008 18:20:58 31.05.2008 18:22:55
arp_vystup_mac.txt
Do tohto súboru sa vypisujú MAC adresy k nim prislúchajúce IP adresy, rozhrania a časy.
Napr.:
00:13:C3:17:EE:44 eth0 147.232.178.1 31.05.2008 18:20:58 31.05.2008 18:22:55
56:55:AA:CC:EE:44 eth0 147.232.178.2 31.05.2008 18:22:50 31.05.2008 18:23:28
147.232.178.5 31.05.2008 18:24:35 31.05.2008 18:24:40
22:52:22:CA:5E:45 eth0 147.232.178.4 31.05.2008 18:22:50 31.05.2008 18:24:40
arp_vystup.html
Do tohto súboru sa vypisujú IP adresy k nim prislúchajúce MAC adresy a rozhrania. Údaje sú vypísané do tabuľky.
Napr.:
arp_vystup_mac.html
Do tohto súboru sa vypisujú IP adresy k nim prislúchajúce MAC adresy a rozhrania. Údaje sú vypísané do tabuľky.
Napr.:
Preklad programu
Zoznam zdrojových textov
Zdrojový kód programu:
arpmon.c
Externý CSS súbor:
styly.csc
Pomocné súbory:
html2.txt
html.txt
Súbor s pravidlami prekladu:
makefile
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
Vlastný preklad
Pod systémom UNIX je na preklad zdrojových textov možné použiť gcc prekladač. Zdrojový text programu je teda možné prekompilovať :
gcc -o arpmonitor arpmonitor.c | výsledkom je spustiteľný modul arpmonitor |
Po skompilovaní programu sa program spúšťa zadaním príkazu: $ ./arpmonitor.
Program možno ukončiť stlačením: CTRL C.
Na proces prekladu sa tiež používa program
make, ktorý je jedným zo základných a najdôležitejších nástrojov pre údržbu programov pod operačným systémom Unix. Nástroj make implicitne predpokladá, že pravidlá prekladu sú uložené v súbore s menom makefile. Oba programy je možné prekompilovať napísaním make v konzolovom okne. Po skompilovaní programu sa program spúšťa zadaním príkazu: $ ./arpmonitor. Program možno ukončiť stlačením: CTRL C.
Je potrebné mať nainštalovaný HTTP webový server a nakonfigurovaný tak, aby vykonával CGI skripty.
-- IvanaKsenicova - 25 May 2008