MCPcopy
hub / github.com/txthinking/brook / Socks5Test

Function Socks5Test

socks5test.go:26–99  ·  view source on GitHub ↗
(s, u, p, domain, a, ds string)

Source from the content-addressed store, hash-verified

24)
25
26func Socks5Test(s, u, p, domain, a, ds string) error {
27 s5c, err := socks5.NewClient(s, u, p, 0, 60)
28 if err != nil {
29 return err
30 }
31
32 fmt.Println("Testing TCP: query " + domain + " A on " + ds)
33 c := &dns.Client{Net: "tcp"}
34 tc, err := s5c.Dial("tcp", ds)
35 if err != nil {
36 return err
37 }
38 defer tc.Close()
39 m := &dns.Msg{}
40 m.RecursionDesired = true
41 m.SetQuestion(domain+".", dns.TypeA)
42 m, _, err = c.ExchangeWithConn(m, &dns.Conn{Conn: tc})
43 if err != nil {
44 return err
45 }
46 if len(m.Answer) == 0 {
47 return errors.New("no answer")
48 }
49 v, ok := m.Answer[0].(*dns.A)
50 if !ok {
51 return errors.New("invalid answer")
52 }
53 if v.A.String() != a {
54 fmt.Println("Expect", a, "but got", v.A.String())
55 }
56 if v.A.String() == a {
57 fmt.Println("TCP: OK")
58 }
59
60 fmt.Println("Testing UDP: query " + domain + " A on " + ds)
61 uc, err := s5c.Dial("udp", ds)
62 if err != nil {
63 return err
64 }
65 defer uc.Close()
66 m = &dns.Msg{}
67 m.RecursionDesired = true
68 m.SetQuestion(domain+".", dns.TypeA)
69 b, err := m.Pack()
70 if err != nil {
71 return err
72 }
73 if _, err := uc.Write(b); err != nil {
74 return err
75 }
76 log.Printf("Sent Datagram. %#v\n", b)
77 b = make([]byte, 512)
78 i, err := uc.Read(b)
79 if err != nil {
80 return err
81 }
82 if err := m.Unpack(b[:i]); err != nil {
83 return err

Callers 1

mainFunction · 0.92

Calls 4

DialMethod · 0.80
CloseMethod · 0.45
WriteMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected