# ip **Repository Path**: liumou_site/ip ## Basic Information - **Project Name**: ip - **Description**: 基于Go语言封装的IP数据基础操作库 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-12 - **Last Updated**: 2025-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IP工具库 📡 [![Go Version](https://img.shields.io/badge/Go-1.22+-blue.svg)](https://golang.org/) [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-v1.0.9-orange.svg)](version.go) 一个功能强大的Go语言IP地址操作库,提供IP地址解析、范围生成、排序、比较等基础操作功能。 ## 🌟 功能特性 - ✅ **IP地址解析** - 支持IPv4/IPv6地址解析和验证 - ✅ **IP范围生成** - 根据CIDR或起止IP生成IP地址列表 - ✅ **IP地址比较** - 支持IP地址大小比较 - ✅ **IP地址排序** - 对IP地址列表进行排序 - ✅ **子网操作** - 提取子网、计算广播地址等 - ✅ **索引生成** - 基于索引列表生成IP地址 - ✅ **本地IP获取** - 获取本地内网IP地址 - ✅ **文本提取** - 从文本中提取IP地址 - ✅ **跨平台支持** - 支持Windows、Linux、macOS ## 📦 安装 ```bash go get -u gitee.com/liumou_site/ip ``` ## 🚀 快速开始 ### 1. IP地址解析与验证 ```go package main import ( "fmt" "gitee.com/liumou_site/ip" ) func main() { // 解析IP地址 parsedIP, version := ip.Parse("192.168.1.1") if parsedIP != nil { fmt.Printf("IP地址: %s, 版本: IPv%d\n", parsedIP, version) } // 从文本中提取IP地址 err, ips := ip.StrGetAddr(`服务器IP: 192.168.1.100, 网关: 10.0.0.1`) if err == nil { fmt.Printf("提取到的IP: %v\n", ips) } } ``` ### 2. IP范围生成 ```go // 根据CIDR生成IP地址列表 _, ipList, err := ip.RangeDetailedList("192.168.1.0/24") if err != nil { fmt.Printf("错误: %v\n", err) return } fmt.Printf("生成的IP地址数量: %d\n", len(ipList)) // 获取CIDR范围的起止IP startIP, endIP, err := ip.RangeCidr("10.1.0.0/21") if err == nil { fmt.Printf("范围: %s - %s\n", startIP, endIP) } ``` ### 3. IP地址比较与排序 ```go // IP地址比较 result := ip.Compare(net.ParseIP("192.168.1.100"), net.ParseIP("192.168.1.50")) if result { fmt.Println("192.168.1.100 > 192.168.1.50") } // IP地址排序 ipStrings := []string{"10.0.8.249", "10.1.18.250", "10.1.8.251"} sortedIPs, err := ip.Sort(ip.StrListToIpList(ipStrings)) if err == nil { fmt.Printf("排序结果: %v\n", sortedIPs) } ``` ### 4. 基于索引生成IP地址 ```go baseIP := net.ParseIP("192.168.1.0") // 根据索引列表生成IP indexList := []int{1, 10, 100, 200} generatedIPs, err := ip.GenerateIndex(baseIP, indexList) if err == nil { fmt.Printf("生成的IP: %v\n", generatedIPs) } // 生成特定模式的IP(最后一位为指定数字) patternIPs, err := ip.GenerateIndexEnd(baseIP, 1, 5, 8) if err == nil { for _, ip := range patternIPs { fmt.Println(ip) } } ``` ### 5. 本地IP操作 ```go // 获取本地内网IP地址 success, localIPs := ip.GetIntranetAddressList() if success { fmt.Printf("本地IP地址: %v\n", localIPs) } // 获取本地外网IP地址(通过DNS服务器) localIP, err := ip.GetUseIP() if err == nil { fmt.Printf("本地外网IP: %s\n", localIP) } ``` ### 6. 子网操作 ```go ipAddr := net.ParseIP("192.168.1.100") // 提取子网(前三段) subnet := ip.CutSubnet(ipAddr) fmt.Printf("子网: %s\n", subnet) // 输出: 192.168.1 // 提取IP最后一段 endID, err := ip.CutEndId(ipAddr) if err == nil { fmt.Printf("IP最后一段: %d\n", endID) // 输出: 100 } ``` ## 📋 API参考 ### 主要函数 | 函数名 | 描述 | |--------|------| | `Parse(s string)` | 解析IP地址字符串,返回IP对象和版本 | | `RangeCidr(cidr string)` | 根据CIDR获取起止IP地址 | | `RangeDetailedList(cidr string)` | 根据CIDR生成详细的IP地址列表 | | `Compare(max, mini net.IP)` | 比较两个IP地址的大小 | | `Sort(ip []net.IP)` | 对IP地址列表进行排序 | | `GenerateIndex(ip net.IP, indices []int)` | 基于索引列表生成IP地址 | | `GenerateIndexEnd(ip net.IP, start, stop, end int)` | 生成特定模式的IP地址 | | `GetIntranetAddressList()` | 获取本地内网IP地址列表 | | `GetUseIP()` | 获取本地外网IP地址 | | `StrGetAddr(text string)` | 从文本中提取IP地址 | | `CutSubnet(ip net.IP)` | 提取IP地址的子网部分 | | `CutEndId(ip net.IP)` | 提取IP地址的最后一段 | ### 工具函数 | 函数名 | 描述 | |--------|------| | `SliceToString(ls []string, sep string)` | 字符串列表转字符串 | | `StrListToIpList(ips []string)` | 字符串列表转IP地址列表 | | `CompareIP(ip1, ip2 net.IP)` | 比较两个IPv4地址 | ## 🧪 运行测试 ```bash # 运行所有测试 go test # 运行指定测试 go test -run TestRangeCidr # 带详细输出运行测试 go test -v ``` ## 📄 示例项目 以下是一个完整的使用示例: ```go package main import ( "fmt" "gitee.com/liumou_site/ip" "net" ) func main() { // 1. 生成CIDR范围内的所有IP fmt.Println("=== IP范围生成 ===") _, ips, err := ip.RangeDetailedList("192.168.1.0/28") if err != nil { fmt.Printf("错误: %v\n", err) return } fmt.Printf("IP数量: %d\n", len(ips)) fmt.Printf("前几个IP: %v\n", ips[:5]) // 2. IP地址比较 fmt.Println("\n=== IP地址比较 ===") if ip.Compare(net.ParseIP("10.0.0.100"), net.ParseIP("10.0.0.50")) { fmt.Println("10.0.0.100 > 10.0.0.50") } // 3. 基于索引生成IP fmt.Println("\n=== 索引生成IP ===") baseIP := net.ParseIP("172.16.0.0") indices := []int{1, 5, 10, 50, 100, 200} resultIPs, err := ip.GenerateIndex(baseIP, indices) if err == nil { fmt.Printf("生成的IP: %v\n", resultIPs) } // 4. 获取本地IP信息 fmt.Println("\n=== 本地IP信息 ===") success, localIPs := ip.GetIntranetAddressList() if success && len(localIPs) > 0 { fmt.Printf("本地IP地址: %v\n", localIPs) } } ``` ## 🤝 贡献 欢迎提交Issue和Pull Request来改进这个项目! ## 📄 许可证 本项目基于 [Apache License 2.0](LICENSE) 许可证开源。 ## 📞 联系方式 - 项目地址: [gitee.com/liumou_site/ip](https://gitee.com/liumou_site/ip) - 作者: liumou_site ## 📝 更新日志 ### v1.0.9 (当前版本) - 优化IP地址生成算法 - 增强错误处理机制 - 完善单元测试覆盖 --- 如果这个库对你有帮助,请给它一个⭐!