493
493
revertOrder ? "-" : "", column, showLocalityMode, showHostsMode);
495
495
sendString("<CENTER><TABLE WIDTH=100%% BORDER=0 "TABLE_DEFAULTS"><TR><TD ALIGN=LEFT>");
497
sendString("<p><form action=\"../\">\n<b>Hosts</b>:"
498
"<select onchange=\"window.open(this.options[this.selectedIndex].value,'_top')\">\n");
497
500
switch(showHostsMode) {
498
501
case showOnlyLocalHosts:
499
502
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
500
"<b>Hosts:</b> [ <A HREF=\"%s0\">All</A> ] "
501
"[<B> Local Only </B>] "
502
"[ <A HREF=\"%s2\">Remote Only</A> ] ",
503
"<option value=\"%s0\" >All</option>\n"
504
"<option value=\"%s1\" selected>Local Only</option>\n"
505
"<option value=\"%s2\" >Remote Only</option>\n"
507
theLink, theLink, theLink);
505
509
case showOnlyRemoteHosts:
506
510
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
507
"<b>Hosts:</b> [ <A HREF=\"%s0\">All</A> ] "
508
"[ <A HREF=\"%s1\">Local Only</A> ] "
509
"[<B> Remote Only </B>] ",
511
"<option value=\"%s0\" >All</option>\n"
512
"<option value=\"%s1\" >Local Only</option>\n"
513
"<option value=\"%s2\" selected>Remote Only</option>\n"
515
theLink, theLink, theLink);
513
518
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
514
"<b>Hosts:</b> [<B> All </B>] "
515
"[ <A HREF=\"%s1\">Local Only</A> ] "
516
"[ <A HREF=\"%s2\">Remote Only</A> ] ",
519
"<option value=\"%s0\" selected>All</option>\n"
520
"<option value=\"%s1\" >Local Only</option>\n"
521
"<option value=\"%s2\" >Remote Only</option>\n"
523
theLink, theLink, theLink);
546
552
sendString("</TD>");
548
554
if(reportType != TRAFFIC_STATS) {
555
sendString("<TD ALIGN=right><form action=\"../\">\n<b>Data</b>:"
556
"<select onchange=\"window.open(this.options[this.selectedIndex].value,'_top')\">\n");
549
558
switch(showLocalityMode) {
550
559
case showSentReceived:
551
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TD ALIGN=right>"
552
"<b>Data:</b> [<b> All </b>] "
553
"[ <a href=\"%s?col=%s%d&showH=%d&showL=1\">Sent Only</a> ] "
554
"[ <a href=\"%s?col=%s%d&showH=%d&showL=2\">Received Only</a> ] ",
555
url, revertOrder ? "-" : "", column, showHostsMode,
556
url, revertOrder ? "-" : "", column, showHostsMode);
560
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
561
"<option value=\"%s?col=%s%d&showH=%d&showL=0\" selected>All</option>\n"
562
"<option value=\"%s?col=%s%d&showH=%d&showL=1\">Sent Only</option>\n"
563
"<option value=\"%s?col=%s%d&showH=%d&showL=2\">Received Only</option>\n",
564
url, revertOrder ? "-" : "", column, showHostsMode,
565
url, revertOrder ? "-" : "", column, showHostsMode,
566
url, revertOrder ? "-" : "", column, showHostsMode);
558
568
case showOnlySent:
559
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TD ALIGN=right>"
560
"<b>Data:</b> [ <a href=\"%s?col=%s%d&showH=%d&showL=0\">All</a> ] "
561
"[<b> Sent Only </b>] "
562
"[ <a href=\"%s?col=%s%d&showH=%d&showL=2\">Received Only</a> ] ",
563
url, revertOrder ? "-" : "", column, showHostsMode,
564
url, revertOrder ? "-" : "", column, showHostsMode);
569
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
570
"<option value=\"%s?col=%s%d&showH=%d&showL=0\">All</option>\n"
571
"<option value=\"%s?col=%s%d&showH=%d&showL=1\" selected>Sent Only</option>\n"
572
"<option value=\"%s?col=%s%d&showH=%d&showL=2\">Received Only</option>\n",
573
url, revertOrder ? "-" : "", column, showHostsMode,
574
url, revertOrder ? "-" : "", column, showHostsMode,
575
url, revertOrder ? "-" : "", column, showHostsMode);
567
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TD ALIGN=right>"
568
"<b>Data:</b> [ <a href=\"%s?col=%s%d&showH=%d&showL=0\">All</a> ] "
569
"[ <a href=\"%s?col=%s%d&showH=%d&showL=1\">Sent Only</a> ] "
570
"[<b> Received Only </b>] ",
571
url, revertOrder ? "-" : "", column, showHostsMode,
572
url, revertOrder ? "-" : "", column, showHostsMode);
578
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
579
"<option value=\"%s?col=%s%d&showH=%d&showL=0\">All</option>\n"
580
"<option value=\"%s?col=%s%d&showH=%d&showL=1\">Sent Only</option>\n"
581
"<option value=\"%s?col=%s%d&showH=%d&showL=2\" selected>Received Only</option>\n",
582
url, revertOrder ? "-" : "", column, showHostsMode,
583
url, revertOrder ? "-" : "", column, showHostsMode,
584
url, revertOrder ? "-" : "", column, showHostsMode);
582
594
case SORT_DATA_SENT_PROTOS:
583
595
case SORT_DATA_PROTOS:
584
596
sendString("<CENTER>\n");
585
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER, ""TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
586
"<TH "TH_BG">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>\n"
587
"<TH "TH_BG">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Domain%s</A></TH>"
588
"<TH "TH_BG" COLSPAN=2>%s0\">Data%s</A></TH>\n",
589
theAnchor[0], arrow[0], theAnchor[1], arrow[1],
590
theAnchor[2], arrow[2]);
597
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER,
598
""TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
599
"<TH "TH_BG">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>\n"
600
"<TH "TH_BG">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Location%s</A></TH>"
601
"<TH "TH_BG" COLSPAN=2>%s0\">Data%s</A></TH>\n",
602
theAnchor[0], arrow[0], theAnchor[1], arrow[1],
603
theAnchor[2], arrow[2]);
593
606
for(i=0; i<=15; i++)
594
if(abs(column) == i+1) { arrow[i] = arrowGif; theAnchor[i] = htmlAnchor; } else { arrow[i] = ""; theAnchor[i] = htmlAnchor1; }
607
if(abs(column) == i+1) {
608
arrow[i] = arrowGif; theAnchor[i] = htmlAnchor;
610
arrow[i] = ""; theAnchor[i] = htmlAnchor1;
596
613
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER, "<TH "TH_BG">%s1\">TCP%s</A></TH>"
597
"<TH "TH_BG">%s2\">UDP%s</A></TH><TH "TH_BG">%s3\">ICMP%s</A></TH>""<TH "TH_BG">%s4\">ICMPv6%s</A></TH>"
598
"<TH "TH_BG">%s5\">DLC%s</A></TH><TH "TH_BG">%s6\">IPX%s</A>"
599
"</TH><TH "TH_BG">%s7\">Decnet%s</A></TH>"
600
"<TH "TH_BG">%s8\">(R)ARP%s</A></TH><TH "TH_BG">%s9\">AppleTalk%s</A></TH>",
601
theAnchor[0], arrow[0], theAnchor[1], arrow[1],
602
theAnchor[2], arrow[2], theAnchor[3], arrow[3],
603
theAnchor[4], arrow[4],
604
theAnchor[5], arrow[5], theAnchor[6], arrow[6],
605
theAnchor[7], arrow[7], theAnchor[8], arrow[8]);
614
"<TH "TH_BG">%s2\">UDP%s</A></TH><TH "TH_BG">%s3\">ICMP%s</A></TH>"
615
"<TH "TH_BG">%s4\">ICMPv6%s</A></TH>"
616
"<TH "TH_BG">%s5\">DLC%s</A></TH><TH "TH_BG">%s6\">IPX%s</A>"
617
"</TH><TH "TH_BG">%s7\">IPsec%s</A></TH>"
618
"<TH "TH_BG">%s8\">(R)ARP%s</A></TH><TH "TH_BG">%s9\">AppleTalk%s</A></TH>",
619
theAnchor[0], arrow[0], theAnchor[1], arrow[1],
620
theAnchor[2], arrow[2], theAnchor[3], arrow[3],
621
theAnchor[4], arrow[4],
622
theAnchor[5], arrow[5], theAnchor[6], arrow[6],
623
theAnchor[7], arrow[7], theAnchor[8], arrow[8]);
608
626
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER,
609
"<TH "TH_BG">%s11\">NetBios%s</A></TH>"
610
"<TH "TH_BG">%s13\">OSI%s</A></TH>"
611
"<TH "TH_BG">%s14\">IPv6%s</A></TH>"
612
"<TH "TH_BG">%s15\">STP%s</A></TH>",
613
theAnchor[10], arrow[10],
614
theAnchor[12], arrow[12],
615
theAnchor[13], arrow[13],
616
theAnchor[14], arrow[14]);
627
"<TH "TH_BG">%s11\">NetBios%s</A></TH>"
628
"<TH "TH_BG">%s13\">GRE%s</A></TH>"
629
"<TH "TH_BG">%s14\">IPv6%s</A></TH>"
630
"<TH "TH_BG">%s15\">STP%s</A></TH>",
631
theAnchor[10], arrow[10],
632
theAnchor[12], arrow[12],
633
theAnchor[13], arrow[13],
634
theAnchor[14], arrow[14]);
619
637
protoList = myGlobals.ipProtosList, idx=0;
710
728
case SORT_DATA_SENT_THPT:
711
729
case SORT_DATA_THPT:
712
730
sendString("<CENTER>\n");
713
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER, ""TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
714
"<TH "TH_BG" ROWSPAN=\"2\">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>"
715
"<TH "TH_BG" ROWSPAN=\"2\">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Domain%s</A></TH>\n\n",
716
theAnchor[0], arrow[0], theAnchor[1], arrow[1]);
731
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER, ""TABLE_ON
732
"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
733
"<TH "TH_BG" ROWSPAN=\"2\">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>"
734
"<TH "TH_BG" ROWSPAN=\"2\">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Location%s</A></TH>\n\n",
735
theAnchor[0], arrow[0], theAnchor[1], arrow[1]);
746
765
case TRAFFIC_STATS:
747
766
sendString("<CENTER>\n");
748
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER, ""TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
749
"<TH "TH_BG">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>"
750
"<TH "TH_BG">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Domain%s</A></TH>\n\n",
751
theAnchor[0], arrow[0], theAnchor[1], arrow[1]);
767
safe_snprintf(__FILE__, __LINE__, buf, LEN_GENERAL_WORK_BUFFER,
768
""TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
769
"<TH "TH_BG">%s"FLAG_HOST_DUMMY_IDX_STR"\">Host%s</A></TH>"
770
"<TH "TH_BG">%s"FLAG_DOMAIN_DUMMY_IDX_STR"\">Location%s</A></TH>\n\n",
771
theAnchor[0], arrow[0], theAnchor[1], arrow[1]);
1069
1098
/* ******************************* */
1100
int cmpFctnLocationName(const void *_a, const void *_b) {
1101
HostTraffic **a = (HostTraffic **)_a;
1102
HostTraffic **b = (HostTraffic **)_b;
1103
char *c_a = "", *c_b = "";
1105
if((a != NULL) && (*a != NULL)
1106
&& (*a)->geo_ip && ((*a)->geo_ip->country_code != NULL))
1107
c_a = (*a)->geo_ip->country_code;
1109
if((b != NULL) && (*b != NULL)
1110
&& (*b)->geo_ip && ((*b)->geo_ip->country_code != NULL))
1111
c_b = (*b)->geo_ip->country_code;
1113
return(strcmp(c_a, c_b));
1116
/* ******************************* */
1071
1118
int cmpFctn(const void *_a, const void *_b) {
1072
1119
HostTraffic **a = (HostTraffic **)_a;
1073
1120
HostTraffic **b = (HostTraffic **)_b;
1466
1530
if((myGlobals.columnSort >= BASE_PROTOS_IDX)
1467
1531
&& (myGlobals.columnSort < (BASE_PROTOS_IDX+myGlobals.numIpProtosList))) {
1468
a_ = (*a)->ipProtosList[myGlobals.columnSort-BASE_PROTOS_IDX]->sent.value
1469
+(*a)->ipProtosList[myGlobals.columnSort-BASE_PROTOS_IDX]->rcvd.value;
1470
b_ = (*b)->ipProtosList[myGlobals.columnSort-BASE_PROTOS_IDX]->sent.value
1471
+(*b)->ipProtosList[myGlobals.columnSort-BASE_PROTOS_IDX]->rcvd.value;
1532
int idx = myGlobals.columnSort-BASE_PROTOS_IDX;
1534
if(((*a)->ipProtosList == NULL) && ((*b)->ipProtosList != NULL)) return(1);
1535
else if(((*a)->ipProtosList != NULL) && ((*b)->ipProtosList == NULL)) return(-1);
1537
if((*a)->ipProtosList && (*a)->ipProtosList[idx])
1538
a_ = (*a)->ipProtosList[idx]->sent.value +(*a)->ipProtosList[idx]->rcvd.value;
1542
if((*b)->ipProtosList && (*b)->ipProtosList[idx])
1543
b_ = (*b)->ipProtosList[idx]->sent.value +(*b)->ipProtosList[idx]->rcvd.value;
1476
1550
case SORT_DATA_IP:
1477
1551
columnProtoId = myGlobals.columnSort - 1;
1552
if(((*a)->protoIPTrafficInfos == NULL) && ((*b)->protoIPTrafficInfos != NULL)) return(1);
1553
else if(((*a)->protoIPTrafficInfos != NULL) && ((*b)->protoIPTrafficInfos == NULL)) return(-1);
1478
1555
if((columnProtoId != -1) && (columnProtoId <= myGlobals.numIpProtosToMonitor)) {
1479
1556
if(columnProtoId <= 0) {
1482
if((*a)->protoIPTrafficInfos[columnProtoId-1])
1559
if((*a)->protoIPTrafficInfos && (*a)->protoIPTrafficInfos[columnProtoId-1])
1483
1560
a_ = (*a)->protoIPTrafficInfos[columnProtoId-1]->rcvdLoc.value+
1484
1561
(*a)->protoIPTrafficInfos[columnProtoId-1]->rcvdFromRem.value+
1485
1562
(*a)->protoIPTrafficInfos[columnProtoId-1]->sentLoc.value+
2387
2472
ProtocolsList *protoList;
2389
2474
totalSent = el->tcpSentLoc.value+el->tcpSentRem.value+el->udpSentLoc.value+el->udpSentRem.value;
2390
totalSent += el->icmpSent.value+el->icmp6Sent.value+el->ipv6Sent.value;
2475
totalSent += el->icmpSent.value+el->icmp6Sent.value+el->ipv6BytesSent.value;
2476
totalSent += el->greSent.value + el->ipsecSent.value;
2392
2478
if(el->nonIPTraffic != NULL)
2393
2479
totalSent += el->nonIPTraffic->ipxSent.value+el->nonIPTraffic->dlcSent.value+el->nonIPTraffic->arp_rarpSent.value +
2394
el->nonIPTraffic->decnetSent.value+el->nonIPTraffic->appletalkSent.value+el->nonIPTraffic->netbiosSent.value+
2395
el->nonIPTraffic->osiSent.value+el->nonIPTraffic->stpSent.value+el->nonIPTraffic->otherSent.value;
2480
el->nonIPTraffic->appletalkSent.value+el->nonIPTraffic->netbiosSent.value+
2481
el->nonIPTraffic->stpSent.value+el->nonIPTraffic->otherSent.value;
2397
2483
totalRcvd = el->tcpRcvdLoc.value+el->tcpRcvdFromRem.value;
2398
2484
totalRcvd += el->udpRcvdLoc.value+el->udpRcvdFromRem.value;
2399
totalRcvd += el->icmpRcvd.value+el->icmp6Rcvd.value+el->ipv6Rcvd.value;
2485
totalRcvd += el->icmpRcvd.value+el->icmp6Rcvd.value+el->ipv6BytesRcvd.value;
2486
totalRcvd += el->greRcvd.value + el->ipsecRcvd.value;
2401
2488
if(el->nonIPTraffic != NULL)
2402
2489
totalRcvd += el->nonIPTraffic->ipxRcvd.value+el->nonIPTraffic->dlcRcvd.value+el->nonIPTraffic->arp_rarpRcvd.value +
2403
el->nonIPTraffic->decnetRcvd.value+el->nonIPTraffic->appletalkRcvd.value +
2404
el->nonIPTraffic->osiRcvd.value+el->nonIPTraffic->netbiosRcvd.value+el->nonIPTraffic->stpRcvd.value+el->nonIPTraffic->otherRcvd.value;
2490
el->nonIPTraffic->appletalkRcvd.value +
2491
el->nonIPTraffic->netbiosRcvd.value+el->nonIPTraffic->stpRcvd.value+el->nonIPTraffic->otherRcvd.value;
2406
2493
protoList = myGlobals.ipProtosList;
2453
2540
(float)el->icmp6Rcvd.value/1024,
2454
2541
100*((float)SD(el->icmp6Rcvd.value, totalRcvd)));
2456
printTableDoubleEntry(buf, sizeof(buf), "IPv6", CONST_COLOR_1, (float)el->ipv6Sent.value/1024,
2457
100*((float)SD(el->ipv6Sent.value, totalSent)),
2458
(float)el->ipv6Rcvd.value/1024,
2459
100*((float)SD(el->ipv6Rcvd.value, totalRcvd)));
2543
printTableDoubleEntry(buf, sizeof(buf), "IPv6", CONST_COLOR_1, (float)el->ipv6BytesSent.value/1024,
2544
100*((float)SD(el->ipv6BytesSent.value, totalSent)),
2545
(float)el->ipv6BytesRcvd.value/1024,
2546
100*((float)SD(el->ipv6BytesRcvd.value, totalRcvd)));
2548
printTableDoubleEntry(buf, sizeof(buf), "GRE", CONST_COLOR_1, (float)el->greSent.value/1024,
2549
100*((float)SD(el->greSent.value, totalSent)),
2550
(float)el->greRcvd.value/1024,
2551
100*((float)SD(el->greRcvd.value, totalRcvd)));
2553
printTableDoubleEntry(buf, sizeof(buf), "IPsec", CONST_COLOR_1,
2554
(float)el->ipsecSent.value/1024,
2555
100*((float)SD(el->ipsecSent.value, totalSent)),
2556
(float)el->ipsecRcvd.value/1024,
2557
100*((float)SD(el->ipsecRcvd.value, totalRcvd)));
2461
2559
if(el->nonIPTraffic != NULL) {
2462
2560
printTableDoubleEntry(buf, sizeof(buf), "(R)ARP", CONST_COLOR_1, (float)el->nonIPTraffic->arp_rarpSent.value/1024,
2463
2561
100*((float)SD(el->nonIPTraffic->arp_rarpSent.value, totalSent)),
2474
2572
(float)el->nonIPTraffic->ipxRcvd.value/1024,
2475
2573
100*((float)SD(el->nonIPTraffic->ipxRcvd.value, totalRcvd)));
2477
printTableDoubleEntry(buf, sizeof(buf), "Decnet", CONST_COLOR_1, (float)el->nonIPTraffic->decnetSent.value/1024,
2478
100*((float)SD(el->nonIPTraffic->decnetSent.value, totalSent)),
2479
(float)el->nonIPTraffic->decnetRcvd.value/1024,
2480
100*((float)SD(el->nonIPTraffic->decnetRcvd.value, totalRcvd)));
2482
2575
printTableDoubleEntry(buf, sizeof(buf), "AppleTalk", CONST_COLOR_1, (float)el->nonIPTraffic->appletalkSent.value/1024,
2483
2576
100*((float)SD(el->nonIPTraffic->appletalkSent.value, totalSent)),
2484
2577
(float)el->nonIPTraffic->appletalkRcvd.value/1024,
2489
2582
(float)el->nonIPTraffic->netbiosRcvd.value/1024,
2490
2583
100*((float)SD(el->nonIPTraffic->netbiosRcvd.value, totalRcvd)));
2492
printTableDoubleEntry(buf, sizeof(buf), "OSI", CONST_COLOR_1, (float)el->nonIPTraffic->osiSent.value/1024,
2493
100*((float)SD(el->nonIPTraffic->osiSent.value, totalSent)),
2494
(float)el->nonIPTraffic->osiRcvd.value/1024,
2495
100*((float)SD(el->nonIPTraffic->osiRcvd.value, totalRcvd)));
2497
2585
printTableDoubleEntry(buf, sizeof(buf), "STP", CONST_COLOR_1, (float)el->nonIPTraffic->stpSent.value/1024,
2498
2586
100*((float)SD(el->nonIPTraffic->stpSent.value, totalSent)),
2499
2587
(float)el->nonIPTraffic->stpRcvd.value/1024,
2523
2611
totalSent = el->tcpSentLoc.value+el->tcpSentRem.value+
2524
2612
el->udpSentLoc.value+el->udpSentRem.value+
2525
el->icmpSent.value+el->icmp6Sent.value+el->ipv6Sent.value;
2613
el->icmpSent.value+el->icmp6Sent.value+el->ipv6BytesSent.value+
2614
el->greSent.value+el->ipsecSent.value;
2527
2616
totalRcvd = el->tcpRcvdLoc.value+el->tcpRcvdFromRem.value+
2528
2617
el->udpRcvdLoc.value+el->udpRcvdFromRem.value+
2529
el->icmpRcvd.value+el->icmp6Rcvd.value+el->ipv6Rcvd.value;
2618
el->icmpRcvd.value+el->icmp6Rcvd.value+el->ipv6BytesRcvd.value+
2619
el->greRcvd.value+el->ipsecRcvd.value;
2531
2621
if(el->nonIPTraffic) {
2532
2622
totalSent += el->nonIPTraffic->stpSent.value+
2533
el->nonIPTraffic->ipxSent.value+el->nonIPTraffic->osiSent.value+el->nonIPTraffic->dlcSent.value+
2534
el->nonIPTraffic->arp_rarpSent.value+el->nonIPTraffic->decnetSent.value+el->nonIPTraffic->appletalkSent.value+
2623
el->nonIPTraffic->ipxSent.value+el->nonIPTraffic->dlcSent.value+
2624
el->nonIPTraffic->arp_rarpSent.value+el->nonIPTraffic->appletalkSent.value+
2535
2625
el->nonIPTraffic->netbiosSent.value+el->nonIPTraffic->otherSent.value;
2537
2627
totalRcvd += el->nonIPTraffic->stpRcvd.value+
2538
el->nonIPTraffic->ipxRcvd.value+el->nonIPTraffic->osiRcvd.value+el->nonIPTraffic->dlcRcvd.value+
2539
el->nonIPTraffic->arp_rarpRcvd.value+el->nonIPTraffic->decnetRcvd.value+el->nonIPTraffic->appletalkRcvd.value+
2628
el->nonIPTraffic->ipxRcvd.value+el->nonIPTraffic->dlcRcvd.value+
2629
el->nonIPTraffic->arp_rarpRcvd.value+el->nonIPTraffic->appletalkRcvd.value+
2540
2630
el->nonIPTraffic->netbiosRcvd.value+el->nonIPTraffic->otherRcvd.value;
2595
2686
if((el->tcpSentLoc.value+el->tcpSentRem.value+el->udpSentLoc.value+el->udpSentRem.value
2596
2687
+el->tcpRcvdLoc.value+el->tcpRcvdFromRem.value+el->udpRcvdLoc.value+el->udpRcvdFromRem.value) > 0) {
2597
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">IP Distribution</TH>",
2688
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">"
2689
"IP Distribution</TH>",
2599
2691
sendString(buf);
2601
2693
if((el->tcpSentLoc.value+el->tcpSentRem.value+el->udpSentLoc.value+el->udpSentRem.value) > 0) {
2602
2694
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
2603
2695
"<TD "TD_BG" ALIGN=RIGHT COLSPAN=2 BGCOLOR=white>"
2604
"<iframe frameborder=0 SRC=\"hostIPTrafficDistrib-%s%s"CHART_FORMAT"?1\" width=400 height=250></iframe></TD>",
2696
"<iframe frameborder=0 SRC=\"hostIPTrafficDistrib-%s%s"CHART_FORMAT"?1\""
2697
" width=400 height=250></iframe></TD>",
2606
2699
sendString(buf);
2608
2701
sendString("<TD "TD_BG" COLSPAN=2 WIDTH=250> </TD>");
2969
3066
strncpy(el->hostNumIpAddress,
2970
3067
_addrtostr(&el->hostIpAddress, buf, sizeof(buf)),
2971
3068
sizeof(el->hostNumIpAddress));
2972
if(myGlobals.runningPref.numericFlag == 0) {
2973
fetchAddressFromCache(el->hostIpAddress, el->hostResolvedName, &type);
2975
el->hostResolvedNameType = type;
2976
if((strcmp(el->hostResolvedName, el->hostNumIpAddress) == 0) || (el->hostResolvedName[0] == '\0')) {
2977
if(getSniffedDNSName(el->hostNumIpAddress, sniffedName, sizeof(sniffedName))) {
2980
for(i=0; i<strlen(sniffedName); i++) {
2981
if(isupper(sniffedName[i]))
2982
sniffedName[i] = tolower(sniffedName[i]);
2985
setResolvedName(el, sniffedName, FLAG_HOST_SYM_ADDR_TYPE_IP);
2989
} else if (theSerial.serialType == SERIAL_FC) {
3070
// FIX -- Update address TODO
3073
else if (theSerial.serialType == SERIAL_FC) {
2990
3074
memcpy ((u_int8_t *)&el->fcCounters->hostFcAddress,
2991
3075
(u_int8_t *)&theSerial.value.fcSerial.fcAddress,
2992
3076
LEN_FC_ADDRESS);
3421
3508
HostTraffic *theHost, tmpEl;
3422
3509
char formatBuf[LEN_TIMEFORMAT_BUFFER], formatBuf1[LEN_TIMEFORMAT_BUFFER],
3423
formatBuf2[32], hostLinkBuf[LEN_GENERAL_WORK_BUFFER];
3510
formatBuf2[32], hostLinkBuf[3*LEN_GENERAL_WORK_BUFFER], custom_host_name[128];
3425
accessAddrResMutex("printAllSessionsHTML");
3512
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "hostname.%s",
3513
(el->hostNumIpAddress[0] != '\0') ? el->hostNumIpAddress : el->ethAddressString);
3515
if(fetchPrefsValue(buf, custom_host_name, sizeof(custom_host_name)) == -1) {
3516
custom_host_name[0] = '\0';
3428
if(getSniffedDNSName(el->hostNumIpAddress, sniffedName, sizeof(sniffedName))) {
3429
if(el->hostResolvedName[0] == '\0' || strcmp(sniffedName, el->hostResolvedName))
3430
safe_snprintf(__FILE__, __LINE__, buf1, sizeof(buf1), " (%s)", sniffedName);
3433
3521
if((el->hostResolvedName[0] != '\0') && (strcmp(el->hostResolvedName, el->hostNumIpAddress))) {
3434
3522
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "Info about "
3435
3523
" <A HREF=\"http://%s/\" TARGET=\"_blank\" "
3436
"TITLE=\"Link to web server on host, if available\" class=external>%s %s</A>\n",
3437
el->hostResolvedName,
3438
el->hostResolvedName, buf1);
3524
"TITLE=\"Link to web server on host, if available\" class=external>%s</A>\n",
3525
(custom_host_name[0] != '\0') ? custom_host_name : el->hostResolvedName,
3526
(custom_host_name[0] != '\0') ? custom_host_name : el->hostResolvedName);
3440
3528
safe_snprintf(__FILE__, __LINE__, buf2, sizeof(buf2), "Info about %s", el->hostResolvedName);
3441
3529
} else if(el->hostNumIpAddress[0] != '\0') {
3442
3530
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "Info about "
3443
" <A HREF=\"http://%s%s%s/\" TARGET=\"_blank\" "
3444
"TITLE=\"Link to web server on host, if available\" class=tooltip>%s %s</A>\n",
3445
el->hostIpAddress.hostFamily == AF_INET6 ? "[" : "",
3446
el->hostNumIpAddress,
3447
el->hostIpAddress.hostFamily == AF_INET6 ? "]" : "",
3448
el->hostNumIpAddress, buf1);
3531
" <A HREF=\"http://%s%s%s/\" TARGET=\"_blank\" "
3532
"TITLE=\"Link to web server on host, if available\" class=tooltip>%s</A>\n",
3533
el->hostIpAddress.hostFamily == AF_INET6 ? "[" : "",
3534
el->hostNumIpAddress,
3535
el->hostIpAddress.hostFamily == AF_INET6 ? "]" : "",
3536
(custom_host_name[0] != '\0') ? custom_host_name : el->hostNumIpAddress);
3450
safe_snprintf(__FILE__, __LINE__, buf2, sizeof(buf2), "Info about %s", el->hostNumIpAddress);
3538
safe_snprintf(__FILE__, __LINE__, buf2, sizeof(buf2), "Info about %s",
3539
(custom_host_name[0] != '\0') ? custom_host_name : el->hostNumIpAddress);
3452
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "Info about %s", el->ethAddressString);
3541
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "Info about %s",
3542
(custom_host_name[0] != '\0') ? custom_host_name : el->ethAddressString);
3454
safe_snprintf(__FILE__, __LINE__, buf2, sizeof(buf2), "Info about %s", el->ethAddressString);
3544
safe_snprintf(__FILE__, __LINE__, buf2, sizeof(buf2), "Info about %s",
3545
(custom_host_name[0] != '\0') ? custom_host_name : el->ethAddressString);
3457
releaseAddrResMutex();
3458
3548
printHTMLheader(buf2, buf, 0);
3459
3549
sendString("<CENTER>\n<P>"TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS" WIDTH=80%%>\n");
3461
3551
if(el->hostNumIpAddress[0] != '\0') {
3462
char *countryIcon, *hostType, tmpBuf[64];
3464
accessAddrResMutex("printAllSessions-2");
3466
countryIcon = getHostCountryIconURL(el);
3552
char *hostType, tmpBuf[64];
3468
3554
if(broadcastHost(el)) hostType = "broadcast";
3469
3555
else if(multicastHost(el)) hostType = "multicast";
3485
3571
multivlaned = "";
3487
3573
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH>"
3488
"<TD "TD_BG" ALIGN=RIGHT>%s %s [%s%s%s%s]",
3491
el->hostNumIpAddress,
3492
countryIcon, hostType, dynIp, multihomed, multivlaned);
3574
"<TD "TD_BG" ALIGN=RIGHT>%s [%s%s%s%s]",
3576
"IP Address", el->hostNumIpAddress,
3577
hostType, dynIp, multihomed, multivlaned);
3493
3578
sendString(buf);
3495
3580
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3629
3714
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH>"
3630
3715
"<TD "TD_BG" ALIGN=RIGHT>%s</TD><TD "TD_BG" ALIGN=RIGHT>%s</TD></TR>\n",
3631
3716
getRowColor(), "DHCP Unknown Msg",
3632
formatPkts(el->protocolInfo->dhcpStats->dhcpMsgSent[FLAG_DHCP_UNKNOWN_MSG].value, formatBuf, sizeof(formatBuf)),
3633
formatPkts(el->protocolInfo->dhcpStats->dhcpMsgRcvd[FLAG_DHCP_UNKNOWN_MSG].value, formatBuf1, sizeof(formatBuf1)));
3717
formatPkts(el->protocolInfo->dhcpStats->dhcpMsgSent[FLAG_DHCP_UNKNOWN_MSG].value,
3718
formatBuf, sizeof(formatBuf)),
3719
formatPkts(el->protocolInfo->dhcpStats->dhcpMsgRcvd[FLAG_DHCP_UNKNOWN_MSG].value,
3720
formatBuf1, sizeof(formatBuf1)));
3634
3721
sendString(buf);
3636
3723
sendString("</TABLE>"TABLE_OFF"</TD></TR>\n");
3727
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3728
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">Custom Host Name</TH>"
3729
"<TD "TD_BG" ALIGN=RIGHT>"
3730
"<FORM METHOD=GET ACTION=/editPrefs.html>"
3731
"<INPUT TYPE=hidden name=key value=\"hostname.%s\">"
3732
"<input type=text name=val value=\"%s\">"
3733
"<INPUT TYPE=image src=/"CONST_EDIT_IMG" value=\"Submit\" alt=\"Set custom host name\"></TD></TR>\n",
3735
(el->hostNumIpAddress[0] != '\0') ? el->hostNumIpAddress : el->ethAddressString,
3640
3739
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH>"
3641
3740
"<TD "TD_BG" ALIGN=RIGHT>"
3642
3741
"%s - %s [Inactive since %s]</TD></TR>\n",
3647
3746
formatSeconds(myGlobals.actTime-el->lastSeen, formatBuf2, sizeof(formatBuf2)));
3648
3747
sendString(buf);
3650
3750
if(el->hostAS != 0) {
3651
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3652
"<A class=external HREF=\"http://ws.arin.net/cgi-bin/whois.pl?queryinput=AS%d\">%d</A></TD></TR>\n",
3653
getRowColor(), "Autonomous System", el->hostAS, el->hostAS);
3751
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3752
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3753
"<A class=external HREF=\"http://ws.arin.net/cgi-bin/whois.pl?queryinput=AS%d\">%d</A>"
3754
" [%s]</TD></TR>\n",
3755
getRowColor(), "Autonomous System",
3756
el->hostAS, el->hostAS, (el->hostASDescr != NULL) ? el->hostASDescr : "No AS info");
3760
if((el->known_subnet_id != UNKNOWN_SUBNET_ID)
3761
&& (el->known_subnet_id < myGlobals.numKnownSubnets)) {
3762
char subnet_buf[48];
3764
host2networkName(el, subnet_buf, sizeof(subnet_buf));
3766
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3767
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3768
"<A HREF=\""CONST_DOMAIN_STATS_HTML"?dom=%d&netmode=1\">%s</A></TD></TR>\n", getRowColor(),
3769
"Subnet", el->known_subnet_id, subnet_buf);
3654
3770
sendString(buf);
3657
3773
if(el->dnsDomainValue && (el->dnsDomainValue[0] != '\0')) {
3658
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3659
"%s</TD></TR>\n", getRowColor(),
3660
"Domain", el->dnsDomainValue);
3774
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3775
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3776
"%s</TD></TR>\n", getRowColor(),
3777
"Domain", el->dnsDomainValue);
3661
3778
sendString(buf);
3664
3781
if((el->ethAddressString[0] != '\0')
3665
3782
&& strcmp(el->ethAddressString, "00:00:00:00:00:00")
3666
3783
&& strcmp(el->ethAddressString, "00:01:02:03:04:05") /* dummy address */) {
3669
3785
if(isMultihomed(el)) {
3670
3786
char *symMacAddr, symLink[32];
3682
3798
sendString(buf);
3801
char * vendorName = getVendorInfo(el->ethAddress, 1);
3685
3802
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3687
getRowColor(), "MAC Address <IMG ALT=\"Network Interface Card (NIC)\" SRC=/card.gif BORDER=0 "TABLE_DEFAULTS">",
3688
el->ethAddressString,
3689
myGlobals.separator /* it avoids empty cells not to be rendered */);
3693
vendorName = getVendorInfo(el->ethAddress, 1);
3694
if(vendorName[0] != '\0') {
3695
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT NOWRAP>%s%s</TD></TR>\n",
3696
getRowColor(), "Nw Board Vendor",
3698
myGlobals.separator /* it avoids empty cells not to be rendered */);
3803
"%s %s%s%s%s</TD></TR>\n",
3804
getRowColor(), "MAC Address <IMG ALT=\"Network Interface Card (NIC)\" SRC=/card.gif BORDER=0 "TABLE_DEFAULTS">",
3805
el->ethAddressString,
3806
myGlobals.separator /* it avoids empty cells not to be rendered */,
3807
(vendorName[0] != '\0') ? "[" : "",
3809
(vendorName[0] != '\0') ? "]" : "");
3699
3810
sendString(buf);
3719
3831
safe_snprintf(__FILE__, __LINE__, shortBuf, sizeof(shortBuf), "<A HREF=%s.html>%s</A>", symLink, symMacAddr);
3721
3833
strcpy(shortBuf, symMacAddr);
3836
vendorName = getVendorInfo(el->lastEthAddress, 1);
3724
3838
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3728
"Last MAC Address/Router <IMG ALT=\"Network Interface Card (NIC)/Router\" SRC=/card.gif BORDER=0 "TABLE_DEFAULTS">",
3730
myGlobals.separator /* it avoids empty cells not to be rendered */);
3842
"Last MAC Address/Router <IMG ALT=\"Network Interface Card (NIC)/Router\" SRC=/card.gif BORDER=0 "TABLE_DEFAULTS">",
3844
myGlobals.separator /* it avoids empty cells not to be rendered */,
3845
(vendorName[0] != '\0') ? "[" : "",
3847
(vendorName[0] != '\0') ? "]" : "");
3731
3848
sendString(buf);
3771
3888
if(el->nonIPTraffic->nbAccountName) {
3772
3889
if(el->nonIPTraffic->nbDomainName != NULL) {
3773
3890
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3774
"%s@%s [domain %s] (%s) %s</TD></TR>\n",
3775
getRowColor(), "NetBios Name",
3776
el->nonIPTraffic->nbAccountName, el->nonIPTraffic->nbHostName, el->nonIPTraffic->nbDomainName,
3777
getNbNodeType(el->nonIPTraffic->nbNodeType),
3778
el->nonIPTraffic->nbDescr ? el->nonIPTraffic->nbDescr : "");
3891
"%s@%s [domain %s] (%s) %s</TD></TR>\n",
3892
getRowColor(), "NetBios Name",
3893
el->nonIPTraffic->nbAccountName, el->nonIPTraffic->nbHostName, el->nonIPTraffic->nbDomainName,
3894
getNbNodeType(el->nonIPTraffic->nbNodeType),
3895
el->nonIPTraffic->nbDescr ? el->nonIPTraffic->nbDescr : "");
3780
3897
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3781
3898
"%s@%s (%s) %s</TD></TR>\n",
3863
3980
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3864
3981
"%s</TD></TR>\n", getRowColor(),
3865
3982
"Host Location",
3866
"Local (inside specified/local subnet)");
3983
"Local (inside specified/local subnet or known network list)");
3868
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3869
"%s</TD></TR>\n", getRowColor(),
3870
"Host Location",
3871
"Remote (outside specified/local subnet)");
3985
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3986
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3987
"%s</TD></TR>\n", getRowColor(),
3988
"Host Location",
3989
"Remote (outside specified/local subnet)");
3873
3991
sendString(buf);
3996
char *countryIcon, buf3[512] = { '\0' };
3998
if(myGlobals.runningPref.mapperURL) buildMapLink(el, buf3, sizeof(buf3));
3999
countryIcon = getHostCountryIconURL(el);
4001
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
4002
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
4003
"%s, %s %s %s </TD></TR>\n", getRowColor(), "Physical Location",
4004
el->geo_ip->city ? el->geo_ip->city : "Unknown city", el->geo_ip->country_name, countryIcon, buf3);
3876
4008
if(el->community) {
3877
4009
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
3878
4010
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3879
"%s</TD></TR>\n", getRowColor(), "Community", el->community);
4011
"<A HREF=/"CONST_COMMUNITIES_STATS_HTML"?community=%s>%s</A>"
4012
"</TD></TR>\n", getRowColor(), "Community",
4013
el->community, el->community);
3880
4014
sendString(buf);
3914
4048
sendString(buf);
3916
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
4050
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
4051
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3917
4052
"%s Pkts</TD></TR>\n",
3918
4053
getRowColor(), "Broadcast Pkts Sent",
3919
4054
formatPkts(el->pktBroadcastSent.value, formatBuf, sizeof(formatBuf)));
3920
4055
sendString(buf);
3922
4057
if(el->routedTraffic != NULL) {
3923
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON"%s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
4058
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
4059
"<TR "TR_ON"%s><TH "TH_BG" ALIGN=LEFT "DARK_BG">%s</TH><TD "TD_BG" ALIGN=RIGHT>"
3924
4060
"%s/%s Pkts</TD></TR>\n",
3925
4061
getRowColor(), "Routed Traffic",
3926
4062
formatBytes(el->routedTraffic->routedBytes.value, 1, formatBuf, sizeof(formatBuf)),
4067
4204
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">"
4068
4205
"%s</TH><TD "TD_BG" ALIGN=RIGHT>"
4069
"[ <A class=external HREF=\"http://www.radb.net/cgi-bin/radb/whois.cgi?obj=%s\">Whois</A> ]\n",
4206
"[ <A class=external HREF=\"http://ws.arin.net/cgi-bin/whois.pl?queryinput=%s\">Whois</A> ]\n",
4070
4207
getRowColor(), "Further Host Information", el->hostNumIpAddress);
4071
4208
sendString(buf);
4073
if(myGlobals.runningPref.mapperURL) {
4075
buildMapLink(el, buf, sizeof(buf));
4080
4210
sendString("</TD></TR>\n");
4084
4214
if(el->hostNumIpAddress[0] != '\0') {
4085
struct stat statbuf;
4088
if((!myGlobals.runningPref.dontTrustMACaddr) && subnetPseudoLocalHost(el)
4089
&& (el->ethAddressString[0] != '\0') /* Really safe in case a host that was supposed to be local isn't really so*/)
4090
key = el->ethAddressString;
4092
key = el->hostNumIpAddress;
4094
/* Do NOT add a '/' at the end of the path because Win32 will complain about it */
4095
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf), "%s/interfaces/%s/hosts/%s",
4096
myGlobals.rrdPath != NULL ? myGlobals.rrdPath : ".",
4097
myGlobals.device[myGlobals.actualReportDeviceId].uniqueIfName,
4100
revertSlashIfWIN32(buf, 0);
4102
if(stat(buf, &statbuf) == 0) {
4215
char rrdBuf[LEN_GENERAL_WORK_BUFFER];
4217
hostRRdGraphLink(el, NETWORK_VIEW, 0, rrdBuf, sizeof(rrdBuf));
4219
if(rrdBuf[0] != '\0') {
4103
4220
safe_snprintf(__FILE__, __LINE__, buf, sizeof(buf),
4104
4221
"<TR "TR_ON" %s><TH "TH_BG" ALIGN=LEFT "DARK_BG">Historical Data</TH>\n"
4105
"<TD "TD_BG" ALIGN=\"right\">"
4106
"[ <a href=\"/" CONST_PLUGINS_HEADER
4107
"rrdPlugin?action=list&key=interfaces/%s/hosts/%s&title=host%%20%s\">"
4108
"<img valign=\"top\" border=\"0\" src=\"/graph.gif\""
4109
" class=tooltip alt=\"view rrd graphs of historical data for this host\"></a> ]"
4112
myGlobals.device[myGlobals.actualReportDeviceId].uniqueIfName,
4114
el->hostResolvedName[0] != '\0' ? el->hostResolvedName : el->hostNumIpAddress);
4222
"<TD "TD_BG" ALIGN=\"right\">%s</TD></TR>\n",
4223
getRowColor(), rrdBuf);
4115
4224
sendString(buf);
4527
4633
/* ******************************** */
4529
4635
void printHostsCharacterization(void) {
4530
u_int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, unhealthy=0, totHosts=0;
4636
u_int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, l=0, unhealthy=0, totHosts=0;
4531
4637
HostTraffic *el;
4532
char buf[LEN_GENERAL_WORK_BUFFER], hostLinkBuf[LEN_GENERAL_WORK_BUFFER], headerSent = 0;
4638
char buf[LEN_GENERAL_WORK_BUFFER], hostLinkBuf[3*LEN_GENERAL_WORK_BUFFER], headerSent = 0;
4534
4640
printHTMLheader("Local Hosts Characterization", NULL, 0);
4582
4688
if(isHostHealthy(el) != 0) { sendString("<TD ALIGN=CENTER>X</TD>"); unhealthy++; } else sendString("<TD> </TD>");
4583
4689
if(isBridgeHost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); a++; } else sendString("<TD> </TD>");
4584
4690
if(gatewayHost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); b++; } else sendString("<TD> </TD>");
4585
if(isVoIPHost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); b++; } else sendString("<TD> </TD>");
4586
if(isPrinter(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); c++; } else sendString("<TD> </TD>");
4587
if(nameServerHost(el) || isNtpServer(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); d++; } else sendString("<TD> </TD>");
4588
if(isSMTPhost(el) || isIMAPhost(el) || isPOPhost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); e++; } else sendString("<TD> </TD>");
4589
if(isDirectoryHost(el) || isFTPhost(el) || isHTTPhost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); f++; } else sendString("<TD> </TD>");
4590
if(isDHCPServer(el) || isWINShost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); g++; } else sendString("<TD> </TD>");
4591
if(isDHCPClient(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); h++; } else sendString("<TD> </TD>");
4592
if(isP2P(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); i++; } else sendString("<TD> </TD>");
4691
if(isVoIPHost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); c++; } else sendString("<TD> </TD>");
4692
if(isPrinter(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); d++; } else sendString("<TD> </TD>");
4693
if(nameServerHost(el) || isNtpServer(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); e++; } else sendString("<TD> </TD>");
4694
if(isSMTPhost(el) || isIMAPhost(el) || isPOPhost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); f++; } else sendString("<TD> </TD>");
4695
if(isDirectoryHost(el) || isFTPhost(el) || isHTTPhost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); g++; } else sendString("<TD> </TD>");
4696
if(isDHCPServer(el) || isWINShost(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); h++; } else sendString("<TD> </TD>");
4697
if(isDHCPClient(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); i++; } else sendString("<TD> </TD>");
4698
if(isP2P(el)) { sendString("<TD ALIGN=CENTER>X</TD>"); l++; } else sendString("<TD> </TD>");
4594
4700
sendString("</TR>\n");
5296
5413
void buildMapLink(HostTraffic *el, char *buf, int buf_len) {
5297
5414
if(privateIPAddress(el))
5300
5418
safe_snprintf(__FILE__, __LINE__, buf, buf_len,
5301
" <A class=external href=\"#\" title=\"Physical Host Location\"onclick=\"window.open(\'%s?host=%s@%s\', "
5419
" <A class=external href=\"#\" title=\"Physical Host Location\" "
5420
"onclick=\"window.open(\'%s?host=%s@%s\', "
5302
5421
"\'Host Map\', \'height=210, width=320,toolbar=nodirectories=no,status=no,"
5303
5422
"menubar=no,scrollbars=no,resizable=no\'); return false;\">"
5304
5423
"<IMG SRC=/marker.png border=0></A>\n",
5305
5424
myGlobals.runningPref.mapperURL,
5306
5425
el->hostResolvedName, el->hostNumIpAddress);
5427
safe_snprintf(__FILE__, __LINE__, buf, buf_len,
5428
" <A class=external href=\"#\" title=\"Physical Host Location\" "
5429
"onclick=\"window.open(\'%s?host=%s&ip=%s\', "
5430
"\'Host Map\', \'height=530, width=750,toolbar=nodirectories=no,status=no,"
5431
"menubar=no,scrollbars=no,resizable=no\'); return false;\">"
5432
"<IMG SRC=/marker.png border=0></A>\n",
5433
myGlobals.runningPref.mapperURL,
5434
el->hostResolvedName, el->hostNumIpAddress);
5309
5439
/* ************************************ */