Skip to content

Commit 01fbcff

Browse files
committed
begin work on modules, add binaries
1 parent 6a50ebb commit 01fbcff

15 files changed

+131
-69
lines changed

build.sh

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
3+
[ -z "$1" ] && { echo "Usage: build.sh VERSION" >&1; exit 1; }
4+
VERSION="$1"
5+
6+
###############################################
7+
8+
function build()
9+
{
10+
TARGET="$1"
11+
12+
echo "Building dingo v. $VERSION for $TARGET"
13+
GOOS="${TARGET%-*}" GOARCH="${TARGET##*-}" go build \
14+
-o release/dingo-$VERSION/dingo-$TARGET \
15+
./dingo.go ./gdns.go
16+
}
17+
18+
###############################################
19+
20+
rm -fr ./release/dingo-$VERSION
21+
mkdir -p ./release/dingo-$VERSION
22+
23+
for target in \
24+
darwin-386 darwin-amd64 \
25+
freebsd-386 freebsd-amd64 \
26+
linux-386 linux-amd64 \
27+
netbsd-386 netbsd-amd64 \
28+
openbsd-386 openbsd-amd64 \
29+
windows-386 windows-amd64; do
30+
build $target || exit 1
31+
done

dingo.go

Lines changed: 7 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* dingo: a Google DNS over HTTPS caching proxy written in Go
2+
* dingo: a DNS caching proxy written in Go
33
*
44
* Copyright (C) 2016 Pawel Foremski <[email protected]>
55
* Licensed under GNU GPL v3
@@ -15,29 +15,17 @@ import "net"
1515
import "flag"
1616
import "log"
1717
import "github.com/miekg/dns"
18-
import "net/http"
19-
import "net/url"
2018
import "time"
21-
import "io/ioutil"
22-
import "encoding/json"
23-
import "crypto/tls"
24-
import "math/rand"
25-
import "strings"
2619
import "github.com/patrickmn/go-cache"
27-
//import "github.com/devsisters/goquic"
20+
import "math/rand"
2821

2922
/**********************************************************************/
3023

3124
/* command-line arguments */
3225
var (
33-
bindip = flag.String("bind", "0.0.0.0", "bind to interface ip")
26+
bindip = flag.String("bind", "0.0.0.0", "IP address to bind to")
3427
port = flag.Int("port", 32000, "listen on port number")
35-
dbglvl = flag.Int("dbg", 1, "debugging level")
36-
workers = flag.Int("workers", 10, "number of independent workers")
37-
server = flag.String("server", "216.58.209.174", "Google DNS web server address")
38-
sni = flag.String("sni", "www.google.com", "SNI string to send (should match server certificate)")
39-
edns = flag.String("edns", "0.0.0.0/0", "edns client subnet")
40-
nopad = flag.Bool("nopad", false, "disable random padding")
28+
dbglvl = flag.Int("dbg", 2, "debugging level")
4129
)
4230

4331
/**********************************************************************/
@@ -149,57 +137,6 @@ func resolve(name string, qtype int) Reply {
149137
return <-rchan
150138
}
151139

152-
/* resolves queries */
153-
func resolver(server string) {
154-
/* setup the HTTP client */
155-
var httpTr = http.DefaultTransport.(*http.Transport)
156-
// var httpTr = goquic.NewRoundTripper(true)
157-
var tlsCfg = &tls.Config{ ServerName: *sni }
158-
httpTr.TLSClientConfig = tlsCfg;
159-
// req,_ := http.NewRequest("GET", "https://www.google.com/", nil)
160-
// httpTr.RoundTrip(req)
161-
var httpClient = &http.Client{ Timeout: time.Second*10, Transport: httpTr }
162-
163-
for q := range qchan {
164-
/* make the new response object */
165-
r := Reply{ Status: -1 }
166-
167-
/* prepare the query */
168-
v := url.Values{}
169-
v.Set("name", q.Name)
170-
v.Set("type", fmt.Sprintf("%d", q.Type))
171-
if len(*edns) > 0 {
172-
v.Set("edns_client_subnet", *edns)
173-
}
174-
if !*nopad {
175-
v.Set("random_padding", strings.Repeat(string(65+rand.Intn(26)), rand.Intn(500)))
176-
}
177-
178-
/* prepare request, send proper HTTP 'Host:' header */
179-
addr := fmt.Sprintf("https://%s/resolve?%s", server, v.Encode())
180-
hreq,_ := http.NewRequest("GET", addr, nil)
181-
hreq.Host = "dns.google.com"
182-
183-
/* send the query */
184-
resp,err := httpClient.Do(hreq)
185-
if (err == nil) {
186-
dbg(2, "[%s/%d] %s %s", q.Name, q.Type, resp.Status, resp.Proto)
187-
188-
/* read */
189-
buf,_ := ioutil.ReadAll(resp.Body)
190-
resp.Body.Close()
191-
dbg(7, " reply: %s", buf)
192-
193-
/* parse JSON? */
194-
if (resp.StatusCode == 200) { json.Unmarshal(buf, &r) }
195-
r.Now = time.Now()
196-
} else { dbg(1, "[%s/%d] error: %s", q.Name, q.Type, err.Error()) }
197-
198-
/* write the reply */
199-
*q.rchan <- r
200-
}
201-
}
202-
203140
/* main */
204141
func main() {
205142
/* prepare */
@@ -215,10 +152,11 @@ func main() {
215152
if err != nil { die(err) }
216153

217154
/* start workers */
218-
for i := 0; i < *workers; i++ { go resolver(*server) }
155+
gdns_start()
156+
// odns_start()
219157

220158
/* accept new connections forever */
221-
dbg(1, "dingo ver. 0.1 started on UDP port %d", laddr.Port)
159+
dbg(1, "dingo ver. 0.11 started on UDP port %d", laddr.Port)
222160
var buf []byte
223161
for {
224162
buf = make([]byte, 1500)

gdns.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/**
2+
* dingo: a DNS caching proxy written in Go
3+
* This file implements a Google DNS-over-HTTPS client
4+
*
5+
* Copyright (C) 2016 Pawel Foremski <[email protected]>
6+
* Licensed under GNU GPL v3
7+
*/
8+
9+
package main
10+
11+
import "fmt"
12+
import "net/http"
13+
import "net/url"
14+
import "time"
15+
import "io/ioutil"
16+
import "encoding/json"
17+
import "crypto/tls"
18+
import "math/rand"
19+
import "strings"
20+
import "flag"
21+
//import "github.com/devsisters/goquic"
22+
23+
/* command-line arguments */
24+
var (
25+
gdns_workers = flag.Int("gdns:workers", 10,
26+
"Google DNS: number of independent workers")
27+
gdns_server = flag.String("gdns:server", "216.58.209.174",
28+
"Google DNS: web server address")
29+
gdns_sni = flag.String("gdns:sni", "www.google.com",
30+
"Google DNS: SNI string to send (should match server certificate)")
31+
gdns_edns = flag.String("gdns:edns", "",
32+
"Google DNS: EDNS client subnet (set 0.0.0.0/0 to disable)")
33+
gdns_nopad = flag.Bool("gdns:nopad", false,
34+
"Google DNS: disable random padding")
35+
)
36+
37+
/**********************************************************************/
38+
39+
func gdns_start() {
40+
for i := 0; i < *gdns_workers; i++ { go gdns_resolver(*gdns_server) }
41+
}
42+
43+
func gdns_resolver(server string) {
44+
/* setup the HTTP client */
45+
var httpTr = http.DefaultTransport.(*http.Transport)
46+
// var httpTr = goquic.NewRoundTripper(true)
47+
48+
var tlsCfg = &tls.Config{ ServerName: *gdns_sni }
49+
httpTr.TLSClientConfig = tlsCfg;
50+
// req,_ := http.NewRequest("GET", "https://www.google.com/", nil)
51+
// httpTr.RoundTrip(req)
52+
53+
var httpClient = &http.Client{ Timeout: time.Second*10, Transport: httpTr }
54+
55+
for q := range qchan {
56+
/* make the new response object */
57+
r := Reply{ Status: -1 }
58+
59+
/* prepare the query */
60+
v := url.Values{}
61+
v.Set("name", q.Name)
62+
v.Set("type", fmt.Sprintf("%d", q.Type))
63+
if len(*gdns_edns) > 0 {
64+
v.Set("edns_client_subnet", *gdns_edns)
65+
}
66+
if !*gdns_nopad {
67+
v.Set("random_padding", strings.Repeat(string(65+rand.Intn(26)), rand.Intn(500)))
68+
}
69+
70+
/* prepare request, send proper HTTP 'Host:' header */
71+
addr := fmt.Sprintf("https://%s/resolve?%s", server, v.Encode())
72+
hreq,_ := http.NewRequest("GET", addr, nil)
73+
hreq.Host = "dns.google.com"
74+
75+
/* send the query */
76+
resp,err := httpClient.Do(hreq)
77+
if (err == nil) {
78+
dbg(2, "[%s/%d] %s %s", q.Name, q.Type, resp.Status, resp.Proto)
79+
80+
/* read */
81+
buf,_ := ioutil.ReadAll(resp.Body)
82+
resp.Body.Close()
83+
dbg(7, " reply: %s", buf)
84+
85+
/* parse JSON? */
86+
if (resp.StatusCode == 200) { json.Unmarshal(buf, &r) }
87+
r.Now = time.Now()
88+
} else { dbg(1, "[%s/%d] error: %s", q.Name, q.Type, err.Error()) }
89+
90+
/* write the reply */
91+
*q.rchan <- r
92+
}
93+
}
5.81 MB
Binary file not shown.
6.77 MB
Binary file not shown.
5.81 MB
Binary file not shown.
6.79 MB
Binary file not shown.

release/dingo-0.11/dingo-linux-386

5.78 MB
Binary file not shown.
6.8 MB
Binary file not shown.
5.79 MB
Binary file not shown.

0 commit comments

Comments
 (0)