Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go/GoLang反向二进制数据查找广播地址_Go - Fatal编程技术网

Go/GoLang反向二进制数据查找广播地址

Go/GoLang反向二进制数据查找广播地址,go,Go,我尝试将golang中的二进制文件反转,从输入数据中查找广播ip地址 10000010.00101101.00100000.00000000 (network adress) OR 00000000.00000000.00001111.11111111 (inverted subnet mask) = 10000010.00101101.00101111.11111111 = 130.45.47.255 (broadcast address) 假设用户输入 network addres

我尝试将golang中的二进制文件反转,从输入数据中查找广播ip地址

10000010.00101101.00100000.00000000   (network adress)
OR
00000000.00000000.00001111.11111111   (inverted subnet mask)
=
10000010.00101101.00101111.11111111 = 130.45.47.255 (broadcast address)
假设用户输入

network address 130.45.32.0
subnetmask      255.255.240.0    11111111.11111111.11110000.00000000
// expect invert subnetmask      00000000.00000000.00001111.11111111
所以如果我现在从用户输入中得到子网掩码,我需要反转它

// subIp from https://golang.org/pkg/net/#IP.Mask
subIp:=subnetmask.Mask(network.Mask)
//                  255.      255.      240.       0
// then I loop to subIp[0], subIp[1], subIp[2], subIp[3]    
// I Assume subIp[3] = 0
subnet := int64(subIp[3])
subnetString := strconv.FormatInt(subnet, 2)

// add 0 before number
subnetString = leftPad2Len(subnetString, "0", 8)

// loop to string and invert it
invertSubnetString := ""
for i := 0; i<8; i++ {
    if subnetString[i] == 48 {
        invertSubnetString += "1"
    } else {
        invertSubnetString += "0"
    }
}

// now I got invert data. So I can find broadcast number
// convert it to int
invertSubnet, _ := strconv.ParseInt(invertSubnetString, 2, 64)

// then OR
fmt.Println(networkIp | invertSubnet)
//来自的子IPhttps://golang.org/pkg/net/#IP.Mask
子IP:=子网掩码.Mask(network.Mask)
//                  255.      2552400
//然后我循环到subIp[0],subIp[1],subIp[2],subIp[3]
//我假设subIp[3]=0
子网:=int64(子IP[3])
子网字符串:=strconv.formatt(子网,2)
//在数字前加0
subnetString=leftPad2Len(subnetString,“0”,8)
//循环到字符串并反转它
invertSubnetString:=“”

对于i:=0;i您可以直接操作地址的字节,而无需转换为字符串:


您可以直接操作地址的字节,而无需转换为字符串:

mask := net.CIDRMask(20, 32)
ip := net.IP([]byte{140, 45, 32, 0})

broadcast := net.IP(make([]byte, 4))
for i := range ip {
    broadcast[i] = ip[i] | ^mask[i]
}

fmt.Println(broadcast)