Git Product home page Git Product logo

fingertip's Introduction

Fingertip

Note: This project is experimental use at your own risk.

Fingertip is a menubar app that runs a lightweight decentralized resolver to resolve names from the Handshake root zone. It can also resolve names from external namespaces such as the Ethereum Name System. Fingertip integrates with letsdane to provide TLS support without relying on a centralized certificate authority.

Install

You can use a pre-built binary from releases or build your own from source.

Configuration

You can set these as environment variables prefixed with FINGERTIP_ or store it in the app config directory as fingertip.env

# letsdane proxy address
PROXY_ADDRESS=127.0.0.1:9590
# hnsd root server address
ROOT_ADDRESS=127.0.0.1:9591
# hnsd recursive resolver address
RECURSIVE_ADDRESS=127.0.0.1:9592
# Connect your own Ethereum full node/or blockchain provider such as Infura
#ETHEREUM_ENDPOINT=/home/user/.ethereum/geth.ipc or
#ETHEREUM_ENDPOINT=https://mainnet.infura.io/v3/YOUR-PROJECT-ID

Build from source

Go 1.16+ is required.

$ git clone https://github.com/buffrr/fingertip

MacOS

$ brew install dylibbundler git automake autoconf libtool unbound
$ git clone https://github.com/imperviousinc/fingertip
$ cd fingertip && ./builds/macos/build.sh

For development, you can run fingertip from the following path:

$ ./builds/macos/Fingertip.app/Contents/MacOS/fingertip

Configure your IDE to output to this directory or continue to use build.sh when making changes (it will only build hnsd once).

Windows

Follow hnsd build instructions for windows. Copy hnsd.exe binary and its dependencies (libcrypto, libssl and libunbound dlls) into the fingertip/builds/windows directory. You no longer need to use MSYS shell.

$ choco install mingw
$ go build -trimpath -o ./builds/windows/  -ldflags "-H windowsgui"

Linux

Follow hnsd build instructions for Linux. Copy hnsd binary into the fingertip/builds/linux/appdir/usr/bin directory.

$ go build -trimpath -o ./builds/linux/appdir/usr/bin/

Credits

Fingertip uses hnsd a lightweight Handshake resolver, letsdane for TLS support and go-ethereum for .eth and Ethereum HIP-5 lookups.

The name "fingertip" was stolen from @pinheadmz

fingertip's People

Contributors

apbigcod avatar buffrr avatar rithvikvibhu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

fingertip's Issues

Consider setting hnsd --pool-size=4

I just want to make sure we have enough active full nodes on the network to support all the light clients being deployed. Bob Wallet will soon launch a version with SPV mode and this may add additional burden. I think four peers is probably still safe enough and eight is probably overkill for hnsd but we should test it out.

Not Working on Arch Linux

So, I downloaded the AppImage and executed it. It didn't show anything.

~/Desktop                                                                                                                                
โฏ ./Fingertip-v0.0.3.AppImage 
Icon theme "Numix-Circle" not found.
/home/amresh/Desktop/Fingertip-v0.0.3.AppImage: symbol lookup error: /usr/lib/libgio-2.0.so.0: undefined symbol: g_module_open_full

Distro: Manjaro with KDE

Similar to #9

Server failure when attempting to resolve Handshake domains. Wrong Port?

I just setup Fingertip on my Windows 10 machine according to the video linked on the Impervious' website. When I attempt to visit any Handshake domain I get a 502 Bad Gateway error. The error message alternates intermittently between server error and read udp 127.0.0.1:5xxxx->127.0.0.1:9592: i/o timeout where the last four digits of the port have ranged between 1550 and 7650 across different page refreshes. Visiting non-Handshake websites works perfectly fine and attempting to access an invalid Handshake site states that the host does not exist. Attempting to access a Handshake domain securely gives a generic Firefox "unable to connect" error page.

I think the problem has to do with the fact that port 9592 (above) does not match 9590 (the setup webpage), but this is not an area I know a lot about.

My Firefox proxy settings should be correct:
image

Running netstat -ab shows that Fingertip is running on 9590 but nothing is listening on 9592:
TCP 127.0.0.1:9590 DESKTOP-PM0S2JG:0 LISTENING [fingertip.exe]

HTTPS not working in Linux AppImage

Screenshot from 2021-12-14 17-52-47
Screenshot from 2021-12-14 17-54-00

While the Handshake Latest AppImage (v0.0.3) on Zorin 16 (Ubuntu 20.04) the proxy works to resolve domains, but even with the certificate installed in firefox and my PC's trust store, TLS doesn't work

Feature request/suggestion: letsdane-only mode

While talking to folks who want to use hdns.io or similar approaches to enabling handshake domain resolution, it occurs to me that there isn't a convenient way to get security through DANE support yet outside of fingertip. But people might still have good reasons to want to switch to a remote DNS resolver. If/when DNSSEC is available, it'd be nice to be able to run fingertip with the hnsd bits disabled and just rely on the system/browser configured remote resolver. This would let us choose for ourselves between the various tradeoffs of different resolver options but still use the easiest available way to support DANE for TLS security. For example, I recently heard of someone whose ISP outright drops port 53 traffic except to their own DNS resolvers, so DoH is the best workaround for those people. DoH is also becoming popular for more basic ISP-layer traffic privacy reasons, and I know y'all are working on something in that direction, but meanwhile this seems to me like a very reasonable usability option to go ahead and support.

No guide to setup fingertip on chrome

How do I configure chrome to work with fingertip? I can only find a guide on how to do that for Firefox. Chrome doesn't seem to have a proxy setting

Not Working on Ubuntu 21.10

The GUI doesnt work (There is no response after clicking the file)

This is the error:
**(Fingertip-v0.0.3.AppImage:106896): GLib-GIO-ERROR : 16:49:20.056: Settings schema 'org.gnome.settings-daemon.plugins.xsettings' does not contain a key named 'antialiasing'
SIGTRAP: trace trap
PC=0x7fb55af7e66f m=0 sigcode=128)

Apple Silicon Support

It would be great if you could provide a binary for Apple Silicon, so that people with current macs do not need to compile the software.

GUI Can't Run on Ubuntu 22.04 LTS and Can't Access HNS Domains.

I've installed Ubuntu 22.04 LTS and used Fingertip as I used it with the previous version of Ubuntu.

These are some problems I experienced:

  1. The GUI can't be executed. I've already changed the permission by using this command:

chmod+x [Fingertip AppImage]

  1. I finally moved to the terminal and tried to execute Fingertip via the Terminal. I executed this command:

./[Fingertip AppImage]

It didn't run well and displayed an Error Message:
libgio-2.0.so.0: undefined symbol: g_module_open_full

  1. I asked the creator of AppImage and he said that the problem may be due to libgio-2.0.so.0.
    I extracted the app using this command:
    ./[Fingertip File] --appimage-extract
    and it generated a folder named squashfs-root.

Then, I executed a file named fingertip in this folder squashfs-root/usr/bin.

It didn't run well.

Then, I removed the libgio-2.0.so.0 inside the lib folder of Fingerprint and re-executed the file named fingerprint. After that, I finally could run the GUI.

  1. I followed some instructions like importing the cert and inputting http://127.0.0.1:9590/proxy.pac to configure the proxy.
    These are the status:
Handshake Resolver Status | Ready
Block height | 140121
Browser using Fingertip | Yes
DNS Interference Test | Passed
  1. And then I tried to browse some HNS domains and these are the errors:

Without bridge (hns.is or hns.to):
502 Bad Gateway

With bridge (hns.is or hns.to)
504 Gateway Timeout

Additional Information:

I use Mozilla Firefox.
Ubuntu 22.04 LTS.

Thank you for your attention.

Lookup fails if AAAA Servfails

My nameserver is resolving A records properly but servfailing on AAAA queries (woops). Fingertip gives me dns lookup failed (rcode: servfail). It would be nice if Fingertip just used the A record and ignored the AAAA servfail, in case others also have partially broken nameservers.

Feature request: conflict resolution

Hey ๐Ÿ––

A common question on Handshake community is: "What about conflicts with ICANN new TLDs?"
The answer for that is something like "you should use a DNS that pick the one you prefer"

Could we have a setting page on Fingertip where we could set that?
IE: Add .music to the skip list, which would resolve it as ICANN

symbol lookup error

downloads/Fingertip-v0.0.3.AppImage: symbol lookup error: /lib64/libgio-2.0.so.0: undefined symbol: g_module_open_full```

Fedora 35 using GNOME 41.1 on Wayland. 

Settings schema 'org.gnome.settings-daemon.plugins.xsettings' does not contain a key named 'antialiasing'

Here's what I get when trying to run the AppImage on Fedora 34:

Backtrace

(Fingertip-v0.0.3.AppImage:78150): GLib-GIO-ERROR **: 10:52:21.783: Settings schema 'org.gnome.settings-daemon.plugins.xsettings' does not contain a key named 'antialiasing'
SIGTRAP: trace trap
PC=0x7f8888e74f7f m=0 sigcode=128
signal arrived during cgo execution

goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x8ef5b0, 0xc000173e58)
runtime/cgocall.go:156 +0x5c fp=0xc000173e30 sp=0xc000173df8 pc=0x4073dc
github.com/getlantern/systray._Cfunc_registerSystray()
_cgo_gotypes.go:144 +0x45 fp=0xc000173e58 sp=0xc000173e30 pc=0x8ea7c5
github.com/getlantern/systray.registerSystray(...)
github.com/getlantern/[email protected]/systray_nonwindows.go:19
github.com/getlantern/systray.Register(0xc000498020, 0xc000498010)
github.com/getlantern/[email protected]/systray.go:106 +0x14b fp=0xc000173e80 sp=0xc000173e58 pc=0x8e9acb
github.com/getlantern/systray.Run(0x8f0d180, 0xc000288ae0)
github.com/getlantern/[email protected]/systray.go:77 +0x19 fp=0xc000173ea0 sp=0xc000173e80 pc=0x8e9939
fingertip/internal/ui.Loop(...)
fingertip/internal/ui/tray.go:23
main.main()
fingertip/main.go:297 +0x76c fp=0xc000173f80 sp=0xc000173ea0 pc=0x8ed50c
runtime.main()
runtime/proc.go:255 +0x227 fp=0xc000173fe0 sp=0xc000173f80 pc=0x43b7c7
runtime.goexit()
runtime/asm_amd64.s:1581 +0x1 fp=0xc000173fe8 sp=0xc000173fe0 pc=0x469401

goroutine 6 [chan receive]:
github.com/rjeczalik/notify.(*nonrecursiveTree).dispatch(0xc000070b40, 0x0)
github.com/rjeczalik/[email protected]/tree_nonrecursive.go:36 +0x49
created by github.com/rjeczalik/notify.newNonrecursiveTree
github.com/rjeczalik/[email protected]/tree_nonrecursive.go:29 +0x16f

goroutine 7 [chan receive]:
github.com/rjeczalik/notify.(*nonrecursiveTree).internal(0xc000070b40, 0xc000070ae0)
github.com/rjeczalik/[email protected]/tree_nonrecursive.go:81 +0x5a
created by github.com/rjeczalik/notify.newNonrecursiveTree
github.com/rjeczalik/[email protected]/tree_nonrecursive.go:30 +0x1c8

goroutine 10 [IO wait]:
internal/poll.runtime_pollWait(0x7f885c080870, 0x72)
runtime/netpoll.go:229 +0x89
internal/poll.(*pollDesc).wait(0xc000324080, 0xc000328000, 0x0)
internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000324080, {0xc000328000, 0x1000, 0x1000})
internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc000324080, {0xc000328000, 0x7f885c037ed8, 0x59})
net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc0001ee028, {0xc000328000, 0x7f885c037e01, 0xc0001ee028})
net/net.go:183 +0x45
github.com/miekg/dns.(*Conn).Read(0xc0001da090, {0xc000328000, 0xc0001ee028, 0x1083240})
github.com/miekg/[email protected]/client.go:276 +0x149
github.com/miekg/dns.(*Conn).ReadMsgHeader(0xc0001da090, 0x0)
github.com/miekg/[email protected]/client.go:240 +0xbf
github.com/miekg/dns.(*Conn).ReadMsg(0xc0001da090)
github.com/miekg/[email protected]/client.go:202 +0x27
github.com/miekg/dns.(*Client).exchange(0x1002340, 0xc0001d7f10, 0xc0001da090)
github.com/miekg/[email protected]/client.go:188 +0x18d
github.com/miekg/dns.(*Client).ExchangeWithConn.func1()
github.com/miekg/[email protected]/client.go:158 +0x25
github.com/miekg/dns.(*singleflight).Do(0x1002398, {0xc0001e81a0, 0xc}, 0xc0001d7d30)
github.com/miekg/[email protected]/singleinflight.go:51 +0x19a
github.com/miekg/dns.(*Client).ExchangeWithConn(0x1002340, 0xc0001d7f10, 0xc0001da090)
github.com/miekg/[email protected]/client.go:157 +0x177
github.com/miekg/dns.(*Client).Exchange(0x99e060, 0xc0001e8001, {0xa08ded, 0x644438})
github.com/miekg/[email protected]/client.go:135 +0xe9
fingertip/internal/config.exchangeWithRetry(0xc0001d7f10, {0xc0001d7ee0, 0x3, 0x1})
fingertip/internal/config/debug.go:114 +0xb4
fingertip/internal/config.testDNSInterference()
fingertip/internal/config/debug.go:74 +0x1c5
fingertip/internal/config.(*Debugger).NewProbe.func1()
fingertip/internal/config/debug.go:168 +0x26
created by fingertip/internal/config.(*Debugger).NewProbe
fingertip/internal/config/debug.go:167 +0xb5

goroutine 11 [select]:
main.main.func5()
fingertip/main.go:214 +0xfc
created by main.main
fingertip/main.go:212 +0x645

goroutine 12 [chan receive]:
github.com/getlantern/systray.Register.func2()
github.com/getlantern/[email protected]/systray.go:93 +0x28
created by github.com/getlantern/systray.Register
github.com/getlantern/[email protected]/systray.go:92 +0xc8

rax 0x0
rbx 0x1
rcx 0x1
rdx 0x7f8883698a00
rdi 0x7
rsi 0x7f8888e140a0
rbp 0x0
rsp 0x7ffd18d73590
r8 0x0
r9 0x7f8888db04e0
r10 0x7f8888db03e0
r11 0x293
r12 0x4
r13 0x7ffd18d735e0
r14 0x7f8888f51d40
r15 0x7f8888f51db0
rip 0x7f8888e74f7f
rflags 0x202
cs 0x33
fs 0x0
gs 0x0

Fingertip Status: DNS Interference Test

I've installed fingertip on Ubuntu 20.04 LTS and followed the instruction based on manual setup. When i tried to check the status, it showed an error. (DNS Interference Test: Failed)

Error: "Your network appears to intercept and redirect outgoing DNS requests"

additional info: i used Mozilla Browser

Implement Broad ENS/EIP-137 support via HIP-5 by using POKT

The https://www.pokt.network enables access to decentralized EVM network nodes that enable the node operators to get paid like farmers, stakers, or miners.

The current HIP 5 standard requires additional plugins for every network, and registering handles. Instead, a TXT record should be used to define the network, query it, and talk to a contract from that point on. Plugins should not need to register handles to define nets since this can mean needing to know a list of all networks ahead of time and adds in code and DevOps redundancy in the effort.

https://forum.pokt.network/t/idea-integrating-pokt-with-handshake-domains-hns-and-opera/1578/2 can provide more information, but it also focuses on opera and hnsd.

The end result should be a HIP5 compliant plugin (and modify the spec if needed), that allows you to define a network, and a contract address and have it get a node that's not infura in a decentralized way, compensate the operator, and talk to the contract.

Insecure Proxy

Could an option be added to allow for fingertip to be used over a secure local proxy?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.