Nagy Károly Gábriel
6 years ago
commit
d8c63763fd
8 changed files with 372 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||||
|
# http://editorconfig.org |
||||||
|
|
||||||
|
root = true |
||||||
|
|
||||||
|
[*] |
||||||
|
charset = utf-8 |
||||||
|
end_of_line = lf |
||||||
|
insert_final_newline = true |
||||||
|
trim_trailing_whitespace = true |
||||||
|
indent_size = 4 |
||||||
|
indent_style = space |
||||||
|
|
||||||
|
[*.go] |
||||||
|
indent_style = tab |
||||||
|
indent_size = 4 |
||||||
|
|
||||||
|
[Makefile] |
||||||
|
indent_style = tab |
||||||
|
|
@ -0,0 +1,27 @@ |
|||||||
|
# Compiled Object files, Static and Dynamic libs (Shared Objects) |
||||||
|
*.o |
||||||
|
*.a |
||||||
|
*.so |
||||||
|
|
||||||
|
# Folders |
||||||
|
_obj |
||||||
|
_test |
||||||
|
|
||||||
|
# Architecture specific extensions/prefixes |
||||||
|
*.[568vq] |
||||||
|
[568vq].out |
||||||
|
|
||||||
|
*.cgo1.go |
||||||
|
*.cgo2.c |
||||||
|
_cgo_defun.c |
||||||
|
_cgo_gotypes.go |
||||||
|
_cgo_export.* |
||||||
|
|
||||||
|
_testmain.go |
||||||
|
|
||||||
|
*.exe |
||||||
|
*.test |
||||||
|
*.prof |
||||||
|
/.GOPATH |
||||||
|
/bin |
||||||
|
/vendor |
@ -0,0 +1,50 @@ |
|||||||
|
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. |
||||||
|
|
||||||
|
|
||||||
|
[[projects]] |
||||||
|
digest = "1:d64a0aa67f715fd28f5ddfe0d74c06b6d6fe0fed931d77e662f2c4694f6854dc" |
||||||
|
name = "github.com/miekg/dns" |
||||||
|
packages = ["."] |
||||||
|
pruneopts = "UT" |
||||||
|
revision = "56be65265e34e731425e0269a301774938827c60" |
||||||
|
version = "v1.1.3" |
||||||
|
|
||||||
|
[[projects]] |
||||||
|
branch = "master" |
||||||
|
digest = "1:d5891c5bca9c62e5d394ca26491d2b710a1dc08cedeb0ca8f9ac4c3305120b02" |
||||||
|
name = "golang.org/x/crypto" |
||||||
|
packages = [ |
||||||
|
"ed25519", |
||||||
|
"ed25519/internal/edwards25519", |
||||||
|
] |
||||||
|
pruneopts = "UT" |
||||||
|
revision = "ff983b9c42bc9fbf91556e191cc8efb585c16908" |
||||||
|
|
||||||
|
[[projects]] |
||||||
|
branch = "master" |
||||||
|
digest = "1:19beed19e4246df7aff387a2bcd4519a386e3fe9637690031c4d4b0cf75f7215" |
||||||
|
name = "golang.org/x/net" |
||||||
|
packages = [ |
||||||
|
"bpf", |
||||||
|
"internal/iana", |
||||||
|
"internal/socket", |
||||||
|
"ipv4", |
||||||
|
"ipv6", |
||||||
|
] |
||||||
|
pruneopts = "UT" |
||||||
|
revision = "915654e7eabcea33ae277abbecf52f0d8b7a9fdc" |
||||||
|
|
||||||
|
[[projects]] |
||||||
|
branch = "master" |
||||||
|
digest = "1:f6f6d9d6f80c9e32acc0f4f3b904e0b9f5b18a7757c2ef941121bd79a10e7bdf" |
||||||
|
name = "golang.org/x/sys" |
||||||
|
packages = ["unix"] |
||||||
|
pruneopts = "UT" |
||||||
|
revision = "11f53e03133963fb11ae0588e08b5e0b85be8be5" |
||||||
|
|
||||||
|
[solve-meta] |
||||||
|
analyzer-name = "dep" |
||||||
|
analyzer-version = 1 |
||||||
|
input-imports = ["github.com/miekg/dns"] |
||||||
|
solver-name = "gps-cdcl" |
||||||
|
solver-version = 1 |
@ -0,0 +1,34 @@ |
|||||||
|
# Gopkg.toml example |
||||||
|
# |
||||||
|
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html |
||||||
|
# for detailed Gopkg.toml documentation. |
||||||
|
# |
||||||
|
# required = ["github.com/user/thing/cmd/thing"] |
||||||
|
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] |
||||||
|
# |
||||||
|
# [[constraint]] |
||||||
|
# name = "github.com/user/project" |
||||||
|
# version = "1.0.0" |
||||||
|
# |
||||||
|
# [[constraint]] |
||||||
|
# name = "github.com/user/project2" |
||||||
|
# branch = "dev" |
||||||
|
# source = "github.com/myfork/project2" |
||||||
|
# |
||||||
|
# [[override]] |
||||||
|
# name = "github.com/x/y" |
||||||
|
# version = "2.4.0" |
||||||
|
# |
||||||
|
# [prune] |
||||||
|
# non-go = false |
||||||
|
# go-tests = true |
||||||
|
# unused-packages = true |
||||||
|
|
||||||
|
|
||||||
|
[[constraint]] |
||||||
|
name = "github.com/miekg/dns" |
||||||
|
version = "1.1.3" |
||||||
|
|
||||||
|
[prune] |
||||||
|
go-tests = true |
||||||
|
unused-packages = true |
@ -0,0 +1,21 @@ |
|||||||
|
MIT License |
||||||
|
|
||||||
|
Copyright (c) 2019 Nagy Károly Gábriel |
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||||
|
of this software and associated documentation files (the "Software"), to deal |
||||||
|
in the Software without restriction, including without limitation the rights |
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||||
|
copies of the Software, and to permit persons to whom the Software is |
||||||
|
furnished to do so, subject to the following conditions: |
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all |
||||||
|
copies or substantial portions of the Software. |
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||||
|
SOFTWARE. |
@ -0,0 +1,150 @@ |
|||||||
|
# The import path is where your repository can be found.
|
||||||
|
# To import subpackages, always prepend the full import path.
|
||||||
|
# If you change this, run `make clean`. Read more: https://git.io/vM7zV
|
||||||
|
|
||||||
|
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
|
||||||
|
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
|
||||||
|
|
||||||
|
IMPORT_PATH := git.jpi.io/$(USER)/$(current_dir)
|
||||||
|
|
||||||
|
# V := 1 # When V is set, print commands and build progress.
|
||||||
|
|
||||||
|
# Space separated patterns of packages to skip in list, test, format.
|
||||||
|
IGNORED_PACKAGES := /vendor/
|
||||||
|
|
||||||
|
.PHONY: all |
||||||
|
all: build |
||||||
|
|
||||||
|
.PHONY: build |
||||||
|
build: .GOPATH/.ok |
||||||
|
$Q go install $(if $V,-v) $(VERSION_FLAGS) $(IMPORT_PATH)
|
||||||
|
|
||||||
|
### Code not in the repository root? Another binary? Add to the path like this.
|
||||||
|
# .PHONY: otherbin
|
||||||
|
# otherbin: .GOPATH/.ok
|
||||||
|
# $Q go install $(if $V,-v) $(VERSION_FLAGS) $(IMPORT_PATH)/cmd/otherbin
|
||||||
|
|
||||||
|
##### ^^^^^^ EDIT ABOVE ^^^^^^ #####
|
||||||
|
|
||||||
|
##### =====> Utility targets <===== #####
|
||||||
|
|
||||||
|
.PHONY: clean test list cover format gen |
||||||
|
|
||||||
|
clean: |
||||||
|
$Q rm -rf bin .GOPATH
|
||||||
|
|
||||||
|
test: .GOPATH/.ok |
||||||
|
$Q go test $(if $V,-v) -i -race $(allpackages) # install -race libs to speed up next run
|
||||||
|
ifndef CI |
||||||
|
$Q go vet $(allpackages)
|
||||||
|
$Q GODEBUG=cgocheck=2 go test -race $(allpackages)
|
||||||
|
else |
||||||
|
$Q ( go vet $(allpackages); echo $$? ) | \
|
||||||
|
tee .GOPATH/test/vet.txt | sed '$$ d'; exit $$(tail -1 .GOPATH/test/vet.txt)
|
||||||
|
$Q ( GODEBUG=cgocheck=2 go test -v -race $(allpackages); echo $$? ) | \
|
||||||
|
tee .GOPATH/test/output.txt | sed '$$ d'; exit $$(tail -1 .GOPATH/test/output.txt)
|
||||||
|
endif |
||||||
|
|
||||||
|
list: .GOPATH/.ok |
||||||
|
@echo $(allpackages)
|
||||||
|
|
||||||
|
cover: bin/gocovmerge .GOPATH/.ok |
||||||
|
@echo "NOTE: make cover does not exit 1 on failure, don't use it to check for tests success!"
|
||||||
|
$Q rm -f .GOPATH/cover/*.out .GOPATH/cover/all.merged
|
||||||
|
$(if $V,@echo "-- go test -coverpkg=./... -coverprofile=.GOPATH/cover/... ./...")
|
||||||
|
@for MOD in $(allpackages); do \
|
||||||
|
go test -coverpkg=`echo $(allpackages)|tr " " ","` \
|
||||||
|
-coverprofile=.GOPATH/cover/unit-`echo $$MOD|tr "/" "_"`.out \
|
||||||
|
$$MOD 2>&1 | grep -v "no packages being tested depend on"; \
|
||||||
|
done
|
||||||
|
$Q ./bin/gocovmerge .GOPATH/cover/*.out > .GOPATH/cover/all.merged
|
||||||
|
ifndef CI |
||||||
|
$Q go tool cover -html .GOPATH/cover/all.merged
|
||||||
|
else |
||||||
|
$Q go tool cover -html .GOPATH/cover/all.merged -o .GOPATH/cover/all.html
|
||||||
|
endif |
||||||
|
@echo ""
|
||||||
|
@echo "=====> Total test coverage: <====="
|
||||||
|
@echo ""
|
||||||
|
$Q go tool cover -func .GOPATH/cover/all.merged
|
||||||
|
|
||||||
|
format: bin/goimports .GOPATH/.ok |
||||||
|
$Q find .GOPATH/src/$(IMPORT_PATH)/ -iname \*.go | grep -v \
|
||||||
|
-e "^$$" $(addprefix -e ,$(IGNORED_PACKAGES)) | xargs ./bin/goimports -w
|
||||||
|
|
||||||
|
gen: .GOPATH/.ok |
||||||
|
@echo "Running go generate"
|
||||||
|
$Q cd $(CURDIR)/.GOPATH/src/$(IMPORT_PATH) && go generate
|
||||||
|
@echo "Done!"
|
||||||
|
|
||||||
|
##### =====> Internals <===== #####
|
||||||
|
|
||||||
|
.PHONY: setup |
||||||
|
setup: clean .GOPATH/.ok |
||||||
|
@if ! grep "/.GOPATH" .gitignore > /dev/null 2>&1; then \
|
||||||
|
echo "/.GOPATH" >> .gitignore; \
|
||||||
|
echo "/bin" >> .gitignore; \
|
||||||
|
fi
|
||||||
|
go get -u github.com/golang/dep/cmd/dep
|
||||||
|
- go get -u golang.org/x/tools/cmd/goimports
|
||||||
|
- go get -u github.com/wadey/gocovmerge
|
||||||
|
@test -f Gopkg.toml || \
|
||||||
|
(cd $(CURDIR)/.GOPATH/src/$(IMPORT_PATH) && ./bin/dep init)
|
||||||
|
(cd $(CURDIR)/.GOPATH/src/$(IMPORT_PATH) && ./bin/dep ensure)
|
||||||
|
VERSION := $(shell git describe --tags --always --dirty="-dev")
|
||||||
|
DATE := $(shell date -u '+%Y-%m-%d-%H%M UTC')
|
||||||
|
VERSION_FLAGS := -ldflags='-X "main.Version=$(VERSION)" -X "main.BuildTime=$(DATE)"'
|
||||||
|
|
||||||
|
# cd into the GOPATH to workaround ./... not following symlinks
|
||||||
|
_allpackages = $(shell ( cd $(CURDIR)/.GOPATH/src/$(IMPORT_PATH) && \
|
||||||
|
GOPATH=$(CURDIR)/.GOPATH go list ./... 2>&1 1>&3 | \
|
||||||
|
grep -v -e "^$$" $(addprefix -e ,$(IGNORED_PACKAGES)) 1>&2 ) 3>&1 | \
|
||||||
|
grep -v -e "^$$" $(addprefix -e ,$(IGNORED_PACKAGES)))
|
||||||
|
|
||||||
|
# memoize allpackages, so that it's executed only once and only if used
|
||||||
|
allpackages = $(if $(__allpackages),,$(eval __allpackages := $$(_allpackages)))$(__allpackages)
|
||||||
|
|
||||||
|
export GOPATH := $(CURDIR)/.GOPATH
|
||||||
|
unexport GOBIN |
||||||
|
|
||||||
|
Q := $(if $V,,@)
|
||||||
|
|
||||||
|
.GOPATH/.ok: |
||||||
|
$Q mkdir -p "$(dir .GOPATH/src/$(IMPORT_PATH))"
|
||||||
|
$Q ln -s ../../../.. ".GOPATH/src/$(IMPORT_PATH)"
|
||||||
|
$Q mkdir -p .GOPATH/test .GOPATH/cover
|
||||||
|
$Q mkdir -p bin
|
||||||
|
$Q ln -s ../bin .GOPATH/bin
|
||||||
|
$Q touch $@
|
||||||
|
|
||||||
|
.PHONY: bin/gocovmerge bin/goimports |
||||||
|
bin/gocovmerge: .GOPATH/.ok |
||||||
|
@test -d ./vendor/github.com/wadey/gocovmerge || \
|
||||||
|
{ echo "Vendored gocovmerge not found, try running 'make setup'..."; exit 1; }
|
||||||
|
$Q go install $(IMPORT_PATH)/vendor/github.com/wadey/gocovmerge
|
||||||
|
bin/goimports: .GOPATH/.ok |
||||||
|
@test -d ./vendor/golang.org/x/tools/cmd/goimports || \
|
||||||
|
{ echo "Vendored goimports not found, try running 'make setup'..."; exit 1; }
|
||||||
|
$Q go install $(IMPORT_PATH)/vendor/golang.org/x/tools/cmd/goimports
|
||||||
|
|
||||||
|
# Based on https://github.com/cloudflare/hellogopher - v1.1 - MIT License
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Cloudflare
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
|
# copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
# SOFTWARE.
|
@ -0,0 +1,68 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
|
||||||
|
"github.com/miekg/dns" |
||||||
|
) |
||||||
|
|
||||||
|
/* |
||||||
|
dig {-4,-6} +short myip.opendns.com @resolver1.opendns.com |
||||||
|
dig {-4,-6} TXT +short o-o.myaddr.l.google.com @ns1.google.com |
||||||
|
*/ |
||||||
|
|
||||||
|
func get4(c *dns.Client, m *dns.Msg, nameserver string) (*dns.Msg, error) { |
||||||
|
c.Net = "udp4" |
||||||
|
m.SetQuestion("myip.opendns.com.", dns.TypeA) |
||||||
|
|
||||||
|
r, _, err := c.Exchange(m, nameserver) |
||||||
|
return r, err |
||||||
|
} |
||||||
|
|
||||||
|
func get6(c *dns.Client, m *dns.Msg, nameserver string) (*dns.Msg, error) { |
||||||
|
c.Net = "udp6" |
||||||
|
m.SetQuestion("myip.opendns.com.", dns.TypeAAAA) |
||||||
|
|
||||||
|
r, _, err := c.Exchange(m, nameserver) |
||||||
|
return r, err |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
func printIP(ra []dns.RR) []string { |
||||||
|
var ips []string |
||||||
|
for _, ansa := range ra { |
||||||
|
switch ansb := ansa.(type) { |
||||||
|
case *dns.A: |
||||||
|
ips = append(ips, ansb.A.String()) |
||||||
|
case *dns.AAAA: |
||||||
|
ips = append(ips, ansb.AAAA.String()) |
||||||
|
} |
||||||
|
} |
||||||
|
return ips |
||||||
|
} |
||||||
|
|
||||||
|
func main() { |
||||||
|
nameserver := dns.Fqdn("resolver1.opendns.com") + ":53" |
||||||
|
|
||||||
|
c := new(dns.Client) |
||||||
|
c.Net = "udp4" |
||||||
|
m := &dns.Msg{ |
||||||
|
MsgHdr: dns.MsgHdr{ |
||||||
|
RecursionDesired: true, |
||||||
|
}, |
||||||
|
Question: make([]dns.Question, 1), |
||||||
|
} |
||||||
|
r4, err := get4(c, m, nameserver) |
||||||
|
if err != nil { |
||||||
|
fmt.Println(err) |
||||||
|
} else { |
||||||
|
fmt.Println(printIP(r4.Answer)) |
||||||
|
} |
||||||
|
r6, e6 := get6(c, m, nameserver) |
||||||
|
if err != nil { |
||||||
|
fmt.Println(e6) |
||||||
|
} else { |
||||||
|
fmt.Println(printIP(r6.Answer)) |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue