Merge pull request #61 from rufoa/master

Use big.Int for decimal IPs rather than uint64
This commit is contained in:
Martin Polden 2018-08-20 17:38:43 +02:00 committed by GitHub
commit 3048066a9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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)
}
}