Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/ashuu012_project.json
T

1 line
6.4 KiB
JSON

{"repo": "ashuu012/project", "files": {"3.py": {"6bf06f8538d545c9982cfd5eb16b84c73cd3cd11": {"t": 1785674395.6115875, "n": 5989, "h": "6cde8b31223982c5", "c": "import streamlit as st\r\nimport pandas as pd\r\nimport numpy as np\r\nfrom sklearn.ensemble import RandomForestClassifier\r\nfrom sklearn.model_selection import train_test_split\r\nfrom sklearn.metrics import accuracy_score\r\nfrom groq import Groq\r\nimport os\r\n\r\n# --- PAGE SETUP ---\r\nst.set_page_config(page_title=\"AI-NIDS Student Project\", layout=\"wide\")\r\n\r\nst.title(\"AI-Based Network Intrusion Detection System\")\r\nst.markdown(\"\"\"\r\n**Student Project**: This system uses **Random Forest** to detect Network attacks and **Groq AI** to explain the packets.\r\n\"\"\")\r\n\r\n# --- CONFIGURATION ---\r\nDATA_FILE = \"Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv\"\r\n\r\n# --- SIDEBAR: SETTINGS ---\r\nst.sidebar.header(\"1. Settings\")\r\ngroq_api_key = st.sidebar.text_input(\"Groq API Key (starts with gsk_)\", type=\"password\")\r\nst.sidebar.caption(\"[Get a free key here](https://console.groq.com/keys)\")\r\n\r\nst.sidebar.header(\"2. Model Training\")\r\n\r\n@st.cache_data\r\ndef load_data(filepath):\r\n try:\r\n df = pd.read_csv(filepath, nrows=15000)\r\n df.columns = df.columns.str.strip()\r\n df.replace([np.inf, -np.inf], np.nan, inplace=True)\r\n df.dropna(inplace=True)\r\n return df\r\n except FileNotFoundError:\r\n return None\r\n\r\ndef train_model(df):\r\n features = ['Flow Duration', 'Total Fwd Packets', 'Total Backward Packets', \r\n 'Total Length of Fwd Packets', 'Fwd Packet Length Max', \r\n 'Flow IAT Mean', 'Flow IAT Std', 'Flow Packets/s']\r\n target = 'Label'\r\n \r\n missing_cols = [c for c in features if c not in df.columns]\r\n if missing_cols:\r\n st.error(f\"Missing columns in CSV: {missing_cols}\")\r\n return None, 0, [], None, None\r\n\r\n X = df[features]\r\n y = df[target]\r\n \r\n X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\r\n \r\n clf = RandomForestClassifier(n_estimators=10, max_depth=10, random_state=42)\r\n clf.fit(X_train, y_train)\r\n \r\n score = accuracy_score(y_test, clf.predict(X_test))\r\n return clf, score, features, X_test, y_test\r\n\r\n# --- APP LOGIC ---\r\ndf = load_data(DATA_FILE)\r\n\r\nif df is None:\r\n st.error(f\"Error: File '{DATA_FILE}' not found. Please upload it to the Files tab.\")\r\n st.stop()\r\n\r\nst.sidebar.success(f\"Dataset Loaded: {len(df)} rows\")\r\n\r\nif st.sidebar.button(\"Train Model Now\"):\r\n with st.spinner(\"Training model...\"):\r\n clf, accuracy, feature_names, X_test, y_test = train_model(df)\r\n if clf:\r\n st.session_state['model'] = clf\r\n st.session_state['features'] = feature_names\r\n st.session_state['X_test'] = X_test \r\n st.session_state['y_test'] = y_test\r\n st.sidebar.success(f\"Training Complete! Accuracy: {accuracy:.2%}\")\r\n\r\nst.header(\"3. Threat Analysis Dashboard\")\r\n\r\nif 'model' in st.session_state:\r\n col1, col2 = st.columns(2)\r\n \r\n with col1:\r\n st.subheader(\"Simulation\")\r\n st.info(\"Pick a random packet from the test data to simulate live traffic.\")\r\n \r\n if st.button(\"🎲 Capture Random Packet\"):\r\n random_idx = np.random.randint(0, len(st.session_state['X_test']))\r\n packet_data = st.session_state['X_test'].iloc[random_idx]\r\n actual_label = st.session_state['y_test'].iloc[random_idx]\r\n \r\n st.session_state['current_packet'] = packet_data\r\n st.session_state['actual_label'] = actual_label\r\n \r\n if 'current_packet' in st.session_state:\r\n packet = st.session_state['current_packet']\r\n \r\n with col1:\r\n st.write(\"**Packet Header Info:**\")\r\n st.dataframe(packet, use_container_width=True)\r\n\r\n with col2:\r\n st.subheader(\"AI Detection Result\")\r\n prediction = st.session_state['model'].predict([packet])[0]\r\n \r\n if prediction == \"BENIGN\":\r\n st.success(f\" STATUS: **SAFE (BENIGN)**\")\r\n else:\r\n st.error(f\"🚨 STATUS: **ATTACK DETECTED ({prediction})**\")\r\n \r\n st.caption(f\"Ground Truth Label: {st.session_state['actual_label']}\")\r\n\r\n st.markdown(\"---\")\r\n st.subheader(\" Ask AI Analyst (Groq)\")\r\n \r\n if st.button(\"Generate Explanation\"):\r\n if not groq_api_key:\r\n st.warning(\" Please enter your Groq API Key in the sidebar first.\")\r\n else:\r\n try:\r\n client = Groq(api_key=groq_api_key)\r\n \r\n prompt = f\"\"\"\r\n You are a cybersecurity analyst. \r\n A network packet was detected as: {prediction}.\r\n \r\n Packet Technical Details:\r\n {packet.to_string()}\r\n \r\n Please explain:\r\n 1. Why these specific values (like Flow Duration or Packet Length) might indicate {prediction}.\r\n 2. If it is BENIGN, explain why it looks normal.\r\n 3. Keep the answer short and simple for a student.\r\n \"\"\"\r\n\r\n with st.spinner(\"Groq is analyzing the packet...\"):\r\n completion = client.chat.completions.create(\r\n model=\"llama-3.3-70b-versatile\", # <--- UPDATED MODEL NAME\r\n messages=[\r\n {\"role\": \"user\", \"content\": prompt}\r\n ],\r\n temperature=0.6,\r\n )\r\n st.info(completion.choices[0].message.content)\r\n \r\n except Exception as e:\r\n st.error(f\"API Error: {e}\")\r\nelse:\r\n st.info(\" Waiting for model training. Click **'Train Model Now'** in the sidebar.\")\r\n\r\n"}}}}