IP Range 是一个用于生成和遍历 IP 地址范围的 Go 语言工具。它支持多种 IP 地址格式,包括 IPv4 和 IPv6,可以方便地生成指定范围内的所有 IP 地址。
- 支持 IPv4 和 IPv6 地址
- 支持多种 IP 地址格式:
- CIDR 格式 (如: 192.168.1.0/24)
- 宽范围格式 (如: 192.168.1.1-192.168.1.10)
- 窄范围格式 (如: 192.168.1-2.1-254)
- 子网掩码格式 (如: 192.168.1.0/255.255.255.0)
- 支持从命令行参数、文件或标准输入读取 IP 地址范围
- 支持逗号分隔的多个 IP 地址范围
确保您已经安装了 Go 语言环境,然后可以通过以下方式构建项目:
go build -o iprange cmd/main.go# 基本用法
./iprange ipStr [ipStr/file] ...
# 示例
./iprange 192.168.1.0/24
./iprange 192.168.1.1-192.168.1.10
./iprange 192.168.1-2.1
./iprange 192.168.1.0/255.255.255.0-
单个 IP 地址:
1.1.1.1 -
CIDR 格式:
1.1.1.1/30 2001::59:63/120 -
范围格式:
1.1.1.1-2 1.1.1-2.0-1 2001::59:63-89 -
子网掩码格式:
192.168.1.0/255.255.255.0
支持通过多个命令行参数、文件或标准输入传递 IP 地址范围:
# 多个参数
./iprange 192.168.1.0/24 10.0.0.1-10.0.0.5
# 文件输入
echo "192.168.1.0/24" > ips.txt
./iprange ips.txt
# 标准输入
echo "192.168.1.0/24" | ./iprange
# 逗号分隔
./iprange 192.168.1.0/24,10.0.0.1-10.0.0.5除了命令行工具,您还可以在 Go 程序中使用该库:
package main
import (
"fmt"
"github.com/v-mars/iprange"
)
func main() {
// 创建 IP 迭代器
it, startIp, err := iprange.NewIter("192.168.1.0/24")
if err != nil {
// 处理错误
fmt.Printf("Error: %v\n", err)
return
}
// 遍历所有 IP
for nit := startIp; it.HasNext(); nit = it.Next() {
fmt.Println(nit)
}
}-
NewIter(ipStr string) (it *Iter, startIp net.IP, err error)- 创建一个新的 IP 迭代器
- 参数: IP 字符串
- 返回: 迭代器、起始 IP 和错误信息
-
it.HasNext() bool- 检查是否还有下一个 IP 地址
-
it.Next() net.IP- 获取下一个 IP 地址
- CIDR 模式 - CIDR 格式的网络地址 (如 192.168.0.1/24)
- 宽范围模式 - 明确的起止 IP 地址 (如 1.1.1.1-1.1.2.3)
- 窄范围模式 - 每个字段中使用范围表示 (如 1.1.1-2.0-1)
- 子网掩码模式 - 使用子网掩码表示的网络 (如 192.168.0.1/255.255.255.0)
# 生成 CIDR 范围内的所有 IP
./iprange 192.168.1.0/30
# 输出:
# 192.168.1.0
# 192.168.1.1
# 192.168.1.2
# 192.168.1.3
# 生成范围格式的所有 IP
./iprange 192.168.1.1-192.168.1.3
# 输出:
# 192.168.1.1
# 192.168.1.2
# 192.168.1.3
# 生成窄范围格式的所有 IP
./iprange 192.168.1-2.1
# 输出:
# 192.168.1.1
# 192.168.2.1