每隔一分钟读取一次日志文件,把访问超过 200 次的 IP 统计到的黑名单中 日志文件样式可以为:每行的首个字符串是 ip,与后面字符之间的分割是符号空格 1.2.3.4 xxxx xxx 10.1.2.33 xx xx
参考代码:
import time pin = 0 while True: ips = [] fr = open('assce.log') fr.seek(pin) for line in fr: ip = line.split()[0] ips.append(ip) new_ips = set(ips) for new_ip in new_ips: if ips.count(new_ip) > 200: print('加入黑名单的ip是:%s' % new_ip) pin = fr.tell() time.sleep(60)
package main import ( "bufio" "fmt" "os" "strings" "time" ) func main() { /* 每隔一分钟读取一次日志文件, 把访问超过 200 次的 IP 统计到的黑名单中 日志文件样式可以为:每行的首个字符串是 ip,与后面字符之间的分割是符号空格 1.2.3.4 xxxx xxx 10.1.2.33 xx xx */ lineNumber := 0 for { file, err := os.Open("E:\\04.dev\\go\\learn\\letcode\\a.log") if err != nil { panic(err) } ipCount := make(map[string]int) fileScanner := bufio.NewScanner(file) lineCount := 1 for fileScanner.Scan() { if lineCount > lineNumber { line := strings.Split(fileScanner.Text(), " ") ipCount[line[0]]++ lineNumber++ } lineCount++ } for key, val := range ipCount { if val >= 2 { fmt.Println("加入黑名单的ip是:", key) } } file.Close() time.Sleep(time.Second * 60) } }