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 20 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 výstupného súboru a zároveň sa generuje HTML stránka.
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úbor arp_vystup.txt neexistuje, vytvorí sa a zapíšu sa doň údaje zo štruktúry arp_struct. Táto je odrazom ARP tabuľky. Ak výstupný súbor existuje, vypíšu sa doň údaje zo štruktúry arpmon_struct a arpmonitor_struct. Ide o údaje z výstupného súboru doplnené o údaje z ARP tabuľky. Takto sa generuje aj výstupný súbor arp_vystup.html. Tento proces sa opakuje každých 20 sekúnd.
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 sú presmerované do vstupného súboru arp_vstup.txt. Do štruktúry sa z tohto súboru načítavajú IP adesy, k nim prislúchajúce MAC adresy a rozhrania (interfaces). Ak výstupné súbory ešte neboli vytvorené, vytvoria sa a zapíše sa do nich obsah zo štruktúry. Výstupné súbory sa dopĺňajú o nové údaje z ARP tabuľky. Vo výstupnom textovom súbore sú v riadkoch vypísané IP adresy, k nim prislúchajúce rozhrania a MAC adresy. S takýmto obsahom sa generuje aj html stránka. Údaje sú však zapísané do tabuľky. Získavanie obsahu ARP tabuľky, jeho následné spracovanie a výpis do súborov sa opakuje každých 20 sekúnd.
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. Pozostáva z dvoch jednorozmerných polí na ukladanie IP adries a rozhraní, dvojrozmerného poľa umožňujúceho uložiť viacero MAC adries pre jednu IP adresu a premennej, do ktorej sa ukladá počet MAC adries pre jednu IP adresu.
typedef struct{
char IPadd[d_ip];
char rozhranie[d_inf];
char MACadd[pocet_mac][d_mac];
int mac_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;
Globálne premenné:
arp_struct arp[pocet_poloziek];
arpmon_struct arpmon[pocet_poloziek];
arpmonitor_struct arpmon[pocet_poloziek];
int arp_count=0;
int arpmon_count=0;
int arpmonitor_count=0;
Identifikácia vstupného súboru:
FILE *fin;
Identifikácia výstupného textového súboru:
FILE *fout;
Identifikácia výstupného html súboru:
FILE *fhtml;
Identifikácia pomocného súboru:
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 na výpis IP adries zo štruktúry arp_struct do výstupného textového súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka(int w)
Funkcia na výpis IP adries zo štruktúry arp_struct do výstupného html súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka2(int w)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného textového súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka_1(int w)
Funkcia na výpis IP adries zo štruktúry arpmon_struct do výstupného html súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka_2(int w)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného textového súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka_11(int w)
Funkcia na výpis IP adries zo štruktúry arpmonitor_struct do výstupného html súboru. Argument slúži na určenie poradia IP adresy v štruktúre:
void ipcka_22(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného textového súboru. Argument slúži na určenie poradia MAC adresy v štruktúre:
void macadr(int w)
Funkcia na výpis MAC adries zo štruktúry arp_struct do výstupného html súboru. Argument slúži na určenie poradia MAC adresy v štruktúre:
void macadr2(int w)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného textového súboru. Argumenty slúžia na určenie poradia MAC adresy pre jednu IP adresu a pre určenie poradia MAC adresy v štruktúre:
void macadr_1(int w, int t)
Funkcia na výpis MAC adries zo štruktúry arpmon_struct do výstupného html súboru. Argumenty slúžia na určenie poradia MAC adresy pre jednu IP adresu a pre určenie poradia MAC adresy v štruktúre:
void macadr_2(int w, int t)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupnéhodo textového súboru. Argument slúži na určenie poradia MAC adresy v štruktúre:
void macadr_11(int w)
Funkcia na výpis MAC adries zo štruktúry arpmonitor_struct do výstupného html súboru. Argument slúži na určenie poradia MAC adresy v štruktúre:
void macadr_22(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného textového súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf(int w)
Funkcia na výpis rozhraní zo štruktúry arp_struct do výstupného html súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného textového súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf_1(int w)
Funkcia na výpis rozhraní zo štruktúry arpmon_struct do výstupného html súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf_2(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného textového súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf_11(int w)
Funkcia na výpis rozhraní zo štruktúry arpmonitor_struct do výstupného html súboru. Argument slúži na určenie poradia rozhrania v štruktúre:
void inf_22(int w)
Funkcia na načítanie IP adries, MAC adries a rozhraní zo vstupného súboru:
void read_struct()
Funkcia na načítanie IP adries, MAC adries a rozhraní z výstupného súboru:
void nacitanie()
Funkcia na porovnanie obsahov štruktúr:
porovnanie()
Funkcia na výpis IP, MAC adries a rozhraní do výstupného textového súboru:
void vypis_do_txt()
Funkcia na výpis IP, MAC adries a rozhraní do výstupného html súboru:
void vypis_do_html()
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.133 ether 00:18:F3:A1:43:AA C eth0
147.232.178.52 ether 00:02:44:04:25:A5 C eth0
147.232.178.194 ether 00:18:F3:B6:5A:1F C eth0
arp_vystup.txt
Do tohto súboru sa vypisujú IP adresy k nim prislúchajúce MAC adresy a rozhrania.
Napr.:
198.163.10.5 eth0 00:15:AB:2E:A5:14
148.156.20.9 eth0 00:51:AC:2E:AC:17 22:33:44:55:66:77
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.:
192.168.1.17 ra0 00:14:BF:D2:7A:C9
192.168.0.2 eth0 00:14:BF:EB:90:FD
Preklad programu
Zoznam zdrojových textov
Zdrojový kód programu:
arpmon.c
Externý CSS súbor:
styly.csc
Pomocný súbor:
html.txt
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ť :
cc -o arpmon arpmon.c | výsledkom je spustiteľný modul arpmon |
Po skompilovaní programu sa program spúšťa zadaním príkazu: $ ./arpmon. Program možno ukončiť stlačením: CTRL C.
--
IvanaKsenicova - 06 Apr 2007
--
IvanaKsenicova - 28 Oct 2007