From 93ba5e96fa406e0403b913cc291d21946f9e41c1 Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Fri, 4 Oct 2019 12:30:10 -0700 Subject: [PATCH 1/6] spliteAddr: support IPv6 When given an IPv4 address, the string spliteAddr receives looks like: 1.2.3.4:123 Splitting on ":" is fine, because the IP address contains only integers and "." chars. When given an IPv6 address, the string spliteAddr receives looks like: [2001:0db8:85a3:0000:0000:8a2e:0370:7334]:123 The existing implementation fails on such a string. Colons are used within IPv6 addresses. My patch splits on the last ":" character, which works for both IPv4 and IPv6 addresses. --- netapp/sntp.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/netapp/sntp.go b/netapp/sntp.go index cf9a826..4b38600 100644 --- a/netapp/sntp.go +++ b/netapp/sntp.go @@ -37,8 +37,10 @@ func (p *Handler) DatagramReceived(data []byte, addr net.Addr) { } func spliteAddr(addr string) (string, int) { - ip := strings.Split(addr, ":")[0] - port := strings.Split(addr, ":")[1] + delimiterIdx := strings.LastIndex(addr, ":") + ip := addr[0:delimiterIdx] + port := addr[delimiterIdx+1:] + p, _ := strconv.Atoi(port) return ip, p } From 65a0d41f59deddf1bf6542a07b4cb3ad9c9c183b Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Fri, 4 Oct 2019 14:08:55 -0700 Subject: [PATCH 2/6] Find/replace imports to reference my fork --- README.md | 2 +- main.go | 4 ++-- netapp/sntp.go | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7bf6bcd..2e16d19 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Please reference [Go install](https://github.com/astaxie/build-web-application- ##### 2. install Sntp - $ go get github.com/btfak/sntp + $ go get github.com/briantobin/sntp ##### More? [My Blog](http://www.btfak.com) diff --git a/main.go b/main.go index abedb95..f2b35f7 100644 --- a/main.go +++ b/main.go @@ -6,8 +6,8 @@ package main import ( - "github.com/btfak/sntp/netapp" - "github.com/btfak/sntp/netevent" + "github.com/briantobin/sntp/netapp" + "github.com/briantobin/sntp/netevent" ) func main() { diff --git a/netapp/sntp.go b/netapp/sntp.go index 4b38600..a56c876 100644 --- a/netapp/sntp.go +++ b/netapp/sntp.go @@ -6,8 +6,8 @@ package netapp import ( - "github.com/btfak/sntp/netevent" - "github.com/btfak/sntp/sntp" + "github.com/briantobin/sntp/netevent" + "github.com/briantobin/sntp/sntp" "net" "strconv" "strings" From 2101daf7bad201cdde9cb79436a9e6e245fbebf6 Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Fri, 4 Oct 2019 14:26:45 -0700 Subject: [PATCH 3/6] Run on non-standard port (6123) --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index f2b35f7..ecf3301 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,6 @@ import ( func main() { var handler = netapp.GetHandler() - netevent.Reactor.ListenUdp(123, handler) + netevent.Reactor.ListenUdp(6123, handler) netevent.Reactor.Run() } From c639dcccbbcb3678dbaa6ba9e883f66299e050e8 Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Fri, 4 Oct 2019 14:27:37 -0700 Subject: [PATCH 4/6] Run server 10 years in the past --- sntp/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sntp/server.go b/sntp/server.go index 7d5fbac..3201b71 100644 --- a/sntp/server.go +++ b/sntp/server.go @@ -94,7 +94,7 @@ func int2bytes(i int64) []byte { Transmit Timestamp (see text) time of day */ func generate(req []byte) []byte { - var second = unix2ntp(time.Now().Unix()) + var second = unix2ntp(time.Now().Unix() - 60*60*24*365*10) var fraction = unix2ntp(int64(time.Now().Nanosecond())) var res = make([]byte, 48) var vn = req[0] & 0x38 From 9df22493258a5f69e1aca4fe7ed4695a069f0d66 Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Tue, 29 Oct 2019 18:00:58 -0700 Subject: [PATCH 5/6] Specify a port as cmdline arg. Default is port 123. --- main.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index ecf3301..e80487c 100644 --- a/main.go +++ b/main.go @@ -6,12 +6,16 @@ package main import ( + "flag" "github.com/briantobin/sntp/netapp" "github.com/briantobin/sntp/netevent" ) func main() { + var port = flag.Int("p", 123, "NTP port") + flag.Parse() + var handler = netapp.GetHandler() - netevent.Reactor.ListenUdp(6123, handler) + netevent.Reactor.ListenUdp(*port, handler) netevent.Reactor.Run() } From 5ebdb7c9a147535bdde7c6aa562b7c2c23659cb5 Mon Sep 17 00:00:00 2001 From: Brian Tobin Date: Tue, 29 Oct 2019 18:10:49 -0700 Subject: [PATCH 6/6] Specify a positive or negative day offset relative to current time --- main.go | 4 ++++ sntp/server.go | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index e80487c..65f541d 100644 --- a/main.go +++ b/main.go @@ -9,12 +9,16 @@ import ( "flag" "github.com/briantobin/sntp/netapp" "github.com/briantobin/sntp/netevent" + "github.com/briantobin/sntp/sntp" ) func main() { var port = flag.Int("p", 123, "NTP port") + var offset_days = flag.Int("o", 0, "Time offset (in days)") flag.Parse() + sntp.Offset_days = int64(*offset_days) + var handler = netapp.GetHandler() netevent.Reactor.ListenUdp(*port, handler) netevent.Reactor.Run() diff --git a/sntp/server.go b/sntp/server.go index 3201b71..b4c4d91 100644 --- a/sntp/server.go +++ b/sntp/server.go @@ -75,6 +75,8 @@ func int2bytes(i int64) []byte { return b } +var Offset_days int64 = 0 + // generate /* Field Name Request Reply @@ -94,7 +96,7 @@ func int2bytes(i int64) []byte { Transmit Timestamp (see text) time of day */ func generate(req []byte) []byte { - var second = unix2ntp(time.Now().Unix() - 60*60*24*365*10) + var second = unix2ntp(time.Now().Unix() + (60 * 60 * 24 * Offset_days)) var fraction = unix2ntp(int64(time.Now().Nanosecond())) var res = make([]byte, 48) var vn = req[0] & 0x38