Package: ntop
Version: 2:3.0-5
Severity: minor
When browsing to Local IP -> Active TCP Sessions, the numbers of pages are
shown in a wrong way.
In the pages are shown only ACTIVE and established connections but the total
number includes connections wich are not shown.
The folowing patch should fix this problem.
-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.8
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
Versions of packages ntop depends on:
ii debconf 1.4.30.13 Debian configuration management sy
ii libc6 2.3.2.ds1-22sarge3 GNU C Library: Shared libraries an
ii libgd1-noxpm 1.8.4.debian-1 GD Graphics Library (old version,
ii libgdbm3 1.8.3-2 GNU dbm database routines (runtime
ii libgdome2-0 0.8.1-1 DOM level2 library for accessing X
ii libglib1.2 1.2.10-9 The GLib library of C routines
ii libglib2.0-0 2.6.4-1 The GLib library of C routines
ii libpcap0.7 0.7.2-7 System interface for user-level pa
ii libpng12-0 1.2.8rel-1 PNG library - runtime
ii libssl0.9.7 0.9.7e-3sarge1 SSL shared libraries
ii libxml2 2.6.16-7 GNOME XML library
ii zlib1g 1:1.2.2-4.sarge.2 compression library - runtime
-- debconf information:
* ntop/user: ntop
* ntop/interfaces: eth0,eth1,eth2,eth3,eth4
--- ntop-3.0.orig/report.c 2004-03-18 12:22:32.000000000 +0200
+++ ntop-3.0/report.c 2006-04-20 15:06:28.635032600 +0300
@@ -2892,8 +2892,8 @@
void printActiveTCPSessions(int actualDeviceId, int pageNum, HostTraffic *el) {
int idx;
char buf[LEN_GENERAL_WORK_BUFFER], hostLinkBuf[LEN_GENERAL_WORK_BUFFER],
- int numSessions, printedSessions;
+ int numSessions, printedSessions, processSessions, nonprintedSessions, fakeSessions;
char formatBuf[32], formatBuf1[32], formatBuf2[32], formatBuf3[32],
formatBuf4[32], formatBuf5[32], formatBuf6[32];
@@ -2927,6 +2927,7 @@
IPSession *session = myGlobals.device[myGlobals.actualReportDeviceId].tcpSession[idx];
while((session != NULL) && (printedSessions < myGlobals.maxNumLines)) {
+ processSessions++;
#ifndef PARM_PRINT_ALL_SESSIONS
if(session->sessionState != FLAG_STATE_ACTIVE) {
session = session->next;
@@ -3021,11 +3022,77 @@
, getSessionState(session)
#endif
) < 0) BufferTooShort();
-
sendString(buf);
session = session->next;
printedSessions++;
}
+ while((session != NULL) && (printedSessions >= myGlobals.maxNumLines)) {
+ processSessions++;
+#ifndef PARM_PRINT_ALL_SESSIONS
+ if(session->sessionState != FLAG_STATE_ACTIVE) {
+ session = session->next;
+ continue;
+ }
+#endif
+
+ if(el && (session->initiator != el) && (session->remotePeer != el)) {
+ session = session->next;
+ continue;
+ }
+
+ if((numSessions++) < pageNum*myGlobals.maxNumLines) {
+ session = session->next;
+ continue;
+ }
+
+ if(printedSessions == 0) {
+ printH"TABLE_ON"<TABLE BORDER=1 "TABLE_DEFAULTS"><TR "TR_ON" "DARK_BG">"
+ "<TH "TH_BG">Client</TH>"
+ "<TH "TH_BG">Server</TH>"
+ "<TH "TH_BG">Data Sent</TH>"
+ "<TH "TH_BG">Data Rcvd</TH>"
+ "<TH "TH_BG">Active Since</TH>"
+ "<TH "TH_BG">Last Seen</TH>"
+ "<TH "TH_BG">Duration</TH>"
+ "<TH "TH_BG">Inactive</TH>"
+ "<TH "TH_BG">Latency</TH>"
+#ifdef PARM_PRINT_ALL_SESSIONS
+ "<TH "TH_BG">State</TH>"
+#endif
+ "</TR>\n");
+ }
+
+ sport = getPortByNum(session->sport, IPPROTO_TCP);
+ dport = getPortByNum(session->dport, IPPROTO_TCP);
+ dataSent = session->bytesSent.value;
+ dataRcvd = session->bytesRcvd.value;
+
+ if(sport == NULL) {
+ static char _sport[8];
+ if(snprintf(_sport, 8, "%d", session->sport) < 0)
+ BufferTooShort();
+ sport = _sport;
+ }
+
+ if(dport == NULL) {
+ static char _dport[8];
+ if(snprintf(_dport, 8, "%d", session->dport) < 0)
+ BufferTooShort();
+ dport = _dport;
+ }
+
+ /* Sanity check */
+ if((myGlobals.actTime < session->firstSeen)
+ || (session->firstSeen == 0))
+ session->firstSeen = myGlobals.actTime;
+ if((myGlobals.actTime < session->lastSeen)
+ || (session->lastSeen == 0))
+ session->lastSeen = myGlobals.actTime;
+ session = session->next;
+ nonprintedSessions++;
+ }
}
#ifdef CFG_MULTITHREADED
releaseMutex(&myGlobals.tcpSessionsMutex);
@@ -3035,11 +3102,14 @@
if(printedSessions > 0) {
sendString("</TABLE>"TABLE_OFF"<P>\n");
sendString("</CENTER>\n");
-
+ nonprintedSessions = nonprintedSessions + pageNum * myGlobals.maxNumLines;
+ fakeSessions = processSessions - printedSessions - nonprintedSessions;
+ // snprintf(buf,sizeof(buf),"Afisate: %d/ Neafisate: %d/False: %d/Total: %d\n", printedSessions, nonprintedSessions, fakeSessions, myGlobals.device[actualDeviceId].numTcpSessions);
+ // sendString(buf);
if(el == NULL)
addPageIndicator(CONST_ACTIVE_TCP_SESSIONS_HTML, pageNum,
- myGlobals.device[actualDeviceId].numTcpSessions,
- myGlobals.maxNumLines, -1, 0);
+ myGlobals.device[actualDeviceId].numTcpSessions - fakeSessions,
+ myGlobals.maxNumLines, -1, 0);
printHostColorCode(FALSE, 0);