diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index ec041ba..d4f1a15 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ vendor/ -bin/ \ No newline at end of file +bin/ +p2p-rendering/ \ No newline at end of file diff --git a/Makefile b/Makefile old mode 100755 new mode 100644 diff --git a/README b/README old mode 100755 new mode 100644 diff --git a/client/client.go b/client/go/client.go old mode 100755 new mode 100644 similarity index 100% rename from client/client.go rename to client/go/client.go diff --git a/client/go/mDNS.go b/client/go/mDNS.go new file mode 100644 index 0000000..689cb0b --- /dev/null +++ b/client/go/mDNS.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/grandcat/zeroconf" + "log" + "context" + "time" +) + +func main() { + // Discover all services on the network (e.g. _workstation._tcp) + resolver, err := zeroconf.NewResolver(nil) + if err != nil { + log.Fatalln("Failed to initialize resolver:", err.Error()) + } + + entries := make(chan *zeroconf.ServiceEntry) + go func(results <-chan *zeroconf.ServiceEntry) { + for entry := range results { + log.Println(entry) + } + log.Println("No more entries.") + }(entries) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second*15) + defer cancel() + err = resolver.Browse(ctx, "_workstation._tcp", "local.", entries) + if err != nil { + log.Fatalln("Failed to browse:", err.Error()) + } + + <-ctx.Done() + +} \ No newline at end of file diff --git a/client/list-servers.go b/client/list-servers.go old mode 100755 new mode 100644 index 0e7b6e7..5fcf23c --- a/client/list-servers.go +++ b/client/list-servers.go @@ -11,6 +11,7 @@ import ( "github.com/christophwitzko/go-curl" "net/http" "encoding/json" + "reflect" ) func list_servers() (error, []byte){ @@ -43,8 +44,21 @@ func list_servers() (error, []byte){ return nil ,data } + func main() { // Where your local node is running on localhost:5001 _ , data := list_servers() + m := map[string]interface{}{} + // print type of output + fmt.Println(reflect.TypeOf(data)) + + // print + + // Debug output + /*for _, element := range data { + fmt.Println(string(element)) + }*/ + + //fmt.Println(string(data)) } \ No newline at end of file diff --git a/client/python/__pycache__/ipfs_config.cpython-38.pyc b/client/python/__pycache__/ipfs_config.cpython-38.pyc new file mode 100644 index 0000000..6904f34 Binary files /dev/null and b/client/python/__pycache__/ipfs_config.cpython-38.pyc differ diff --git a/client/python/ipfs_config.py b/client/python/ipfs_config.py new file mode 100644 index 0000000..03df42e --- /dev/null +++ b/client/python/ipfs_config.py @@ -0,0 +1,8 @@ +''' +This scrypt creates basic config for IPFS server +''' +import ipfsApi + +def config(): + api = ipfsApi.Client('127.0.0.1', 5001) + return api \ No newline at end of file diff --git a/client/python/list-server.py b/client/python/list-server.py new file mode 100644 index 0000000..0ba33ca --- /dev/null +++ b/client/python/list-server.py @@ -0,0 +1,18 @@ +''' +This scrypt uses curl to list servers in the IPFS network +''' +import requests +import json + +def list_servers(): + peers = requests.post('http://127.0.0.1:5001/api/v0/swarm/peers') + # TODO: Detect nodes that are servers + + peers_dict = peers.json() + # Ping for each node + for i in peers_dict['Peers']: + ping = requests.post('http://127.0.0.1:5001/api/v0/ping?arg='+i['Peer']+'&count=1') + # Create a replace function TODO + print(str(ping.content)[2:-3]) + +list_servers() \ No newline at end of file diff --git a/dissertation-1.pdf b/dissertation-1.pdf old mode 100755 new mode 100644 diff --git a/docs/Installation.txt b/docs/Installation.txt old mode 100755 new mode 100644 diff --git a/go.mod b/go.mod old mode 100755 new mode 100644 index 0fab3b2..ba46d09 --- a/go.mod +++ b/go.mod @@ -10,13 +10,17 @@ require ( github.com/docker/docker v20.10.1+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.4.0 // indirect + github.com/grandcat/zeroconf v1.0.0 // indirect + github.com/hashicorp/mdns v1.0.3 // indirect github.com/ipfs/go-ipfs-api v0.2.0 // indirect + github.com/jackpal/gateway v1.0.7 // indirect github.com/libp2p/go-libp2p v0.13.0 github.com/libp2p/go-libp2p-core v0.8.0 github.com/libp2p/go-libp2p-kad-dht v0.11.1 // indirect github.com/multiformats/go-multiaddr v0.3.1 github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.1 // indirect + github.com/pion/mdns v0.0.4 // indirect github.com/rfyiamcool/go-shell v0.0.0-20200826083509-1c9811ccc8ca // indirect github.com/urfave/cli/v2 v2.3.0 github.com/wanyvic/go-libp2p-ssh v0.0.0-20190916080332-8cebbd7564ef diff --git a/go.sum b/go.sum old mode 100755 new mode 100644 index 9c06f8c..c82bed0 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVa github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cheekybits/is v0.0.0-20150225183255-68e9c0620927/go.mod h1:h/aW8ynjgkuj+NQRlZcDbAbM1ORAbXjXX77sX7T289U= @@ -97,6 +99,8 @@ github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grandcat/zeroconf v1.0.0 h1:uHhahLBKqwWBV6WZUDAT71044vwOTL+McW0mBJvo6kE= +github.com/grandcat/zeroconf v1.0.0/go.mod h1:lTKmG1zh86XyCoUeIHSA4FJMBwCJiQmGfcP2PdzytEs= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -108,6 +112,8 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/mdns v1.0.3 h1:hPneYJlzSjxFBmUlnDGXRykxBZ++dQAJhU57gCO7TzI= +github.com/hashicorp/mdns v1.0.3/go.mod h1:P9sIDVQGUBr2GtS4qS2QCBdtgqP7TBt6d8looU5l5r4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -159,7 +165,10 @@ github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscw github.com/ipfs/go-log/v2 v2.1.1 h1:G4TtqN+V9y9HY9TA6BwbCVyyBZ2B9MbCjR2MtGx8FR0= github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= +github.com/jackpal/gateway v1.0.7 h1:7tIFeCGmpyrMx9qvT0EgYUi7cxVW48a0mMvnIL17bPM= +github.com/jackpal/gateway v1.0.7/go.mod h1:aRcO0UFKt+MgIZmRmvOmnejdDT4Y1DNiNOsSd1AcIbA= github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -363,7 +372,9 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo= github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= @@ -449,6 +460,11 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/mdns v0.0.4 h1:O4vvVqr4DGX63vzmO6Fw9vpy3lfztVWHGCQfyw0ZLSY= +github.com/pion/mdns v0.0.4/go.mod h1:R1sL0p50l42S5lJs91oNdUL58nm0QHrhxnSegr++qC0= +github.com/pion/transport v0.8.10/go.mod h1:tBmha/UCjpum5hqTWhfAEs3CO4/tHSg0MYRhSzR+CZ8= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -551,6 +567,10 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 h1:e6HwijUxhDe+hPNjZQQn9bA5PW3vNmnN64U2ZW759Lk= +golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/main.go b/main.go old mode 100755 new mode 100644 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..770052b --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +ipfs-api \ No newline at end of file diff --git a/server/container.go b/server/container.go old mode 100755 new mode 100644 diff --git a/server/mDNS.go b/server/mDNS.go new file mode 100644 index 0000000..31cf306 --- /dev/null +++ b/server/mDNS.go @@ -0,0 +1,28 @@ +package main + +import ( + "net" + + "github.com/pion/mdns" + "golang.org/x/net/ipv4" +) + +func main() { + server, err := zeroconf.Register("GoZeroconf", "_workstation._tcp", "local.", 42424, []string{"txtv=0", "lo=1", "la=2"}, nil) + if err != nil { + panic(err) + } + defer server.Shutdown() + + // Clean exit. + sig := make(chan os.Signal, 1) + signal.Notify(sig, os.Interrupt, syscall.SIGTERM) + select { + case <-sig: + // Exit by user + case <-time.After(time.Second * 120): + // Exit by timeout + } + + log.Println("Shutting down.") +} \ No newline at end of file diff --git a/server/portforwarding b/server/portforwarding new file mode 100755 index 0000000..4bc567f Binary files /dev/null and b/server/portforwarding differ diff --git a/server/portforwarding.go b/server/portforwarding.go new file mode 100644 index 0000000..69f38d6 --- /dev/null +++ b/server/portforwarding.go @@ -0,0 +1,23 @@ +package main + +import ( + "fmt" + + "github.com/jackpal/gateway" + natpmp "github.com/jackpal/go-nat-pmp" +) + +func main() { + gatewayIP, err := gateway.DiscoverGateway() + if err != nil { + return + } + + client := natpmp.NewClient(gatewayIP) + response, err := client.GetExternalAddress() + if err != nil { + fmt.Print(err) + return + } + fmt.Printf("External IP address: %v\n", response.ExternalIPAddress) +} \ No newline at end of file diff --git a/server/server.go b/server/server.go old mode 100755 new mode 100644