From faf25a004646c486d4dafa37be472369604fdab0 Mon Sep 17 00:00:00 2001 From: alk Date: Mon, 30 Sep 2013 11:16:10 +0000 Subject: [PATCH 1/1] PortCheck: option to save unmatched pages ("FailedDirectory" in "portCheck" section) git-svn-id: https://svn.netxms.org/public/netxms/trunk@7719 9552d9c7-0b43-4715-b1f2-35d7e35e46cc --- src/agent/subagents/portCheck/http.cpp | 44 +++++++++++++++++++++++++++++--- src/agent/subagents/portCheck/main.cpp | 2 ++ src/agent/subagents/portCheck/main.h | 1 + 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/agent/subagents/portCheck/http.cpp b/src/agent/subagents/portCheck/http.cpp index 45a71dc..ef68686 100644 --- a/src/agent/subagents/portCheck/http.cpp +++ b/src/agent/subagents/portCheck/http.cpp @@ -5,6 +5,33 @@ #include "main.h" #include "net.h" +/** + * Save HTTP(s) responce to file for later investigation + * (Should be enabled by setting "FailedDirectory" in config + */ +static void SaveResponse(char *host, UINT32 ip, char *buffer) +{ + if (g_szFailedDir[0] == 0) + { + return; + } + + time_t now = time(NULL); + char fileName[2048]; + char tmp[32]; + snprintf(fileName, 2048, "%s%s%s-%d", + g_szFailedDir, FS_PATH_SEPARATOR_A, + host != NULL ? host : IpToStrA(ip, tmp), + now); + FILE *f = fopen(fileName, "wb"); + if (f != NULL) + { + fwrite(buffer, strlen(buffer), 1, f); + fclose(f); + } +} + + LONG H_CheckHTTP(const TCHAR *pszParam, const TCHAR *pArg, TCHAR *pValue) { LONG nRet = SYSINFO_RC_SUCCESS; @@ -118,6 +145,10 @@ int CheckHTTP(char *szAddr, UINT32 dwAddr, short nPort, char *szURI, { nRet = PC_ERR_NONE; } + else + { + SaveResponse(szAddr, dwAddr, buff); + } safe_free(buff); } @@ -239,10 +270,17 @@ int CheckHTTPS(char *szAddr, UINT32 dwAddr, short nPort, char *szURI, char *szHo } offset += i; } - if (buffer[0] != 0 && tre_regexec(&preg, buffer, 0, NULL, 0) == 0) - { - ret = PC_ERR_NONE; + if (buffer[0] != 0) { + if (tre_regexec(&preg, buffer, 0, NULL, 0) == 0) + { + ret = PC_ERR_NONE; + } + else + { + SaveResponse(szAddr, dwAddr, buffer); + } } + safe_free(buffer); } diff --git a/src/agent/subagents/portCheck/main.cpp b/src/agent/subagents/portCheck/main.cpp index a5c3391..69cf6d5 100644 --- a/src/agent/subagents/portCheck/main.cpp +++ b/src/agent/subagents/portCheck/main.cpp @@ -21,6 +21,7 @@ // char g_szDomainName[128] = "netxms.org"; +char g_szFailedDir[1024] = ""; // @@ -149,6 +150,7 @@ static NX_CFG_TEMPLATE m_cfgTemplate[] = { { _T("DomainName"), CT_MB_STRING, 0, 0, 128, 0, g_szDomainName }, { _T("Timeout"), CT_LONG, 0, 0, 0, 0, &m_dwDefaultTimeout }, + { _T("FailedDirectory"), CT_MB_STRING, 0, 0, 1024, 0, &g_szFailedDir }, { _T(""), CT_END_OF_LIST, 0, 0, 0, 0, NULL } }; diff --git a/src/agent/subagents/portCheck/main.h b/src/agent/subagents/portCheck/main.h index e876c49..e00ba4c 100644 --- a/src/agent/subagents/portCheck/main.h +++ b/src/agent/subagents/portCheck/main.h @@ -29,5 +29,6 @@ LONG H_CheckTelnet(const TCHAR *, const TCHAR *, TCHAR *); int CheckTelnet(char *, UINT32, short, char *, char *, UINT32); extern char g_szDomainName[]; +extern char g_szFailedDir[]; #endif // __MAIN__H__ -- 1.7.9.6 (Apple Git-31.1)