GammaCyber

כתיבת קוד — שיעור 24

Network Security

כל 2 משימות הקוד שנשמרו מהשיעור מופיעות כאן, עם דרישות, דוגמאות וקוד פתיחה. אפשר לכתוב פתרון בעורך המקומי וללחוץ על „בדיקת AI” לקבלת ציון, רמזים והערות.

T2 · בסיסי200 נק'~15 דק'algorithmic
מנוע חוקי Firewall (First-Match)
ממש firewall(rules, packet). rules היא רשימת חוקים (action, proto, port) כאשר action הוא 'ALLOW'/'DENY' ו-'*' הוא תו-כללי. packet הוא (proto, port). החזר את פעולת החוק *הראשון* שמתאים; אם אף חוק לא מתאים — 'DENY' (ברירת-מחדל בטוחה).
דוגמאות
firewall([('ALLOW','tcp',80),('DENY','*','*')], ('tcp',80)) → 'ALLOW'
...('tcp',22) → 'DENY'
פתרון-ייחוס מנוע חוקי Firewall (First-Match) ›
def firewall(rules: list, packet: tuple) -> str: proto, port = packet for act, pr, po in rules: # first match wins if (pr == '*' or pr == proto) and (po == '*' or po == port): return act return 'DENY' # default deny
הפתרון נשמר מקומית אוטומטית.
T3 · בינוני350 נק'~25 דק'algorithmic
זיהוי Port Scan (IDS)
ממש detect_portscan(logs, threshold, window). logs הם (time, src, dst_port). כתובת מקור 'חשודה' אם פנתה ל-≥ threshold פורטים *ייחודיים* בתוך חלון זמן של ≤ window שניות. החזר רשימה ממוינת של כתובות המקור החשודות.
דוגמאות
A פונה ל-80,81,82,83 בתוך 3ש', threshold=3, window=5 → ['A']
פתרון-ייחוס זיהוי Port Scan (IDS) ›
from collections import defaultdict def detect_portscan(logs, threshold, window): bysrc = defaultdict(list) for t, src, port in logs: bysrc[src].append((t, port)) flagged = [] for src, ev in bysrc.items(): ev.sort(); l = 0; cnt = {} for r in range(len(ev)): cnt[ev[r][1]] = cnt.get(ev[r][1], 0) + 1 while ev[r][0] - ev[l][0] > window: # חלון זמן נע p = ev[l][1]; cnt[p] -= 1 if cnt[p] == 0: del cnt[p] l += 1 if len(cnt) >= threshold: # מספיק פורטים שונים בחלון flagged.append(src); break return sorted(flagged)
הפתרון נשמר מקומית אוטומטית.