ipdb

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2024 License: Apache-2.0 Imports: 16 Imported by: 1

README

IPDB (Go version)

IPDB Database API Document

IPIP.net 官方支持的 IP 数据库 ipdb 格式解析库

安装方法

go get github.com/soulteary/ipdb-go

代码示例

package main

import (
	"fmt"
	"log"

	"github.com/soulteary/ipdb-go"
)

func main() {
	// 创建城市数据库实例
	db, err := ipdb.NewCity("/path/to/city.ipv4.ipdb")
	if err != nil {
		log.Fatal(err)
	}
	// 支持热更新,更新 ipdb 文件后调用 Reload 方法
	db.Reload("/path/to/city.ipv4.ipdb")
	// 数据库元信息查询
	fmt.Println(db.IsIPv4())    // 检查是否支持 IPv4
	fmt.Println(db.IsIPv6())    // 检查是否支持 IPv6
	fmt.Println(db.BuildTime()) // 数据库构建时间
	fmt.Println(db.Languages()) // 支持的语言列表
	fmt.Println(db.Fields())    // 支持的字段列表
	// IP 查询示例
	fmt.Println(db.FindInfo("2001:250:200::", "CN")) // 返回 CityInfo 结构体
	fmt.Println(db.Find("1.1.1.1", "CN"))            // 返回字符串数组
	fmt.Println(db.FindMap("118.28.8.8", "CN"))      // 返回字符串映射
	fmt.Println(db.FindInfo("127.0.0.1", "CN"))      // 返回 CityInfo 结构体
}
返回结果字段说明
字段名 说明
country_name 国家名称
region_name 省份名称
city_name 城市名称
owner_domain 所有者
isp_domain 运营商
latitude 纬度
longitude 经度
timezone 时区
utc_offset UTC 时区
china_admin_code 中国行政区划代码
idd_code 国家电话号码前缀
country_code 国家二位代码
continent_code 大洲代码
idc IDC / VPN
base_station 基站 / WIFI
country_code3 国家三位代码
european_union 是否为欧盟成员国(1:是 0:否)
currency_code 当前国家货币代码
currency_name 当前国家货币名称
anycast ANYCAST

支持的查询方法

  • FindInfo(ip, language): 返回结构化的 CityInfo 对象
  • Find(ip, language): 返回字符串数组
  • FindMap(ip, language): 返回字符串映射

注意事项

  1. 支持 IPv4 和 IPv6 地址
  2. 支持多语言查询
  3. 数据库文件支持热更新
  4. 所有查询方法都是线程安全的

许可证

该项目采用 MIT 许可证

Documentation

Index

Constants

View Source
const (
	IPv4 = 0x01
	IPv6 = 0x02
)

Variables

View Source
var (
	ErrInvalidIP = errors.New("无效的IP地址")
	ErrNotFound  = errors.New("未找到IP信息")
)
View Source
var (
	ErrFileSize          = errors.New("IP数据库文件大小错误")
	ErrMetaData          = errors.New("IP数据库元数据错误")
	ErrReadFull          = errors.New("IP数据库读取错误")
	ErrDatabase          = errors.New("数据库错误")
	ErrIPFormat          = errors.New("IP地址格式错误")
	ErrNoSupportLanguage = errors.New("不支持该语言")
	ErrNoSupportIPv4     = errors.New("不支持IPv4")
	ErrNoSupportIPv6     = errors.New("不支持IPv6")
	ErrDataNotExists     = errors.New("数据不存在")
)

Functions

This section is empty.

Types

type ASNInfo

type ASNInfo struct {
	ASN      int    `json:"asn"`
	Registry string `json:"reg"`
	Country  string `json:"cc"`
	Net      string `json:"net"`
	Org      string `json:"org"`
	Type     string `json:"type"`
	Domain   string `json:"domain"`
}

type BaseStation

type BaseStation struct {
	// contains filtered or unexported fields
}

BaseStation 基站数据库结构体

func NewBaseStation

func NewBaseStation(name string) (*BaseStation, error)

NewBaseStation 创建新的基站数据库实例

func (*BaseStation) BatchFind added in v0.1.0

func (db *BaseStation) BatchFind(addrs []string, language string) []BatchResult

func (*BaseStation) BuildTime

func (db *BaseStation) BuildTime() time.Time

BuildTime 返回数据库构建时间

func (*BaseStation) Fields

func (db *BaseStation) Fields() []string

Fields 返回支持的字段列表

func (*BaseStation) Find

func (db *BaseStation) Find(addr, language string) ([]string, error)

Find 查找IP地址对应的基站信息(字符串切片形式)

func (*BaseStation) FindInfo

func (db *BaseStation) FindInfo(addr, language string) (*BaseStationInfo, error)

FindInfo 查找IP地址对应的基站信息(结构体形式)

func (*BaseStation) FindMap

func (db *BaseStation) FindMap(addr, language string) (map[string]string, error)

FindMap 查找IP地址对应的基站信息(Map形式)

func (*BaseStation) IsIPv4

func (db *BaseStation) IsIPv4() bool

IsIPv4 检查是否支持IPv4

func (*BaseStation) IsIPv6

func (db *BaseStation) IsIPv6() bool

IsIPv6 检查是否支持IPv6

func (*BaseStation) Languages

func (db *BaseStation) Languages() []string

Languages 返回支持的语言列表

func (*BaseStation) Reload

func (db *BaseStation) Reload(name string) error

Reload 重新加载数据库文件

type BaseStationInfo

type BaseStationInfo struct {
	CountryName string `json:"country_name"`
	RegionName  string `json:"region_name"`
	CityName    string `json:"city_name"`
	OwnerDomain string `json:"owner_domain"`
	IspDomain   string `json:"isp_domain"`
	BaseStation string `json:"base_station"`
}

BaseStationInfo 存储基站信息的结构体

func (*BaseStationInfo) GetCityName added in v0.1.0

func (b *BaseStationInfo) GetCityName() string

func (*BaseStationInfo) GetCountryName added in v0.1.0

func (b *BaseStationInfo) GetCountryName() string

让 BaseStationInfo 实现 IPInfo 接口

func (*BaseStationInfo) GetRegionName added in v0.1.0

func (b *BaseStationInfo) GetRegionName() string

type BatchResult added in v0.1.0

type BatchResult struct {
	IP    string
	Info  *BaseStationInfo
	Error error
}

type City

type City struct {
	// contains filtered or unexported fields
}

City struct

func NewCity

func NewCity(name string) (*City, error)

NewCity initialize

func NewCityFromBytes

func NewCityFromBytes(bs []byte) (*City, error)

NewCityFromBytes initialize from bytes

func (*City) BuildTime

func (db *City) BuildTime() time.Time

BuildTime return database build Time

func (*City) ClearCache added in v0.1.0

func (db *City) ClearCache()

ClearCache clears the internal cache

func (*City) Fields

func (db *City) Fields() []string

Fields return support fields

func (*City) Find

func (db *City) Find(addr, language string) ([]string, error)

Find query with addr

func (*City) FindInfo

func (db *City) FindInfo(addr, language string) (*CityInfo, error)

FindInfo query with addr

func (*City) FindMap

func (db *City) FindMap(addr, language string) (map[string]string, error)

FindMap query with addr

func (*City) IsIPv4

func (db *City) IsIPv4() bool

IsIPv4 whether support ipv4

func (*City) IsIPv6

func (db *City) IsIPv6() bool

IsIPv6 whether support ipv6

func (*City) Languages

func (db *City) Languages() []string

Languages return support languages

func (*City) Reload

func (db *City) Reload(name string) error

Reload the database

type CityInfo

type CityInfo struct {
	CountryName       string `json:"country_name"`
	RegionName        string `json:"region_name"`
	CityName          string `json:"city_name"`
	DistrictName      string `json:"district_name"`
	OwnerDomain       string `json:"owner_domain"`
	IspDomain         string `json:"isp_domain"`
	Latitude          string `json:"latitude"`
	Longitude         string `json:"longitude"`
	Timezone          string `json:"timezone"`
	UtcOffset         string `json:"utc_offset"`
	ChinaRegionCode   string `json:"china_region_code"`
	ChinaCityCode     string `json:"china_city_code"`
	ChinaDistrictCode string `json:"china_district_code"`
	ChinaAdminCode    string `json:"china_admin_code"`
	IddCode           string `json:"idd_code"`
	CountryCode       string `json:"country_code"`
	ContinentCode     string `json:"continent_code"`
	IDC               string `json:"idc"`
	BaseStation       string `json:"base_station"`
	CountryCode3      string `json:"country_code3"`
	EuropeanUnion     string `json:"european_union"`
	CurrencyCode      string `json:"currency_code"`
	CurrencyName      string `json:"currency_name"`
	Anycast           string `json:"anycast"`

	Line string `json:"line"`

	DistrictInfo DistrictInfo `json:"district_info"`

	Route   string    `json:"route"`
	ASN     string    `json:"asn"`
	ASNInfo []ASNInfo `json:"asn_info"`

	AreaCode string `json:"area_code"`

	UsageType string `json:"usage_type"`
}

CityInfo is City Database Content

type District

type District struct {
	// contains filtered or unexported fields
}

func NewDistrict

func NewDistrict(name string) (*District, error)

func (*District) BuildTime

func (db *District) BuildTime() time.Time

func (*District) ClearCache added in v0.1.0

func (db *District) ClearCache()

ClearCache 清理缓存

func (*District) Fields

func (db *District) Fields() []string

func (*District) Find

func (db *District) Find(addr, language string) ([]string, error)

func (*District) FindInfo

func (db *District) FindInfo(addr, language string) (*DistrictInfo, error)

func (*District) FindMap

func (db *District) FindMap(addr, language string) (map[string]string, error)

func (*District) IsIPv4

func (db *District) IsIPv4() bool

func (*District) IsIPv6

func (db *District) IsIPv6() bool

func (*District) Languages

func (db *District) Languages() []string

func (*District) Reload

func (db *District) Reload(name string) error

type DistrictInfo

type DistrictInfo struct {
	CountryName    string `json:"country_name"`
	RegionName     string `json:"region_name"`
	CityName       string `json:"city_name"`
	DistrictName   string `json:"district_name"`
	ChinaAdminCode string `json:"china_admin_code"`
	CoveringRadius string `json:"covering_radius"`
	Latitude       string `json:"latitude"`
	Longitude      string `json:"longitude"`
}

type Download added in v0.1.0

type Download struct {
	URL      *url.URL
	Progress float64
	// contains filtered or unexported fields
}

Download 结构体用于处理文件下载

func NewDownload added in v0.1.0

func NewDownload(httpUrl string) (*Download, error)

NewDownload 创建新的下载实例

func (*Download) SaveToFile added in v0.1.0

func (dl *Download) SaveToFile(fn string, progress ProgressFunc) error

SaveToFile 将URL指向的文件下载到指定路径

type IDC added in v0.1.0

type IDC struct {
	// contains filtered or unexported fields
}

func NewIDC added in v0.1.0

func NewIDC(name string) (*IDC, error)

func (*IDC) BuildTime added in v0.1.0

func (db *IDC) BuildTime() time.Time

func (*IDC) ClearCache added in v0.1.0

func (db *IDC) ClearCache()

func (*IDC) Fields added in v0.1.0

func (db *IDC) Fields() []string

func (*IDC) Find added in v0.1.0

func (db *IDC) Find(addr, language string) ([]string, error)

func (*IDC) FindInfo added in v0.1.0

func (db *IDC) FindInfo(addr, language string) (*IDCInfo, error)

func (*IDC) FindMap added in v0.1.0

func (db *IDC) FindMap(addr, language string) (map[string]string, error)

func (*IDC) IsIPv4 added in v0.1.0

func (db *IDC) IsIPv4() bool

func (*IDC) IsIPv6 added in v0.1.0

func (db *IDC) IsIPv6() bool

func (*IDC) Languages added in v0.1.0

func (db *IDC) Languages() []string

func (*IDC) Reload added in v0.1.0

func (db *IDC) Reload(name string) error

type IDCInfo added in v0.1.0

type IDCInfo struct {
	CountryName string `json:"country_name"`
	RegionName  string `json:"region_name"`
	CityName    string `json:"city_name"`
	OwnerDomain string `json:"owner_domain"`
	IspDomain   string `json:"isp_domain"`
	IDC         string `json:"idc"`
}

type IPInfo added in v0.1.0

type IPInfo interface {
	GetCountryName() string
	GetRegionName() string
	GetCityName() string
}

IPInfo 定义通用IP信息接口

type MetaData

type MetaData struct {
	Build     int64          `json:"build"`
	IPVersion uint16         `json:"ip_version"`
	Languages map[string]int `json:"languages"`
	NodeCount int            `json:"node_count"`
	TotalSize int            `json:"total_size"`
	Fields    []string       `json:"fields"`
}

type ProgressFunc added in v0.1.0

type ProgressFunc func(current, total int64)

Progress 用于跟踪下载进度的回调函数类型

type Risk added in v0.1.0

type Risk struct {
	// contains filtered or unexported fields
}

Risk 风险数据库结构

func NewRisk added in v0.1.0

func NewRisk(filename string) (*Risk, error)

NewRisk 创建新的风险数据库实例

func (*Risk) ClearCache added in v0.1.0

func (r *Risk) ClearCache()

ClearCache 清理缓存

func (*Risk) FindInfo added in v0.1.0

func (r *Risk) FindInfo(addr string) (*RiskInfo, error)

FindInfo 查询IP地址的风险信息

func (*Risk) IsIPv4 added in v0.1.0

func (r *Risk) IsIPv4() bool

IsIPv4 检查是否支持IPv4

func (*Risk) IsIPv6 added in v0.1.0

func (r *Risk) IsIPv6() bool

IsIPv6 检查是否支持IPv6

func (*Risk) Reload added in v0.1.0

func (r *Risk) Reload(filename string) error

Reload 重新加载数据库

type RiskInfo added in v0.1.0

type RiskInfo struct {
	Score       int    `json:"score"`        // 风险分数
	Behavior    string `json:"behavior"`     // 行为类型
	CountryCode string `json:"country_code"` // 国家代码
}

RiskInfo 存储IP风险信息

type WriteCounter added in v0.1.0

type WriteCounter struct {
	Current  int64
	Total    int64
	Progress ProgressFunc
}

WriteCounter 用于跟踪写入进度

func (*WriteCounter) Write added in v0.1.0

func (wc *WriteCounter) Write(p []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL