Go语言入侵检测系统,从零基础到精通,收藏这篇就够了!


各位网络冲浪选手们,大家好!今天咱们要聊点刺激的——用Go语言撸一个简易版的入侵检测系统。这可不是纸上谈兵,而是实打实能提升咱们网络安全系数的硬核技能!学完这波操作,以后谁还敢在你家网络里“瞎溜达”?

啥是入侵检测系统? 简单粗暴地说,它就像你家的“电子眼”,时刻盯着系统日志,一旦发现有“小偷”或者“可疑人员”(比如疯狂试密码、非法访问),立马发出警报!今天咱们先搞个简化版,让大家伙儿明白其中的门道。

准备好了吗?Let's Go!


想要当“网络警察”,首先得学会“看监控录像”。在入侵检测系统中,这“监控录像”就是日志文件。假设咱们的日志文件长这样:

复制

[INFO] 用户 admin 成功登陆[WARNING] 用户 root 尝试登陆失败[ERROR] 检测到未授权访问

咱们的目标是:把这些“录像”一条条读进来,存到程序里,方便后续分析。

go复制

package main

import (
    "bufio"
    "fmt"
    "os"
)

// ReadLogFile 读取日志文件
func ReadLogFile(filePath string) ([]string, error) {
    var logEntries []string // 用切片存储日志条目

    file, err := os.Open(filePath) // 打开文件
    if err != nil {
        return nil, fmt.Errorf("打开日志文件失败: %w", err) // 错误处理,更友好
    }
    defer file.Close() // 确保文件在使用完毕后关闭

    scanner := bufio.NewScanner(file) // 创建 scanner 读取文件内容
    for scanner.Scan() {              // 逐行读取文件
        logEntries = append(logEntries, scanner.Text()) // 将每行日志添加到切片中
    }

    if err := scanner.Err(); err != nil { // 检查是否有读取错误
        return nil, fmt.Errorf("读取日志文件时出错: %w", err)
    }

    return logEntries, nil
}

func main() {
    filePath := "logs.txt" // 你的日志文件路径
    logEntries, err := ReadLogFile(filePath)
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, log := range logEntries {
        fmt.Println(log) // 打印读取到的每一行日志
    }
}

代码解读:

  1. bufio.NewScanner: 这玩意儿就像一个“扫描仪”,能帮你一行一行地读取文件内容。
  2. defer file.Close(): 这句代码贼重要!它能保证程序结束后,自动关闭文件,防止资源泄漏。
  3. 返回值: 咱们用一个[]string切片来存放所有的日志记录。

赶紧创建一个名为logs.txt的文件,随便写几行日志,然后跑一下上面的代码,看看能不能成功读取并打印出来。


光“看监控录像”还不够,还得学会“分析案情”。咱们的目标是:

  • 揪出包含“Failed login”(登录失败)或者“Unauthorized access”(未授权访问)的日志。
  • 揪出某个用户频繁登录失败的“倒霉蛋”。

这时候,字符串匹配就派上大用场了!

go复制

package main

import (
    "fmt"
    "strings"
)

// DetectIntrusions 检测入侵行为
func DetectIntrusions(logEntries []string) {
    for _, log := range logEntries { // 遍历每一条日志
        if strings.Contains(log, "Failed login") || strings.Contains(log, "Unauthorized access") {
            fmt.Println("警告!检测到可疑行为:", log) // 发现可疑行为,发出警告
        }
    }
}

func main() {
    // 假设你的日志条目已经读取到 logEntries
    logEntries := []string{
        "[INFO] 用户 admin 成功登陆",
        "[WARNING] 用户 root 尝试登陆失败",
        "[ERROR] 检测到未授权访问",
    }
    DetectIntrusions(logEntries) // 调用检测函数
}

代码解读:

  1. strings.Contains: 这个函数就像一个“搜索雷达”,能帮你快速找到包含特定关键词的日志。
  2. 循环检查: 遍历所有的日志记录,看看有没有“坏人”露出马脚。

把之前读取的日志数据,丢给DetectIntrusions函数,看看能不能准确揪出那些“可疑分子”。


除了“抓现行”,咱们还得学会“数据分析”,看看有没有“惯犯”。比如,统计某个用户的登录失败次数,如果超过一定阈值,就拉响警报!

go复制

package main

import (
    "fmt"
    "strings"
)

// TrackFailedLogins 跟踪失败登录
func TrackFailedLogins(logEntries []string) {
    failureCount := make(map[string]int) // 创建一个 map 来存储每个用户的失败次数

    for _, log := range logEntries { // 遍历日志
        if strings.Contains(log, "Failed login") { // 如果包含 "Failed login"
            parts := strings.Split(log, "user ") // 分割字符串以提取用户名
            if len(parts) > 1 {
                user := strings.TrimSpace(parts[1])              // 提取用户名
                failureCount[user]++                               // 增加该用户的失败次数
            }
        }
    }

    for user, count := range failureCount { // 遍历所有用户
        if count > 3 { // 假设失败次数超过 3 次就算异常
            fmt.Printf("警告!用户 %s 登录失败次数过多: %d
", user, count) // 发出警告
        }
    }
}

func main() {
    // 假设你的日志条目已经读取到 logEntries
    logEntries := []string{
        "[INFO] 用户 admin 成功登陆",
        "[WARNING] 用户 root 尝试登陆失败",
        "[WARNING] 用户 root 尝试登陆失败",
        "[WARNING] 用户 root 尝试登陆失败",
        "[WARNING] 用户 root 尝试登陆失败",
    }
    TrackFailedLogins(logEntries) // 调用跟踪函数
}

代码解读:

  1. map[string]int: 这玩意儿就像一个“计数器”,能帮你统计每个用户的失败登录次数。
  2. strings.Split: 这个函数能帮你把日志字符串分割成小块,方便提取用户名。

注意,提取用户信息时,一定要确保日志格式统一,不然可能会出现“提取错误”的情况。


最后,咱们把所有功能串起来,打造一个简易版的入侵检测系统!

go复制

package main

import (
    "fmt"
)

func main() {
    // 1. 读取日志文件
    filePath := "logs.txt"
    logEntries, err := ReadLogFile(filePath)
    if err != nil {
        fmt.Println("读取日志文件失败:", err)
        return
    }

    // 2. 检测可疑行为
    fmt.Println("开始检测可疑行为...")
    DetectIntrusions(logEntries)

    // 3. 统计失败登录次数
    fmt.Println("统计用户失败登录次数...")
    TrackFailedLogins(logEntries)
}

假设logs.txt文件内容如下:

go复制

[INFO] 用户 admin 成功登陆
[WARNING] 用户 root 尝试登陆失败
[ERROR] 检测到未授权访问
[WARNING] 用户 root 尝试登陆失败
[WARNING] 用户 root 尝试登陆失败
[WARNING] 用户 root 尝试登陆失败

运行程序,你可能会看到如下输出:

复制

开始检测可疑行为...
警告!检测到可疑行为: [WARNING] 用户 root 尝试登陆失败
警告!检测到可疑行为: [ERROR] 检测到未授权访问
统计用户失败登录次数...
警告!用户 root 登录失败次数过多: 4

恭喜你,成功解锁“网络安全初体验”! 通过这个小项目,你已经掌握了:

  1. 文件操作: 如何用Go语言读取文件内容。
  2. 字符串处理: 如何从日志中提取关键信息。
  3. 数据统计: 如何用map统计用户行为。

这只是一个入门级的入侵检测系统,如果你想更上一层楼,可以尝试:

  • 用正则表达式提取更复杂的信息。
  • 把检测结果写入到数据库或者发送到报警系统。
  • 添加更多的检测规则,比如监控特定IP地址的访问行为。

别光看不练! 赶紧动手试试,把这个项目跑起来,然后发挥你的想象力,让它变得更强大!记住,每一次尝试,都是你成为网络安全大牛的垫脚石!

黑客/网络安全学习包

资料目录

  1. 成长路线图&学习规划

  2. 配套视频教程

  3. SRC&黑客文籍

  4. 护网行动资料

  5. 黑客必读书单

  6. 面试题合集

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

1.成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

2.视频教程

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩


因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*************************************

3.SRC&黑客文籍

大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录

SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!

4.护网行动资料

其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

5.黑客必读书单

**

**

6.面试题合集

当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

更多内容为防止和谐,可以扫描获取~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

*************************************优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享*********************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值