279
278
struct portlistent *ctmp = NULL;
281
280
if (list->head != NULL)
282
ctmp = list->head->next_entry;
281
ctmp = list->head->next_entry;
284
283
while (ptmp != NULL) {
289
ctmp = ctmp->next_entry;
288
ctmp = ctmp->next_entry;
293
void printport(struct portlist *list, unsigned int protocol,
294
unsigned int port, int br, unsigned int idx, int fromto,
295
struct porttab *ports, int servnames)
292
void updateportent(struct portlist *list, unsigned int protocol,
293
unsigned int sport, unsigned int dport, int br,
294
unsigned int idx, struct porttab *ports, int servnames)
297
struct portlistent *listent;
296
struct portlistent *sport_listent = NULL;
297
struct portlistent *dport_listent = NULL;
300
if (goodport(port, ports)) {
301
listent = inportlist(list, protocol, port);
303
if ((listent == NULL) && (!nomem))
305
addtoportlist(list, protocol, port, &nomem, servnames);
311
listent->bcount += br;
312
listent->spans.spanbr += br;
314
if (fromto == 0) { /* from */
315
listent->obcount += br;
316
listent->spans.spanbr_out += br;
319
listent->ibcount += br;
320
listent->spans.spanbr_in += br;
324
printportent(list, listent, idx);
300
if (goodport(sport, ports)) {
301
sport_listent = inportlist(list, protocol, sport);
303
if ((sport_listent == NULL) && (!nomem))
305
addtoportlist(list, protocol, sport, &nomem, servnames);
307
if (sport_listent == NULL)
310
sport_listent->count++;
311
sport_listent->bcount += br;
312
sport_listent->spans.spanbr += br;
314
sport_listent->obcount += br;
315
sport_listent->spans.spanbr_out += br;
316
sport_listent->ocount++;
319
if (goodport(dport, ports)) {
320
dport_listent = inportlist(list, protocol, dport);
322
if ((dport_listent == NULL) && (!nomem))
324
addtoportlist(list, protocol, dport, &nomem, servnames);
326
if (dport_listent == NULL)
329
if (dport_listent != sport_listent) {
330
dport_listent->count++;
331
dport_listent->bcount += br;
332
dport_listent->spans.spanbr += br;
335
dport_listent->ibcount += br;
336
dport_listent->spans.spanbr_out += br;
337
dport_listent->icount++;
339
if (sport_listent != NULL || dport_listent != NULL) {
340
if (sport_listent != NULL)
341
printportent(list, sport_listent, idx);
342
if (dport_listent != NULL && dport_listent != sport_listent)
343
printportent(list, dport_listent, idx);
329
348
* Swap two port list entries. p1 must be previous to p2.
332
351
void swapportents(struct portlist *list,
333
struct portlistent *p1, struct portlistent *p2)
352
struct portlistent *p1, struct portlistent *p2)
335
354
register unsigned int tmp;
336
355
struct portlistent *p1prevsaved;
337
356
struct portlistent *p2nextsaved;
343
362
p1->idx = p2->idx;
346
365
if (p1->prev_entry != NULL)
347
p1->prev_entry->next_entry = p2;
366
p1->prev_entry->next_entry = p2;
351
370
if (p2->next_entry != NULL)
352
p2->next_entry->prev_entry = p1;
371
p2->next_entry->prev_entry = p1;
356
375
p2nextsaved = p2->next_entry;
357
376
p1prevsaved = p1->prev_entry;
359
378
if (p1->next_entry == p2) {
363
p2->next_entry = p1->next_entry;
364
p1->prev_entry = p2->prev_entry;
365
p2->prev_entry->next_entry = p1;
366
p1->next_entry->prev_entry = p2;
382
p2->next_entry = p1->next_entry;
383
p1->prev_entry = p2->prev_entry;
384
p2->prev_entry->next_entry = p1;
385
p1->next_entry->prev_entry = p2;
369
388
p2->prev_entry = p1prevsaved;
638
658
wmove(*win, 8, 2);
639
659
tx_printkeyhelp("O", " - bytes to", *win, DLGHIGHATTR, DLGTEXTATTR);
640
660
wmove(*win, 9, 2);
641
tx_printkeyhelp("F", " - packets from", *win, DLGHIGHATTR, DLGTEXTATTR);
661
tx_printkeyhelp("F", " - packets from", *win, DLGHIGHATTR,
642
663
wmove(*win, 10, 2);
643
664
tx_printkeyhelp("M", " - bytes from", *win, DLGHIGHATTR, DLGTEXTATTR);
644
665
wmove(*win, 11, 2);
645
tx_printkeyhelp("Any other key", " - cancel sort", *win, DLGHIGHATTR, DLGTEXTATTR);
666
tx_printkeyhelp("Any other key", " - cancel sort", *win, DLGHIGHATTR,
650
void update_serv_rates(struct portlist *list, WINDOW *win, int actmode,
672
void update_serv_rates(struct portlist *list, WINDOW * win, int actmode,
653
675
char act_unit[10];
654
676
float inrate, outrate, totalrate;
655
677
time_t now = time(NULL);
657
679
dispmode(actmode, act_unit);
659
681
if (actmode == KBITS) {
660
inrate = (float) (list->barptr->spans.spanbr_in * 8 / 1000) / (float) (now - list->barptr->starttime);
661
outrate = (float) (list->barptr->spans.spanbr_out * 8 / 1000) / (float) (now - list->barptr->starttime);
662
totalrate = (float) (list->barptr->spans.spanbr * 8 / 1000) / (float) (now - list->barptr->starttime);
683
(float) (list->barptr->spans.spanbr_in * 8 / 1000) /
684
(float) (now - list->barptr->starttime);
686
(float) (list->barptr->spans.spanbr_out * 8 / 1000) /
687
(float) (now - list->barptr->starttime);
689
(float) (list->barptr->spans.spanbr * 8 / 1000) /
690
(float) (now - list->barptr->starttime);
664
inrate = (float) (list->barptr->spans.spanbr_in / 1024) / (float) (now - list->barptr->starttime);
665
outrate = (float) (list->barptr->spans.spanbr_out / 1024) / (float) (now - list->barptr->starttime);
666
totalrate = (float) (list->barptr->spans.spanbr / 1024) / (float) (now - list->barptr->starttime);
693
(float) (list->barptr->spans.spanbr_in / 1024) / (float) (now -
698
(float) (list->barptr->spans.spanbr_out / 1024) /
699
(float) (now - list->barptr->starttime);
701
(float) (list->barptr->spans.spanbr / 1024) / (float) (now -
669
707
wattrset(win, IPSTATLABELATTR);
670
mvwprintw(win, 0, 1, "Protocol data rates (%s/s): in out total", act_unit);
709
"Protocol data rates (%s/s): in out total",
671
711
wattrset(win, IPSTATATTR);
672
mvwprintw(win, 0, 31, "%10.2f", inrate);
673
mvwprintw(win, 0, 46, "%10.2f", outrate);
712
mvwprintw(win, 0, 31, "%10.2f", inrate);
713
mvwprintw(win, 0, 46, "%10.2f", outrate);
674
714
mvwprintw(win, 0, 61, "%10.2f", totalrate);
676
716
bzero(&(list->barptr->spans), sizeof(struct serv_spans));
677
717
list->barptr->starttime = time(NULL);
820
862
mvwprintw(statwin, 0, 1, "No entries");
824
866
while (!exitloop) {
825
getpacket(fd, buf, &fromaddr, &ch, &br, iface, list.win);
831
if (list.barptr != NULL) {
832
if (list.barptr->prev_entry != NULL) {
833
serv_tmp = list.barptr;
834
set_barptr((char **) &(list.barptr),
835
(char *) list.barptr->prev_entry,
836
&(list.barptr->prev_entry->starttime),
837
(char *) &(list.barptr->prev_entry->spans),
838
sizeof(struct serv_spans), statwin, &statcleared, statx);
839
printportent(&list, serv_tmp, idx);
841
if (list.baridx == 1) {
842
scrollservwin(&list, SCROLLDOWN, &idx);
846
printportent(&list, list.barptr, idx);
851
if (list.barptr != NULL) {
852
if (list.barptr->next_entry != NULL) {
853
serv_tmp = list.barptr;
854
set_barptr((char **) &(list.barptr),
855
(char *) list.barptr->next_entry,
856
&(list.barptr->next_entry->starttime),
857
(char *) &(list.barptr->next_entry->spans),
858
sizeof(struct serv_spans), statwin, &statcleared, statx);
859
printportent(&list, serv_tmp, idx);
861
if (list.baridx == list.imaxy) {
862
scrollservwin(&list, SCROLLUP, &idx);
866
printportent(&list, list.barptr, idx);
872
if (list.barptr != NULL) {
873
pageservwin(&list, SCROLLDOWN, &idx);
875
set_barptr((char **) &(list.barptr), (char *) (list.lastvisible),
876
&(list.lastvisible->starttime),
877
(char *) &(list.lastvisible->spans),
878
sizeof(struct serv_spans), statwin, &statcleared, statx);
879
list.baridx = list.lastvisible->idx - idx + 1;
881
refresh_serv_screen(&list, idx);
886
if (list.barptr != NULL) {
887
pageservwin(&list, SCROLLUP, &idx);
889
set_barptr((char **) &(list.barptr), (char *) (list.firstvisible),
890
&(list.firstvisible->starttime),
891
(char *) &(list.firstvisible->spans),
892
sizeof(struct serv_spans), statwin, &statcleared, statx);
895
refresh_serv_screen(&list, idx);
905
show_portsort_keywin(&sortwin, &sortpanel);
916
} else if (keymode == 1) {
917
del_panel(sortpanel);
919
sortportents(&list, &idx, ch);
921
if (list.barptr != NULL) {
922
set_barptr((char **) &(list.barptr), (char *) list.firstvisible,
923
&(list.firstvisible->starttime),
924
(char *) &(list.firstvisible->spans),
925
sizeof(struct serv_spans), statwin, &statcleared, statx);
928
refresh_serv_screen(&list, idx);
867
gettimeofday(&tv, NULL);
869
unow = tv.tv_sec * 1e+6 + tv.tv_usec;
871
if (now - timeint >= 5) {
872
printelapsedtime(starttime, now, LINES - 4, 20,
876
if (((now - startlog) >= options->logspan) && (logging)) {
877
writeutslog(list.head, now - starttime, options->actmode,
882
if (list.barptr != NULL) {
883
if ((now - list.barptr->starttime) >= 5) {
884
update_serv_rates(&list, statwin, options->actmode,
889
if (((options->updrate != 0)
890
&& (now - updtime >= options->updrate))
891
|| ((options->updrate == 0)
892
&& (unow - updtime_usec >= DEFAULT_UPDATE_DELAY))) {
898
check_rotate_flag(&logfile, logging);
900
if ((facilitytime != 0)
901
&& (((now - starttime) / 60) >= facilitytime))
904
getpacket(fd, buf, &fromaddr, &ch, &br, iface, list.win);
910
if (list.barptr != NULL) {
911
if (list.barptr->prev_entry != NULL) {
912
serv_tmp = list.barptr;
913
set_barptr((char **) &(list.barptr),
914
(char *) list.barptr->prev_entry,
915
&(list.barptr->prev_entry->
917
(char *) &(list.barptr->prev_entry->
919
sizeof(struct serv_spans), statwin,
920
&statcleared, statx);
921
printportent(&list, serv_tmp, idx);
923
if (list.baridx == 1) {
924
scrollservwin(&list, SCROLLDOWN, &idx);
928
printportent(&list, list.barptr, idx);
933
if (list.barptr != NULL) {
934
if (list.barptr->next_entry != NULL) {
935
serv_tmp = list.barptr;
936
set_barptr((char **) &(list.barptr),
937
(char *) list.barptr->next_entry,
938
&(list.barptr->next_entry->
940
(char *) &(list.barptr->next_entry->
942
sizeof(struct serv_spans), statwin,
943
&statcleared, statx);
944
printportent(&list, serv_tmp, idx);
946
if (list.baridx == list.imaxy) {
947
scrollservwin(&list, SCROLLUP, &idx);
951
printportent(&list, list.barptr, idx);
957
if (list.barptr != NULL) {
958
pageservwin(&list, SCROLLDOWN, &idx);
960
set_barptr((char **) &(list.barptr),
961
(char *) (list.lastvisible),
962
&(list.lastvisible->starttime),
963
(char *) &(list.lastvisible->spans),
964
sizeof(struct serv_spans), statwin,
965
&statcleared, statx);
966
list.baridx = list.lastvisible->idx - idx + 1;
968
refresh_serv_screen(&list, idx);
973
if (list.barptr != NULL) {
974
pageservwin(&list, SCROLLUP, &idx);
976
set_barptr((char **) &(list.barptr),
977
(char *) (list.firstvisible),
978
&(list.firstvisible->starttime),
979
(char *) &(list.firstvisible->spans),
980
sizeof(struct serv_spans), statwin,
981
&statcleared, statx);
984
refresh_serv_screen(&list, idx);
994
show_portsort_keywin(&sortwin, &sortpanel);
1005
} else if (keymode == 1) {
1006
del_panel(sortpanel);
1008
sortportents(&list, &idx, ch);
1010
if (list.barptr != NULL) {
1011
set_barptr((char **) &(list.barptr),
1012
(char *) list.firstvisible,
1013
&(list.firstvisible->starttime),
1014
(char *) &(list.firstvisible->spans),
1015
sizeof(struct serv_spans), statwin,
1016
&statcleared, statx);
1019
refresh_serv_screen(&list, idx);
935
1026
pkt_result = processpacket(buf, &ipacket, &br, &tot_br,
936
&sport, &dport, &fromaddr, &linktype,
937
ofilter, iface, ifname);
1027
&sport, &dport, &fromaddr,
1029
MATCH_OPPOSITE_USECONFIG, iface,
939
1032
if (pkt_result != PACKET_OK)
942
1035
if ((((struct iphdr *) ipacket)->protocol == IPPROTO_TCP)
943
|| (((struct iphdr *) ipacket)->protocol ==
945
printport(&list, ((struct iphdr *) ipacket)->protocol,
947
ntohs(((struct iphdr *) ipacket)->tot_len),
948
idx, 0, ports, options->servnames);
949
printport(&list, ((struct iphdr *) ipacket)->protocol,
951
ntohs(((struct iphdr *) ipacket)->tot_len),
952
idx, 1, ports, options->servnames);
1036
|| (((struct iphdr *) ipacket)->protocol == IPPROTO_UDP)) {
1037
updateportent(&list, ((struct iphdr *) ipacket)->protocol,
1038
ntohs(sport), ntohs(dport),
1039
ntohs(((struct iphdr *) ipacket)->tot_len),
1040
idx, ports, options->servnames);
954
1042
if ((list.barptr == NULL) && (list.head != NULL)) {
955
set_barptr((char **) &(list.barptr), (char *) list.head,
956
&(list.head->starttime), (char *) &(list.head->spans),
957
sizeof(struct serv_spans), statwin, &statcleared, statx);
1043
set_barptr((char **) &(list.barptr),
1044
(char *) list.head, &(list.head->starttime),
1045
(char *) &(list.head->spans),
1046
sizeof(struct serv_spans), statwin,
1047
&statcleared, statx);
958
1048
list.baridx = 1;
962
gettimeofday(&tv, NULL);
964
unow = tv.tv_sec * 1e+6 + tv.tv_usec;
966
if (now - timeint >= 5) {
967
printelapsedtime(starttime, now, LINES - 4, 20,
971
if (((now - startlog) >= options->logspan) && (logging)) {
972
writeutslog(list.head, now - starttime, options->actmode,
977
if (list.barptr != NULL) {
978
if ((now - list.barptr->starttime) >= 5) {
979
update_serv_rates(&list, statwin, options->actmode, &statcleared);
983
if (((options->updrate != 0)
984
&& (now - updtime >= options->updrate))
985
|| ((options->updrate == 0)
986
&& (unow - updtime_usec >= DEFAULT_UPDATE_DELAY))) {
992
check_rotate_flag(&logfile, logging);
994
if ((facilitytime != 0)
995
&& (((now - starttime) / 60) >= facilitytime))
1000
signal(SIGUSR1, SIG_DFL);
1001
writeutslog(list.head, time((time_t *) NULL) - starttime, options->actmode,
1003
writelog(logging, logfile,
1004
"******** TCP/UDP service monitor stopped ********");
1055
signal(SIGUSR1, SIG_DFL);
1056
writeutslog(list.head, time((time_t *) NULL) - starttime,
1057
options->actmode, logfile);
1058
writelog(logging, logfile,
1059
"******** TCP/UDP service monitor stopped ********");
1007
1062
if (options->servnames)
1010
1065
if ((options->promisc) && (is_last_instance())) {
1011
load_promisc_list(&promisc_list);
1012
srpromisc(0, promisc_list);
1013
destroy_promisc_list(&promisc_list);
1066
load_promisc_list(&promisc_list);
1067
srpromisc(0, promisc_list);
1068
destroy_promisc_list(&promisc_list);
1016
1071
adjust_instance_count(PROCCOUNTFILE, -1);