use big int for decimal IP rather than uint64

This commit is contained in:
rufo 2018-08-20 03:03:49 +01:00
parent a9c0587f87
commit 6d915d0f96
3 changed files with 18 additions and 12 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/mpolden/ipd/iputil/geo"
"github.com/mpolden/ipd/useragent"
"math/big"
"net"
"net/http"
"strconv"
@ -30,12 +31,12 @@ type Server struct {
}
type Response struct {
IP net.IP `json:"ip"`
IPDecimal uint64 `json:"ip_decimal"`
Country string `json:"country,omitempty"`
CountryISO string `json:"country_iso,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
IP net.IP `json:"ip"`
IPDecimal *big.Int `json:"ip_decimal"`
Country string `json:"country,omitempty"`
CountryISO string `json:"country_iso,omitempty"`
City string `json:"city,omitempty"`
Hostname string `json:"hostname,omitempty"`
}
type PortResponse struct {

View File

@ -27,12 +27,12 @@ func LookupPort(ip net.IP, port uint64) error {
return nil
}
func ToDecimal(ip net.IP) uint64 {
func ToDecimal(ip net.IP) *big.Int {
i := big.NewInt(0)
if to4 := ip.To4(); to4 != nil {
i.SetBytes(to4)
} else {
i.SetBytes(ip)
}
return i.Uint64()
return i
}

View File

@ -1,21 +1,26 @@
package iputil
import (
"math/big"
"net"
"testing"
)
func TestToDecimal(t *testing.T) {
var msb = new(big.Int)
msb, _ = msb.SetString("80000000000000000000000000000000", 16)
var tests = []struct {
in string
out uint64
out *big.Int
}{
{"127.0.0.1", 2130706433},
{"::1", 1},
{"127.0.0.1", big.NewInt(2130706433)},
{"::1", big.NewInt(1)},
{"8000::", msb},
}
for _, tt := range tests {
i := ToDecimal(net.ParseIP(tt.in))
if tt.out != i {
if tt.out.Cmp(i) != 0 {
t.Errorf("Expected %d, got %d for IP %s", tt.out, i, tt.in)
}
}