ip

package module
v1.0.10 Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2024 License: Apache-2.0 Imports: 7 Imported by: 0

README

ip

介绍

基于Go语言封装的IP数据基础操作库

安装教程

go get -u gitee.com/liumou_site/ip

模板

IP对比
package main

import (
	"fmt"
	"gitee.com/liumou_site/ip"
	"gitee.com/liumou_site/logger"
	"net"
)

// main函数是程序的入口点。
func main() {
	// 使用RangeDetailedList函数获取IP地址范围的详细列表。
	// 这里使用了一个CIDR表示的IP地址范围:192.168.1.11/24。
	_, ips, err := ip.RangeDetailedList("192.168.1.11/24")
	if err != nil {
		// 如果发生错误,记录错误信息并返回。
		logger.Error(err)
		return
	}
	// 打印获取到的IP地址列表。
	fmt.Println(ips)

	// 比较两个IP地址的大小。
	// 这里比较的是192.168.1.11和192.168.1.112。
	if ip.Compare(net.ParseIP("192.168.1.11"), net.ParseIP("192.168.1.112")) {
		// 如果192.168.1.11大于192.168.1.112,则记录相应的信息。
		logger.Info("192.168.1.11 > 192.168.1.112")
	} else {
		// 否则,记录192.168.1.11不大于192.168.1.112的信息。
		logger.Info("192.168.1.11 <= 192.168.1.112")
	}

	// 再次比较两个IP地址的大小。
	// 这次比较的是192.168.3.11和192.168.1.112。
	if ip.Compare(net.ParseIP("192.168.3.11"), net.ParseIP("192.168.1.112")) {
		// 如果192.168.3.11大于192.168.1.112,则记录相应的信息。
		logger.Info("192.168.3.11 > 192.168.1.112")
	} else {
		// 否则,记录192.168.3.11不大于192.168.1.112的信息。
		logger.Info("192.168.3.11 <= 192.168.1.112")
	}
	// GenerateIndex 生成索引列表
	// 参数:
	//   ipAddress: 基础IP地址
	//   indexList: 需要生成索引的列表
	// 返回值:
	//   ([]string): 生成的IP索引列表
	//   (error): 错误信息,如果生成失败
	ipList, err := ip.GenerateIndex(net.ParseIP("192.168.1.11"), []int{1, 2, 9, 123, 255})
	if err != nil {
		logger.Error(err)
		return
	}

	// Sort 对IP列表进行排序
	// 参数:
	//   ipList: IP地址列表
	// 返回值:
	//   ([]string): 排序后的IP地址列表
	//   (error): 错误信息,如果排序失败
	sort, err := ip.Sort(ipList)
	if err != nil {
		logger.Error(err)
		return
	}

	// 输出排序后的IP列表
	fmt.Println(sort)
}

效果

PS C:\Users\ABCD\GolandProjects\awesomeProject2> go run .\main.go
68.1.18 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.23 192.168.1.24 192.168.1.25 192.168.1.26 192.168.1.27 192.168.1.28 192.168.1.29 192.168.1.30 192.168.1.31 192.168.1.32 192.168.1.33 192.168.1.34 192.168.1.35 192.168.1.36 192.168.1.37 192.168.1.38 192.168.1.39 192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43 192.168.1.44 192.168.1.45 192.168.1.46 192.168.1.47 192.168.1.48 192.168.1.49 192.168.1.50 192.168.1.51 192.168.1.52 192.168.1.53 192.168.1.54 192.168.1.55 192.168.1.56 192.168.1.57 192.168.1.58 192.168.1.59 192.168.1.60 192.168.1.61 192.168.1.62 192.168.1.63 192.168.1.64 192.168.1.65 192.168.1.66 192.168.1.67 192.168.1.68 192.168.1.69 192.168.1.70 192.168.1.71 192.168.1.72 192.168.1.73 192.168.1.74 192.168.1.75 192.168.1.76 192.168.1.77 192.168.1.78 192.168.1.79 192.168.1.80 192.168.1.81 192.168.1.82 192.168.1.83 192.168.1.84 192.168.1.85 192.168.1.86 192.168.1.87 192.168.1.88 192.168.1.89 192.168.1.90 192.168.1.91 192.168.1.92 192.168.1.93 192.168.1.94 192.168.1.95 192.168.1.96 192.168.1.97 192.168.1.98 192.168.1.99 192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104 192.168.1.105 192.168.1.106 192.168.1.107 192.168.1.108 192.168.1.109 192.168.1.110 192.168.1.111 192.168.1.112 192.168.1.113 192.168.1.114 192.168.1.115 192.168.1.116 192.168.1.117 192.168.1.118 192.168.1.119 192.168.1.120 192.168.1.121 192.168.1.122 192.168.1.123 192.168.1.124 192.168.1.125 192.168.1.126 192.168.1.127 192.168.1.128 192.168.1.129 192.168.1.130 192.168.1.131 192.168.1.132 192.168.1.133 192.168.1.134 192.168.1.135 192.168.1.136 192.168.1.137 192.168.1.138 192.168.1.139 192.168.1.140 192.168.1.141 192.168.1.142 192.168.1.143 192.168.1.144 192.168.1.145 192.168.1.146 192.168.1.147 192.168.1.148 192.168.1.149 192.168.1.150 192.168.1.151 192.168.1.152 192.168.1.153 192.168.1.154 192.168.1.155 192.168.1.156 192.168.1.157 192.168.1.158 192.168.1.159 192.168.1.160 192.168.1.161 192.168.1.162 192.168.1.163 192.168.1.164 192.168.1.165 192.168.1.166 192.168.1.167 192.168.1.168 192.168.1.169 192.168.1.170 192.168.1.171 192.168.1.172 192.168.1.173 192.168.1.174 192.168.1.175 192.168.1.176 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180 192.168.1.181 192.168.1.182 192.168.1.183 192.168.1.184 192.168.1.185 192.168.1.186 192.168.1.187 192.168.1.188 192.168.1.189 192.168.1.190 192.168.1.191 192.168.1.192 192.168.1.193 192.168.1.194 192.168.1.195 192.168.1.196 192.168.1.197 192.168.1.198 192.168.1.199 192.168.1.200 192.168.1.201 192.168.1.202 192.168.1.203 192.168.1.204 192.168.1.205 192.168.1.206 192.168.1.207 192.168.1.208 192.168.1.209 192.168.1.210 192.168.1.211 192.168.1.212 192.168.1.213 192.168.1.214 192.168.1.215 192.168.1.216 192.168.1.217 192.168.1.218 192.168.1.219 192.168.1.220 192.168.1.221 192.168.1.222 192.168.1.223 192.168.1.224 192.168.1.225 192.168.1.226 192.168.1.227 192.168.1.228 192.168.1.229 192.168.1.230 192.168.1.231 192.168.1.232 192.168.1.233 192.168.1.234 192.168.1.235 192.168.1.236 192.168.1.237 192.168.1.238 192.168.1.239 192.168.1.240 192.168.1.241 192.168.1.242 192.168.1.243 192.168.1.244 192.168.1.245 192.168.1.246 192.168.1.247 192.168.1.248 192.168.1.249 192.168.1.250 192.168.1.251 192.168.1.252 192.168.1.253 192.168.1.254 192.168.1.255]
[2024-11-13 17:41:22] [INFO] [main:30] 192.168.1.11 <= 192.168.1.112
[2024-11-13 17:41:22] [DEBG] [base:134] 192.168.3.11 > 192.168.1.112
[2024-11-13 17:41:22] [INFO] [main:37] 192.168.3.11 > 192.168.1.112
[2024-11-13 17:41:22] [EROR] [main:51] 传入的IP地址非IPV4
PS C:\Users\ABCD\GolandProjects\awesomeProject2> go get -u gitee.com/liumou_site/ip
go: downloading gitee.com/liumou_site/ip v1.0.3
go: upgraded gitee.com/liumou_site/ip v1.0.2 => v1.0.3
PS C:\Users\ABCD\GolandProjects\awesomeProject2> go run .\main.go                  
[2024-11-13 18:01:28] [DEBG] [ip:366] 开始生成IP地址列表...
[2024-11-13 18:01:28] [DEBG] [ip:367] 开始IP:  192.168.1.0 结束IP:  192.168.1.255
[2024-11-13 18:01:28] [DEBG] [ip:386] 开始IP和结束IP的前三段相同,生成IP列表
[2024-11-13 18:01:28] [DEBG] [ip:387] 开始IP:  0 结束IP:  255
[2024-11-13 18:01:28] [DEBG] [ip:119] 生成IP列表...
[192.168.1.0 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5 192.168.1.6 192.168.1.7 192.168.1.8 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14 192.168.1.15 192.168.1.16 192.168.1.17 192.1
68.1.18 192.168.1.19 192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.23 192.168.1.24 192.168.1.25 192.168.1.26 192.168.1.27 192.168.1.28 192.168.1.29 192.168.1.30 192.168.1.31 192.168.1.32 192.168.1.33 192.168.1.34 192.168.1.35 1
92.168.1.36 192.168.1.37 192.168.1.38 192.168.1.39 192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43 192.168.1.44 192.168.1.45 192.168.1.46 192.168.1.47 192.168.1.48 192.168.1.49 192.168.1.50 192.168.1.51 192.168.1.52 192.168.1.
53 192.168.1.54 192.168.1.55 192.168.1.56 192.168.1.57 192.168.1.58 192.168.1.59 192.168.1.60 192.168.1.61 192.168.1.62 192.168.1.63 192.168.1.64 192.168.1.65 192.168.1.66 192.168.1.67 192.168.1.68 192.168.1.69 192.168.1.70 192.16
8.1.71 192.168.1.72 192.168.1.73 192.168.1.74 192.168.1.75 192.168.1.76 192.168.1.77 192.168.1.78 192.168.1.79 192.168.1.80 192.168.1.81 192.168.1.82 192.168.1.83 192.168.1.84 192.168.1.85 192.168.1.86 192.168.1.87 192.168.1.88 19
2.168.1.89 192.168.1.90 192.168.1.91 192.168.1.92 192.168.1.93 192.168.1.94 192.168.1.95 192.168.1.96 192.168.1.97 192.168.1.98 192.168.1.99 192.168.1.100 192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104 192.168.1.105 192.1
68.1.106 192.168.1.107 192.168.1.108 192.168.1.109 192.168.1.110 192.168.1.111 192.168.1.112 192.168.1.113 192.168.1.114 192.168.1.115 192.168.1.116 192.168.1.117 192.168.1.118 192.168.1.119 192.168.1.120 192.168.1.121 192.168.1.1
22 192.168.1.123 192.168.1.124 192.168.1.125 192.168.1.126 192.168.1.127 192.168.1.128 192.168.1.129 192.168.1.130 192.168.1.131 192.168.1.132 192.168.1.133 192.168.1.134 192.168.1.135 192.168.1.136 192.168.1.137 192.168.1.138 192
.168.1.139 192.168.1.140 192.168.1.141 192.168.1.142 192.168.1.143 192.168.1.144 192.168.1.145 192.168.1.146 192.168.1.147 192.168.1.148 192.168.1.149 192.168.1.150 192.168.1.151 192.168.1.152 192.168.1.153 192.168.1.154 192.168.1
.155 192.168.1.156 192.168.1.157 192.168.1.158 192.168.1.159 192.168.1.160 192.168.1.161 192.168.1.162 192.168.1.163 192.168.1.164 192.168.1.165 192.168.1.166 192.168.1.167 192.168.1.168 192.168.1.169 192.168.1.170 192.168.1.171 1
92.168.1.172 192.168.1.173 192.168.1.174 192.168.1.175 192.168.1.176 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180 192.168.1.181 192.168.1.182 192.168.1.183 192.168.1.184 192.168.1.185 192.168.1.186 192.168.1.187 192.168
.1.188 192.168.1.189 192.168.1.190 192.168.1.191 192.168.1.192 192.168.1.193 192.168.1.194 192.168.1.195 192.168.1.196 192.168.1.197 192.168.1.198 192.168.1.199 192.168.1.200 192.168.1.201 192.168.1.202 192.168.1.203 192.168.1.204
 192.168.1.205 192.168.1.206 192.168.1.207 192.168.1.208 192.168.1.209 192.168.1.210 192.168.1.211 192.168.1.212 192.168.1.213 192.168.1.214 192.168.1.215 192.168.1.216 192.168.1.217 192.168.1.218 192.168.1.219 192.168.1.220 192.1
68.1.221 192.168.1.222 192.168.1.223 192.168.1.224 192.168.1.225 192.168.1.226 192.168.1.227 192.168.1.228 192.168.1.229 192.168.1.230 192.168.1.231 192.168.1.232 192.168.1.233 192.168.1.234 192.168.1.235 192.168.1.236 192.168.1.2
37 192.168.1.238 192.168.1.239 192.168.1.240 192.168.1.241 192.168.1.242 192.168.1.243 192.168.1.244 192.168.1.245 192.168.1.246 192.168.1.247 192.168.1.248 192.168.1.249 192.168.1.250 192.168.1.251 192.168.1.252 192.168.1.253 192.168.1.254 192.168.1.255]
[2024-11-13 18:01:28] [INFO] [main:30] 192.168.1.11 <= 192.168.1.112
[2024-11-13 18:01:28] [DEBG] [base:134] 192.168.3.11 > 192.168.1.112
[2024-11-13 18:01:28] [INFO] [main:37] 192.168.3.11 > 192.168.1.112
[192.168.1.1 192.168.1.2 192.168.1.9 192.168.1.123 192.168.1.255]
PS C:\Users\ABCD\GolandProjects\awesomeProject2>    

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Compare

func Compare(max, mini net.IP) bool

Compare 比较两个 net.IP 类型的 IP 地址, 示例:

Compare(net.ParseIP("1.1.1.1"), net.ParseIP("2.2.2.2"))

返回值: 如果 max 大于 mini,则返回 true,否则返回 false。

func CompareIP added in v1.0.1

func CompareIP(ip1, ip2 net.IP) int

CompareIP 比较两个IPv4地址,返回-1, 0, 1分别表示小于、等于、大于。

func CompareS

func CompareS(maxIp, miniIp net.IP, sip uint8) (bool, error)

CompareS 比较两个IP地址的特定字节是否满足条件。 max: 较大的IP地址 mini: 较小的IP地址 sip: 要比较的IP地址的字节层级(1~4),如果上一个层级比较大于mini的字节则直接返回true 返回值: 如果max的字节大于等于mini的字节则返回true,否则返回false。

如果sip不在1~4范围内,则返回错误。

func CutEndId

func CutEndId(ip net.IP) (index int, err error)

CutEndId 提取并返回IPv4地址的最后一部分。 参数 ip 是一个字符串类型的IP地址。 返回值 index 是IP地址的最后一部分转换为整数后的结果。 如果IP地址格式不正确,则返回错误 err。

func CutSubnet

func CutSubnet(ip net.IP) string

CutSubnet 提取IP地址的网段部分。 该函数接收一个net.IP类型的参数ip,表示一个IP地址。 函数返回一个字符串,表示提取出的网段部分。

func GenerateIndex

func GenerateIndex(ip net.IP, ipSlice []int) (IpList []net.IP, err error)

GenerateIndex 根据给定的IP地址和索引列表生成一个IP列表。 该函数接收一个IP地址和一个索引列表,然后根据这些索引生成对应的IP地址列表。 参数:

ip - 基础IP地址,用于生成IP列表。
ipSlice - 包含一系列索引的切片,用于指定生成IP地址的位置。

返回值:

IpList - 生成的IP地址列表。
err - 如果生成过程中发生错误,返回该错误。

func GenerateIndexEnd added in v1.0.4

func GenerateIndexEnd(ip net.IP, start, stop, end int) (ips []net.IP, err error)

GenerateIndexEnd 生成一个IP地址列表,这些IP地址是通过在给定IP地址的子网上添加索引生成的。 该函数接收一个IP地址和三个索引(start, stop, end),并生成一个IP地址列表,这些IP地址的最后一位是根据子网和索引计算得出的。 参数:

ip (net.IP): 基础IP地址 10.1.8.8
start (int): 起始索引 0
stop (int): 终止索引 11
end (int): 结尾数字,与索引组合以生成IP地址 8

返回值:

ips ([]net.IP): 生成的IP地址列表 [10.1.8.8 10.1.8.18 10.1.8.28 10.1.8.38 10.1.8.48 10.1.8.58 10.1.8.68 10.1.8.78 10.1.8.88 10.1.8.98 10.1.8.108 10.1.8.118]
err (error): 错误信息,如果生成过程中遇到任何问题,则返回错误

func GenerateList

func GenerateList(subnet string, start, stop uint8) ([]string, error)

GenerateList 生成指定子网范围内的一系列IP地址 参数:

subnet: IP子网的前缀部分,例如"192.168.1"
start: IP地址的起始范围
stop: IP地址的结束范围

返回值:

[]string: 生成的IP地址列表
error: 如果传入的初始值大于或等于终止值,或者子网格式不正确,则返回错误

func GetIntranetAddressList

func GetIntranetAddressList() (bool, []string)

GetIntranetAddressList 获取局域网IP地址列表 返回值:

  • bool: 表示是否成功获取到IP地址列表,true表示成功,false表示失败
  • []string: 包含局域网IP地址的切片

func GetUseIP

func GetUseIP() (string, error)

GetUseIP 通过指定的DNS服务器获取本地IP地址。 返回本地IP地址的字符串表示,如果获取失败则返回错误。

func Parse

func Parse(s string) (net.IP, int)

Parse 解析给定的字符串s,将其转换为IP地址和相应的版本。 如果字符串s是一个有效的IP地址,函数将返回该IP地址和其版本(4表示IPv4,6表示IPv6)。 如果字符串s不是有效的IP地址格式,函数将返回nil和0。

func RangeCidr

func RangeCidr(cidr string) (net.IP, net.IP, error)

RangeCidr 接受一个CIDR字符串,返回子网的起始IP和结束IP 例如: 10.1.0.0/21

返回值

	10.1.0.0
	10.1.7.255
	nil

func RangeDetailedList

func RangeDetailedList(cidr string) (map[string][]net.IP, []string, error)

RangeDetailedList 根据起始IP和结束IP生成IP地址列表

startIp: 起始IP地址
endIp: 结束IP地址

返回值:

res: 一个映射,键为网段,值为该网段下的IP地址列表
IpList: 所有生成的IP地址的字符串列表
error: 如果发生错误,返回错误信息

func SliceToString

func SliceToString(ls []string, sep string) string

SliceToString 字符串列表转字符串(seq: 拼接符,可以用: 空格 / _ @ 之类,具体请以实际需求设置)

示例: SliceToString([]string{"1", "2", "3"}, "|")

返回

"1|2|3"

func Sort

func Sort(ip []net.IP) (res []net.IP, err error)

Sort 函数接收一个字符串切片并将其转换为排序(升序)的net.IP切片。 它返回排序后的IP地址切片和一个错误,如果输入无效则错误不为nil。 ip: 待排序的IP地址字符串切片。 返回值res: 排序后的net.IP切片。 返回值err: 如果输入无效则返回错误。

func StrGetAddr

func StrGetAddr(text string) (err error, res []net.IP)

StrGetAddr 函数从给定文本中提取所有IPv4地址。 参数

text是待处理的字符串。

返回值

error类型和net.IP切片,错误用于指示是否成功提取IP地址。

func StrListToIpList

func StrListToIpList(ips []string) []net.IP

StrListToIpList 将字符串列表转换为IP地址列表。 它接受一个字符串切片作为输入,每个字符串代表一个IP地址。 对于每个有效的IP地址字符串,它会尝试解析成net.IP类型, 并将解析成功的IP地址添加到结果切片中。 最终返回一个net.IP类型的切片,包含所有解析成功的IP地址。 示例:

StrListToIpList([]string{"192.168.1.1", "192.168.1.2", "192.168.1.3"})

返回

[]net.IP{"192.168.1.1", "192.168.1.2", "192.168.1.3"}

func Version added in v1.0.2

func Version()

Types

This section is empty.

Jump to

Keyboard shortcuts

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