Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

paralleltree/ipfilter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

17 Commits

Repository files navigation

ipfilter

ipfilter provides a matcher to filter IP addresses based on a list of CIDR ranges. The matcher is optimized for speed and can handle a large number of ranges efficiently.

Installation

$ go get github.com/paralleltree/ipfilter

Usage

import (
 "fmt"
 "net"
 "github.com/paralleltree/ipfilter"
)
func example() {
 matcher, err := ipfilter.NewIPMatcher([]string{
 "192.168.0.0/24",
 "192.168.1.0/24",
 })
 if err != nil {
 panic(err)
 }
 ips := []string{
 "192.168.0.10",
 "192.168.20.10",
 }
 for _, ip := range ips {
 result := matcher.Match(net.ParseIP(ip))
 fmt.Printf("%s: %v\n", ip, result)
 }
 // Output:
 // 192.168.0.10: true
 // 192.168.20.10: false
}

How it works

The matcher groups the given CIDR ranges by their prefix(subnet mask) length. When matching an IP address, it tries to find the corresponding range from each group using a binary search.

flowchart LR
 root(IPMatcher)
 ipv4set[IPv4RangeSet]
 ipv6set[IPv6RangeSet]
 ipv4PrefixLength16[prefixLength=16]
 ipv4PrefixLength24[prefixLength=24]
 ipv6PrefixLength64[prefixLength=64]
 ipv4PrefixLength24Range1([192.168.0.0/24])
 ipv4PrefixLength24Range2([192.168.1.0/24])
 ipv6PrefixLength16Range1([172.16.0.0/16])
 ipv6PrefixLength64Range1([2001:db8::/64])
 ipv6PrefixLength64Range2([78ab:920::/64])
 root --- ipv4set
 root --- ipv6set
 ipv4set --- ipv4PrefixLength16
 ipv4set --- ipv4PrefixLength24
 ipv4PrefixLength16 --- ipv6PrefixLength16Range1
 ipv4PrefixLength24 --- ipv4PrefixLength24Range1
 ipv4PrefixLength24 --- ipv4PrefixLength24Range2
 ipv6set --- ipv6PrefixLength64
 ipv6PrefixLength64 --- ipv6PrefixLength64Range1
 ipv6PrefixLength64 --- ipv6PrefixLength64Range2
Loading

About

Fast IP address matcher written in Go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /