{"id":123,"date":"2025-01-03T16:21:45","date_gmt":"2025-01-03T16:21:45","guid":{"rendered":"https:\/\/sites.wp.odu.edu\/cyberimpact1\/?page_id=123"},"modified":"2026-09-14T15:28:12","modified_gmt":"2026-09-14T15:28:12","slug":"cyse-301","status":"publish","type":"page","link":"https:\/\/sites.wp.odu.edu\/matthewburd\/cyse-301\/","title":{"rendered":"CYSE 301 (C++ Programming) Artifact #8"},"content":{"rendered":"\n<p>EXAMPLE OF A SECURITY LOG ANALYZER<br><\/p>\n\n\n\n<p>#include &lt;iostream&gt;<\/p>\n\n\n\n<p> #include &lt;fstream&gt;<\/p>\n\n\n\n<p>#include &lt;sstream&gt;<\/p>\n\n\n\n<p>#include &lt;string&gt;<\/p>\n\n\n\n<p>#include &lt;vector&gt;<\/p>\n\n\n\n<p>#include &lt;map&gt;<\/p>\n\n\n\n<p>#include &lt;set&gt;<\/p>\n\n\n\n<p>using namespace std;<\/p>\n\n\n\n<p>struct LogEntry {<br>string timestamp;<br>string ipAddress;<br>string username;<br>string action;<br>bool success;<br>};<\/p>\n\n\n\n<p>class SecurityAnalyzer {<br>private:<br>vector logs;<br>map failedAttempts;<br>set suspiciousIPs;<\/p>\n\n\n\n<p>public:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void loadLogs(const string&amp; filename) {\n    ifstream file(filename);\n\n    if (!file.is_open()) {\n        cerr &lt;&lt; \"Error: Could not open log file.\\n\";\n        return;\n    }\n\n    string line;\n\n    while (getline(file, line)) {\n        stringstream ss(line);\n        string timestamp, ip, username, action, status;\n\n        getline(ss, timestamp, ',');\n        getline(ss, ip, ',');\n        getline(ss, username, ',');\n        getline(ss, action, ',');\n        getline(ss, status, ',');\n\n        LogEntry entry;\n\n        entry.timestamp = timestamp;\n        entry.ipAddress = ip;\n        entry.username = username;\n        entry.action = action;\n        entry.success = (status == \"SUCCESS\");\n\n        logs.push_back(entry);\n\n        if (!entry.success) {\n            failedAttempts&#091;ip]++;\n        }\n    }\n\n    file.close();\n}\n\nvoid detectThreats() {\n\n    const int THRESHOLD = 5;\n\n    for (const auto&amp; attempt : failedAttempts) {\n\n        if (attempt.second &gt;= THRESHOLD) {\n            suspiciousIPs.insert(attempt.first);\n        }\n    }\n}\n\nvoid generateReport() {\n\n    cout &lt;&lt; \"\\n========== SECURITY REPORT ==========\\n\";\n\n    cout &lt;&lt; \"\\nTotal log entries: \"\n         &lt;&lt; logs.size() &lt;&lt; endl;\n\n    cout &lt;&lt; \"\\nFailed Login Attempts:\\n\";\n\n    for (const auto&amp; attempt : failedAttempts) {\n        cout &lt;&lt; \"IP: \" &lt;&lt; attempt.first\n             &lt;&lt; \" | Failed Attempts: \"\n             &lt;&lt; attempt.second;\n\n        if (suspiciousIPs.count(attempt.first)) {\n            cout &lt;&lt; \" &lt;-- SUSPICIOUS\";\n        }\n\n        cout &lt;&lt; endl;\n    }\n\n    cout &lt;&lt; \"\\nSuspicious IP Addresses:\\n\";\n\n    if (suspiciousIPs.empty()) {\n        cout &lt;&lt; \"None detected.\\n\";\n    }\n    else {\n        for (const string&amp; ip : suspiciousIPs) {\n            cout &lt;&lt; \"- \" &lt;&lt; ip &lt;&lt; endl;\n        }\n    }\n\n    cout &lt;&lt; \"\\n=====================================\\n\";\n}<\/code><\/pre>\n\n\n\n<p>};<\/p>\n\n\n\n<p>int main() {<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SecurityAnalyzer analyzer;\n\nanalyzer.loadLogs(\"security.log\");\n\nanalyzer.detectThreats();\n\nanalyzer.generateReport();\n\nreturn 0;<\/code><\/pre>\n\n\n\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>EXAMPLE OF A SECURITY LOG ANALYZER #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;map&gt; #include &lt;set&gt; using namespace std; struct LogEntry {string timestamp;string ipAddress;string username;string action;bool success;}; class SecurityAnalyzer {private:vector logs;map failedAttempts;set suspiciousIPs; public: }; int main() { }<\/p>\n","protected":false},"author":30247,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/pages\/123"}],"collection":[{"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/users\/30247"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":5,"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/pages\/123\/revisions"}],"predecessor-version":[{"id":511,"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/pages\/123\/revisions\/511"}],"wp:attachment":[{"href":"https:\/\/sites.wp.odu.edu\/matthewburd\/wp-json\/wp\/v2\/media?parent=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}