Go实时监听日志文件内容

最近自己的frp转发的一些内网远程连接,老是被莫名其妙的人进行暴力破解,而且破解的IP大都是国外的。于是想写个程序实时监听frp的日志文件,分析ip,根据ip的所在地以及链接的频率直接把它加到防火墙黑名单中。
要实现这个功能,首先就是要能实时监听日志文件,类似于实现Linux中tail -f效果的功能。本来想自己写的,后面搜了一下github上有人已经写好了tail库,功能已经很强大了,只要拿来适当传入传数用用就可以了。

package main

import (
    "fmt"
    "time"

    "github.com/hpcloud/tail"
)

func main() {
    fileName := "./log/frps.log"                         // 被监听的文件,即frp日志文件
    config := tail.Config{
        ReOpen:    true,                                 // 重新打开
        Follow:    true,                                 // 是否跟随
        Location:  &tail.SeekInfo{Offset: 0, Whence: 2}, // 从文件的哪个地方开始读
        MustExist: false,                                // 文件不存在不报错
        Poll:      true,                                 // 监听新行,使用tail -f,这个参数非常重要
    }

    tails, err := tail.TailFile(fileName, config)
    if err != nil {
        fmt.Println("tail file failed, err:", err)
        return
    }

    var  line *tail.Line
    var  ok   bool

    for {
        line, ok = <-tails.Lines
        if !ok {
            fmt.Printf("tail file close reopen, filename:%s\n", tails.Filename)
            time.Sleep(time.Second)
            continue
        }

        fmt.Println(line.Text)
    }
}

以上程序执行就想当于tail -f ./log/frps.log。每次新增每行的数据都在line.Text中的,之后就可以用这个日志数据来分析判定哪些IP是攻击者,加到防火墙中去了。

0%