aboutsummaryrefslogtreecommitdiff
path: root/main.go
blob: c43fb0b8f9289e67861eefb28d7389c0e8355af9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package main

import (
	"flag"
	"fmt"
	"os"
	"regexp"

	"snix.ir/nanontp/engine"
	"snix.ir/nanontp/getter"
	"snix.ir/nanontp/network"
)

const regIPPORT string = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$"
const regDomainIPport string = "^(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|((\\*\\.)?([a-zA-Z0-9-]+\\.){0,5}[a-zA-Z0-9-][a-zA-Z0-9-]+\\.[a-zA-Z]{2,63}?)):([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$"

func main() {
	flag.Usage = usage
	ipup := flag.String("net", "0.0.0.0:123", "udp network to listen on <ipv4:port>")
	flag.Parse()
	if match, _ := regexp.MatchString(regIPPORT, *ipup); !match {
		fmt.Printf("fatal: %v is not a valid <ipv4:port> address\n", *ipup)
		flag.Usage()
		os.Exit(2)
	}
	getter.ArgNTP = flag.Args()

	if len(getter.ArgNTP) == 0 {
		fmt.Println("fatal: you must give me a upstream ntp server <ipv4-or-domain:port>")
		flag.Usage()
		os.Exit(2)

	}
	for _, x := range getter.ArgNTP {
		if match, _ := regexp.MatchString(regDomainIPport, x); !match {
			fmt.Printf("fatal: %v is not a valid ntp upstream address\n", x)
			flag.Usage()
			os.Exit(2)
		}
	}

	var handler = network.GetHandler()
	engine.Reactor.ListenUdp(*ipup, handler)
	engine.Reactor.Run()
}

func usage() {
	fmt.Printf(`usage of snix ntp server:
%v -net [ipv4:port] ntp-domain.com:port ntp-domain.org:port ...

options:
  --net string     udp network to listen on <ipv4:port> (default "0.0.0.0:123")
  --h              print this banner and exit
example: 
  %v --net 0.0.0.0:123 time.google.com:123 ntp.day.ir:123 10.10.10.10:123 

Copyright (c) 2020 slc.snix.ir, All rights reserved.
Developed BY a.esmaeilpour@irisaco.com And s.ghaderi1999@gmail.com
This work is licensed under the terms of the MIT license.
`, os.Args[0], os.Args[0])
}

Snix LLC Git Repository Holder Copyright(C) 2022 All Rights Reserved Email To Snix.IR