From 031ff42d0389ec73ba819ef580a5b8dba247d75f Mon Sep 17 00:00:00 2001 From: Tarun Koyalwar Date: Thu, 17 Nov 2022 18:11:33 +0530 Subject: [PATCH] updated REAME.md,gh action,example (closes #70) --- .github/workflows/build-test.yml | 12 +++-- README.md | 82 +++++++++++++++++++++++++++++++- example/main.go | 53 +++++++++++++++++++++ go.mod | 41 +++++++++++++--- go.sum | 7 --- 5 files changed, 175 insertions(+), 20 deletions(-) create mode 100644 example/main.go diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 2ee7a85..cf68b8e 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -8,7 +8,10 @@ on: jobs: build: name: Test Builds - runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + runs-on: ${{ matrix.os }} steps: - name: Set up Go uses: actions/setup-go@v3 @@ -20,7 +23,6 @@ jobs: - name: Test run: go test ./... - - # Todo: create example folder - # - name: Build - # run: go build . \ No newline at end of file + + - name: Build + run: go build example/main.go \ No newline at end of file diff --git a/README.md b/README.md index 01e9467..c37a691 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,82 @@ # Fastdialer -Dialer with DNS Cache + Dial History + +[![License](https://img.shields.io/github/license/projectdiscovery/fastdialer)](LICENSE.md) +![Go version](https://img.shields.io/github/go-mod/go-version/projectdiscovery/fastdialer?filename=go.mod) +[![Release](https://img.shields.io/github/release/projectdiscovery/fastdialer)](https://github.com/projectdiscovery/fastdialer/releases/) +[![Checks](https://github.com/projectdiscovery/fastdialer/actions/workflows/build-test.yml/badge.svg)](https://github.com/projectdiscovery/fastdialer/actions/workflows/build-test.yml) +[![GoDoc](https://pkg.go.dev/badge/projectdiscovery/fastdialer)](https://pkg.go.dev/github.com/projectdiscovery/fastdialer/fastdialer) + + +Fastdialer is implementation of `net.Dialer` with lot of features like DNS Cache , Dial History etc + +# Features + +- DNS Cache +- Dial History +- Supports Memory/Hybrid/Disk Cache. +- Supports Old/New TLS and x509 versions +- Supports Resolution Using Hosts File +- Cross Platform and more.. + +For more details and documentation refer [GoDoc](https://pkg.go.dev/github.com/projectdiscovery/fastdialer/fastdialer). + +# Example + +An Example showing usage of fastdialer as a library is specified below: + + +```go +package main + +import ( + "context" + "fmt" + "log" + + "github.com/projectdiscovery/fastdialer/fastdialer" +) + +func main() { + + // refer fastdialer/options.go for options and customization + options := fastdialer.DefaultOptions + + // Create new dialer using NewDialer(opts fastdialer.options) + fd, err := fastdialer.NewDialer(fastdialer.DefaultOptions) + if err != nil { + panic(err) + } + + // Configure Cache if required + // memory based (also support Hybrid and Disk Cache) + options.CacheType = fastdialer.Memory + options.CacheMemoryMaxItems = 100 + + ctx := context.Background() + + // To dial and create connection use + // To create connection over TLS or older versions use + // fd.DialTLS() or fd.DialZTLS() + conn, err := fd.Dial(ctx, "tcp", "www.projectdiscovery.io:80") + if err != nil || conn == nil { + log.Fatalf("couldn't connect to target: %s", err) + } else { + fmt.Println("Connected: TCP stream created with www.projectdiscovery.io:80") + } + conn.Close() + + // To look up Host/ Get DNS details use + data, err := fd.GetDNSData("www.projectdiscovery.io") + if err != nil || data == nil { + log.Fatalf("couldn't retrieve dns data: %s", err) + } + + // To Print All Type of DNS Data use + jsonData, err := data.JSON() + if err != nil { + log.Fatalf("failed to marshal json: %s", err) + } + fmt.Println(jsonData) + +} +``` \ No newline at end of file diff --git a/example/main.go b/example/main.go new file mode 100644 index 0000000..c6d5203 --- /dev/null +++ b/example/main.go @@ -0,0 +1,53 @@ +package main + +import ( + "context" + "fmt" + "log" + + "github.com/projectdiscovery/fastdialer/fastdialer" +) + +func main() { + + // refer fastdialer/options.go for options and customization + options := fastdialer.DefaultOptions + + // Create new dialer using NewDialer(opts fastdialer.options) + fd, err := fastdialer.NewDialer(fastdialer.DefaultOptions) + if err != nil { + panic(err) + } + + // Configure Cache if required + // memory based (also support Hybrid and Disk Cache) + options.CacheType = fastdialer.Memory + options.CacheMemoryMaxItems = 100 + + ctx := context.Background() + + // To dial and create connection use + // To create connection over TLS or older versions use + // fd.DialTLS() or fd.DialZTLS() + conn, err := fd.Dial(ctx, "tcp", "www.projectdiscovery.io:80") + if err != nil || conn == nil { + log.Fatalf("couldn't connect to target: %s", err) + } else { + fmt.Println("Connected: TCP stream created with www.projectdiscovery.io:80") + } + conn.Close() + + // To look up Host/ Get DNS details use + data, err := fd.GetDNSData("www.projectdiscovery.io") + if err != nil || data == nil { + log.Fatalf("couldn't retrieve dns data: %s", err) + } + + // To Print All Type of DNS Data use + jsonData, err := data.JSON() + if err != nil { + log.Fatalf("failed to marshal json: %s", err) + } + fmt.Println(jsonData) + +} diff --git a/go.mod b/go.mod index e644dbc..cbb240e 100644 --- a/go.mod +++ b/go.mod @@ -1,22 +1,49 @@ module github.com/projectdiscovery/fastdialer -go 1.14 +go 1.18 require ( - github.com/akrylysov/pogreb v0.10.1 // indirect github.com/dimchansky/utfbom v1.1.1 - github.com/golang/snappy v0.0.4 // indirect - github.com/kr/pretty v0.3.0 // indirect github.com/pkg/errors v0.9.1 github.com/projectdiscovery/hmap v0.0.2-0.20210917080408-0fd7bd286bfa github.com/projectdiscovery/networkpolicy v0.0.1 github.com/projectdiscovery/retryabledns v1.0.17 github.com/projectdiscovery/utils v0.0.2 - github.com/rogpeppe/go-internal v1.8.0 // indirect github.com/stretchr/testify v1.8.1 github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 github.com/zmap/zcrypto v0.0.0-20220803033029-557f3e4940be - go.etcd.io/bbolt v1.3.6 // indirect golang.org/x/net v0.1.0 - google.golang.org/protobuf v1.27.1 // indirect +) + +require ( + github.com/akrylysov/pogreb v0.10.1 // indirect + github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect + github.com/aymerick/douceur v0.2.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gorilla/css v1.0.0 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/microcosm-cc/bluemonday v1.0.21 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/projectdiscovery/fileutil v0.0.3 // indirect + github.com/projectdiscovery/iputil v0.0.2 // indirect + github.com/projectdiscovery/retryablehttp-go v1.0.2 // indirect + github.com/projectdiscovery/sliceutil v0.0.1 // indirect + github.com/projectdiscovery/stringsutil v0.0.2 // indirect + github.com/rogpeppe/go-internal v1.8.0 // indirect + github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect + github.com/syndtr/goleveldb v1.0.0 // indirect + github.com/weppos/publicsuffix-go v0.15.1-0.20220724114530-e087fba66a37 // indirect + github.com/yl2chen/cidranger v1.0.2 // indirect + github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect + go.etcd.io/bbolt v1.3.6 // indirect + go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + golang.org/x/crypto v0.1.0 // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/tools v0.2.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3cc8cff..1a9e4b3 100644 --- a/go.sum +++ b/go.sum @@ -22,7 +22,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.2/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -33,8 +32,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -147,7 +144,6 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -160,7 +156,6 @@ golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -243,8 +238,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=