1
0
mirror of https://github.com/zu1k/nali.git synced 2025-01-23 21:59:02 +08:00
nali/internal/app/parse.go

59 lines
1.2 KiB
Go
Raw Normal View History

2020-07-17 09:05:25 +08:00
package app
import (
"fmt"
2020-07-17 09:41:09 +08:00
"path/filepath"
2020-07-17 10:52:36 +08:00
"strings"
2020-07-17 09:41:09 +08:00
"github.com/zu1k/nali/constant"
2020-07-17 09:05:25 +08:00
"github.com/zu1k/nali/internal/ipdb"
2020-07-17 13:49:11 +08:00
"github.com/zu1k/nali/internal/iptools"
2020-07-17 09:05:25 +08:00
geoip2 "github.com/zu1k/nali/pkg/geoip"
"github.com/zu1k/nali/pkg/qqwry"
)
var (
db ipdb.IPDB
qqip qqwry.QQwry
geoip geoip2.GeoIP
)
2020-07-17 09:50:06 +08:00
// init ip db content
2020-07-17 11:37:03 +08:00
func InitIPDB(ipdbtype ipdb.IPDBType) {
switch ipdbtype {
2020-07-17 09:05:25 +08:00
case ipdb.GEOIP2:
2020-07-17 11:37:03 +08:00
db = geoip2.NewGeoIP(filepath.Join(constant.HomePath, "GeoLite2-City.mmdb"))
2020-07-17 09:05:25 +08:00
case ipdb.QQIP:
2020-07-17 11:37:03 +08:00
db = qqwry.NewQQwry(filepath.Join(constant.HomePath, "qqwry.dat"))
2020-07-17 09:05:25 +08:00
}
}
2020-07-17 09:50:06 +08:00
// parse several ips
2020-07-17 09:05:25 +08:00
func ParseIPs(ips []string) {
for _, ip := range ips {
2020-07-17 10:52:36 +08:00
if iptools.ValidIP4(ip) {
result := db.Find(ip)
fmt.Println(formatResult(ip, result))
} else {
fmt.Println(ReplaceInString(ip))
}
2020-07-17 09:05:25 +08:00
}
}
2020-07-17 10:52:36 +08:00
func ReplaceInString(str string) (result string) {
result = str
ips := iptools.GetIP4FromString(str)
for _, ip := range ips {
info := db.Find(ip)
result = strings.ReplaceAll(result, ip, formatResult(ip, info))
}
return
2020-07-17 09:05:25 +08:00
}
func formatResult(ip string, result string) string {
if result == "" {
result = "未找到"
}
return fmt.Sprintf("%s [%s]", ip, result)
}