int2ip

24 阅读1分钟
func ip2int(ip string) int {
   segs := strings.Split(ip, ".")
   res := 0

   for i, v := range segs {
      vint, _ := strconv.Atoi(v)
      res += vint << (8 * (3 - i))
   }

   return res
}
func int2ip(num int64) string {
    ans := []string{}

    for i := 0; i < 4; i++ {

       tmp := (num & (255 << (8 * (3 - i)))) >> (8 * (3 - i))

       ans = append(ans, strconv.Itoa(int(tmp)))
    }
    return strings.Join(ans, ".")
}
// todo 必须处理err
func getIpData(data string) string {
    arr := strings.Split(data, " ")

    totalLen, _ := strconv.ParseInt(arr[2]+arr[3], 16, 64)
    flag, _ := strconv.ParseInt(arr[6], 16, 64)

    flag = (flag & (7 << 5)) >> 5

    ipstr := ""
    for _, v := range arr[16:] {
       ipstr += v
    }
    ip, _ := strconv.ParseInt(ipstr, 16, 64)
    ipstr = int2ip(ip)

    return strconv.Itoa(int(totalLen)) + "," + strconv.Itoa(int(flag)) + "," + ipstr
}