tools.go_stun
2:6455d3067db1
Go to Latest
tools.go_stun/main.go
+ Добавил разрешение имён. Просто так
14 LOG_IDENT string = "net-a0fs-gostun"
17 func getPort() (res string, err error) {
19 err = errors.New("No port specify")
21 res = fmt.Sprintf(":%s", os.Args[1])
26 func fail(code int, msg string) {
27 usage := "Usage: cmd port"
28 usage += "\n port: port number for listening clients"
30 fmt.Fprintln(os.Stderr, msg)
31 fmt.Fprintln(os.Stderr, usage)
36 func handler(conn net.Conn) {
37 log, err := syslog.New(syslog.LOG_USER, LOG_IDENT)
43 remoteAddr := conn.RemoteAddr().String()
47 _s_tmd := time.Now().Sub(_s_tm)
48 if r_err := recover(); r_err != nil {
49 err = log.Err(fmt.Sprintf("Error on service for %s (service time: %v): %v", remoteAddr, _s_tmd, r_err))
56 err = log.Err(fmt.Sprintf("Error on closing socket when service %s (service time: %v): %v",
57 remoteAddr, _s_tmd, err))
63 _ = log.Info(fmt.Sprintf("Ok service %s in %v", remoteAddr, _s_tmd))
68 addr_spit := strings.Split(remoteAddr, ":")
69 addr_last := len(addr_spit) - 1
70 addr := strings.Join(addr_spit[:addr_last], ":")
73 dns_names, err := net.LookupAddr(strings.Trim(addr, "[] "))
75 log.Warning(fmt.Sprintf("Fail to resolve dns name for %s: %v", remoteAddr, err))
77 for _, dns_name := range dns_names {
78 dns += "Name: " + dns_name + "\n"
81 addr = "IP: " + addr + "\n"
82 port := "Port: " + addr_spit[addr_last] + "\n"
84 if _, err := conn.Write([]byte(addr)); err != nil {
87 if _, err := conn.Write([]byte(dns)); err != nil {
90 if _, err := conn.Write([]byte(port)); err != nil {
96 port, err := getPort()
98 fail(1, fmt.Sprint("Error in parsing port number: ", err))
101 svc, err := net.Listen("tcp", port)
103 fail(2, fmt.Sprint("Fail to open socket: ", err))
107 conn, err := svc.Accept()
109 fail(1, fmt.Sprint("Error accepting connections: ", err))