├── base.html ├── node_script.html ├── bottom.html ├── COPYING ├── README.md ├── domain_node.sh ├── moneriote.sh ├── moneriote.sh.old ├── nodes.html └── nodes_base.html /base.html: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 2 | Version 2, December 2004 3 | 4 | Copyright (C) 2004 Sam Hocevar 5 | 6 | Everyone is permitted to copy and distribute verbatim or modified 7 | copies of this license document, and changing it is allowed as long 8 | as the name is changed. 9 | 10 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 11 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 12 | 13 | 0. You just DO WHAT THE FUCK YOU WANT TO. 14 | 15 | 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # moneriote 2 | ## Portmanteu of Monero + Symbiote 3 | ### A symbiotic relationship exists between those that run open nodes and those that use them. 4 | 5 | Scripts to maintain a database of monero nodes with their RPC ports open 6 | 7 | There will be so much bash it won't be funny. 8 | 9 | License: http://www.wtfpl.net/ 10 | 11 | Contributions welcome. All PRs will be considered. Make a branch, write it in a different language. :) 12 | 13 | 14 | Copyright © 2017 Gingeropolous 15 | This work is free. You can redistribute it and/or modify it under the 16 | terms of the Do What The Fuck You Want To Public License, Version 2, 17 | as published by Sam Hocevar. See the COPYING file for more details. 18 | 19 | # DEPENDENCIES 20 | 21 | Developed and runs fine on Ubuntu 16 22 | Bash 23 | Monero daemon (monerod) in /bin/ 24 | a folder called ~/files_moneriote with the test wallet files located their. The script makes these 25 | a love of bash 26 | curl 27 | netcat 28 | dnsutils 29 | 30 | sudo apt-get install dnsutils curl netcat 31 | 32 | # Crontab entry 33 | 0,30 * * * * /home/monero/moneriote/moneriote.sh > /home/monero/files_moneriote/lastrun.log 2>&1 34 | 35 | -------------------------------------------------------------------------------- /domain_node.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Gingeropolous Open node checker 3 | 4 | 5 | DIR=/home/main12/files_moneriote 6 | 7 | 8 | monerod=monerod 9 | daemon=192.168.1.2 10 | 11 | DOMAIN=node.moneroworld.com 12 | html_dir=/var/www/mine.moneroworld.com/public_html/pages/ 13 | 14 | echo $monerod 15 | echo $daemon 16 | 17 | ### 18 | cd /home/main12/moneriote 19 | mkdir $DIR 20 | cd $DIR 21 | 22 | echo `date` "The domain script started" >> dom_nodes.txt 23 | echo `date` "Good nodes" >> good_dom_nodes.txt 24 | echo `date` "Bad nodes" >> bad_dom_nodes.txt 25 | 26 | ### Begin header of random thinger 27 | 28 | ### Check Existing DNS entries for any to remove 29 | ### Kind of stupid right now because I can't update a DNS entry 30 | 31 | export IPs=`dig $DOMAIN | grep $DOMAIN | grep -v ';' | awk '{ print $5 }'`; 32 | export arr=($IPs) 33 | 34 | for i in "${arr[@]}" 35 | do 36 | : 37 | if nc -z -w 4 $i 18089 38 | then 39 | echo "$i is up" 40 | opennodes+=($i) 41 | else 42 | echo "$i is down" 43 | closednodes+=($i) 44 | fi 45 | done 46 | 47 | echo "open Nodes" 48 | echo ${opennodes[@]} #>> dom_nodes.txt 49 | echo "closed nodes" 50 | echo ${closednodes[@]} #>> dom_nodes.txt 51 | echo "##############" 52 | echo "Check network white nodes for domains to add" 53 | 54 | white_a=($opennodes) 55 | 56 | 57 | 58 | #white_a=(${white_a// / }) 59 | 60 | #white_a=' ' read -r -a array <<< "$opennodes" 61 | 62 | echo ${white_a[@]} 63 | echo "################" 64 | echo "Number of domain nodes: "${#white_a[@]} #>> dom_nodes.txt 65 | 66 | 67 | echo "#############" 68 | echo "Starting loop" 69 | 70 | ctr=1 71 | 72 | for i in "${opennodes[@]}" 73 | do 74 | : 75 | echo "Checking ip: "$i 76 | l_hit="$(curl -X POST http://$daemon:18089/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 77 | r_hit="$(curl -m 20 -X POST http://$i:18089/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 78 | echo "Local Height: "$l_hit 79 | echo "Remote Height: "$r_hit 80 | mini=$(( $l_hit-10 )) 81 | echo "minimum is " $mini 82 | maxi=$(( $l_hit+10 )) 83 | echo "max is " $maxi 84 | if [[ "$r_hit" == "$l_hit" ]] || [[ "$r_hit" > "$mini" && "$r_hit" < "$maxi" ]] 85 | then 86 | echo "################################# Daemon $i is good" #>> dom_nodes.txt 87 | ### Time to write these good ips to a file of some sort! 88 | ### Apparently javascript needs some weird format in order to randomize, so I'll make two outputs 89 | echo $i >> good_dom_nodes.txt 90 | echo "myarray[$ctr]= \"$i\";" >> node_script.html 91 | let ctr=ctr+1 92 | else 93 | echo " !!!!!!!!!!!!!!!!!! Daemon $i is closed" # >> dom_nodes.txt 94 | echo $i >> bad_dom_nodes.txt 95 | fi 96 | done 97 | 98 | echo "Number of domain nodes: $ctr" # >> dom_nodes.txt 99 | 100 | echo `date` "The Domain script finished" # >> dom_nodes.txt 101 | 102 | # http://stackoverflow.com/questions/16753876/javascript-button-to-pick-random-item-from-array 103 | # http://www.javascriptkit.com/javatutors/randomorder.shtml 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /moneriote.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Gingeropolous Open node checker 3 | 4 | # This is the directory where files are written to. 5 | # If you run as a cronjob, you have to use the full path 6 | DIR=/home/main12/files_moneriote 7 | 8 | # This is the path for your monerod binary. 9 | monerod=monerod 10 | 11 | # This is the ip of your local daemon. If you're not running an open node, 127.0.0.1 is fine. 12 | daemon=192.168.1.2 13 | 14 | #Where your going to dump the file that will be published 15 | html_dir=/var/www/mine.moneroworld.com/public_html/pages/ 16 | 17 | # Bound rpc port 18 | bport=18089 19 | 20 | #Port to sniff for 21 | port=18089 22 | 23 | echo $monerod 24 | echo $daemon 25 | 26 | ### 27 | 28 | mkdir $DIR 29 | cp /home/main12/moneriote/*.html $DIR 30 | cd $DIR 31 | rm open_nodes.txt 32 | rm nodes.html 33 | cp nodes_base.html nodes.html 34 | 35 | ### Begin header of random thinger 36 | 37 | cp base.html node_script.html 38 | 39 | echo "##############" 40 | echo "Check network white nodes for domains to add" 41 | 42 | white=$($monerod --rpc-bind-ip $daemon --rpc-bind-port $bport print_pl | grep white | awk '{print $3}' | cut -f 1 -d ":") 43 | 44 | 45 | white_a=($white) 46 | echo ${white_a[@]} 47 | echo "################" 48 | echo ${#white_a[@]} 49 | 50 | echo "#############" 51 | echo "Starting loop" 52 | 53 | ctr=0 54 | 55 | echo "Number of nodes: "${#white_a[@]} >> moneriote.log 56 | 57 | 58 | #Comment out to check within the loop, and uncomment the one below 59 | l_hit="$(curl -X POST http://$daemon:$bport/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 60 | 61 | for i in "${white_a[@]}" 62 | do 63 | : 64 | echo "Checking ip: "$i 65 | #Uncomment the below to check within the loop 66 | #l_hit="$(curl -X POST http://$daemon:$bport/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 67 | r_hit="$(curl -m 0.5 -X POST http://$i:$port/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 68 | echo "Local Height: "$l_hit 69 | echo "Remote Height: "$r_hit 70 | mini=$(( $l_hit-10 )) 71 | echo "minimum is " $mini 72 | maxi=$(( $l_hit+10 )) 73 | echo "max is " $maxi 74 | if [[ "$r_hit" == "$l_hit" ]] || [[ "$r_hit" > "$mini" && "$r_hit" < "$maxi" ]] && [[ -n $r_hit ]] && [[ -n $l_hit ]] 75 | then 76 | echo "################################# Daemon $i is good" 77 | ### Time to write these good ips to a file of some sort! 78 | ### Apparently javascript needs some weird format in order to randomize, so I'll make two outputs 79 | echo $i >> open_nodes.txt 80 | echo "myarray[$ctr]= \"$i\";" >> node_script.html 81 | let ctr=ctr+1 82 | elif [[ $r_hit ]] || [[ $l_hit ]]; then 83 | echo "Either the local or remote is dead" 84 | else 85 | echo "$i is closed" 86 | fi 87 | done 88 | 89 | cat bottom.html >> node_script.html 90 | cat node_script.html >> nodes.html 91 | 92 | echo `date` "The script finished" >> moneriote.log 93 | 94 | sudo cp nodes.html $html_dir/ 95 | 96 | # http://stackoverflow.com/questions/16753876/javascript-button-to-pick-random-item-from-array 97 | # http://www.javascriptkit.com/javatutors/randomorder.shtml 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /moneriote.sh.old: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Gingeropolous Open node checker 3 | 4 | # This is the directory where files are written to. 5 | # If you run as a cronjob, you have to use the full path 6 | DIR=/home/monero/files_moneriote 7 | 8 | # This is the path for your monerod binary. 9 | monerod=monerod 10 | 11 | daemon=107.172.25.35 12 | 13 | DOMAIN=node.moneroworld.com 14 | html_dir=/var/www/mine.moneroworld.com/public_html/pages/ 15 | 16 | 17 | 18 | # This is the ip of your local daemon. If you're not running an open node, 127.0.0.1 is fine. 19 | 20 | # if you want to check or pull a DNS entry 21 | 22 | #Where your going to dump the file that will be published 23 | 24 | echo $monerod 25 | echo $daemon 26 | 27 | ### 28 | 29 | mkdir $DIR 30 | cp *.html $DIR 31 | cd $DIR 32 | 33 | echo `date` "The script started" >> moneriote.log 34 | 35 | 36 | rm open_nodes.txt 37 | rm nodes.html 38 | cp nodes_base.html nodes.html 39 | 40 | 41 | 42 | ### Begin header of random thinger 43 | 44 | cp base.html node_script.html 45 | 46 | ### Check Existing DNS entries for any to remove 47 | ### Kind of stupid right now because I can't update a DNS entry 48 | 49 | export IPs=`dig $DOMAIN | grep $DOMAIN | grep -v ';' | awk '{ print $5 }'`; 50 | export arr=($IPs) 51 | # declare -a opennodes 52 | # declare -a closednodes 53 | 54 | for i in "${arr[@]}" 55 | do 56 | : 57 | if nc -z -w 4 $i 18081 58 | then 59 | echo "$i is up" 60 | opennodes+=($i) 61 | else 62 | echo "$i is down" 63 | closednodes+=($i) 64 | fi 65 | done 66 | 67 | echo ${opennodes[@]} 68 | 69 | echo "Number of nodes: "${#white_a[@]} >> moneriote.log 70 | 71 | echo "##############" 72 | echo "Check network white nodes for domains to add" 73 | 74 | 75 | 76 | white=$($monerod --rpc-bind-ip $daemon print_pl | grep white | awk '{print $3}' | cut -f 1 -d ":") 77 | white_a=($white) 78 | white_a+=($opennodes) 79 | echo ${white_a[@]} 80 | echo "################" 81 | echo ${#white_a[@]} 82 | 83 | echo "#############" 84 | echo "Starting loop" 85 | 86 | ctr=0 87 | 88 | for i in "${white_a[@]}" 89 | do 90 | : 91 | echo "Checking ip: "$i 92 | l_hit="$(curl -X POST http://$daemon:18081/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 93 | r_hit="$(curl -m 0.5 -X POST http://$i:18081/getheight -H 'Content-Type: application/json' | grep height | cut -f 2 -d : | cut -f 1 -d ,)" 94 | echo "Local Height: "$l_hit 95 | echo "Remote Height: "$r_hit 96 | mini=$(( $l_hit-10 )) 97 | echo "minimum is " $mini 98 | maxi=$(( $l_hit+10 )) 99 | echo "max is " $maxi 100 | if [[ "$r_hit" == "$l_hit" ]] || [[ "$r_hit" > "$mini" && "$r_hit" < "$maxi" ]] 101 | then 102 | echo "################################# Daemon $i is good" 103 | ### Time to write these good ips to a file of some sort! 104 | ### Apparently javascript needs some weird format in order to randomize, so I'll make two outputs 105 | echo $i >> open_nodes.txt 106 | echo "myarray[$ctr]= \"$i\";" >> node_script.html 107 | let ctr=ctr+1 108 | else 109 | echo "$i is closed" 110 | fi 111 | done 112 | 113 | 114 | cat bottom.html >> node_script.html 115 | cat node_script.html >> nodes.html 116 | 117 | echo `date` "The script finished" >> moneriote.log 118 | 119 | sudo cp nodes.html $html_dir/ 120 | 121 | # http://stackoverflow.com/questions/16753876/javascript-button-to-pick-random-item-from-array 122 | # http://www.javascriptkit.com/javatutors/randomorder.shtml 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /nodes.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Moneroworld Open Nodes

4 |

What is an Open Node?

5 |

Use these at your own risk!

6 |

The Monero software architecture allows for an easy way to use Monero without downloading the entire blockchain. 7 | This is called "using a remote node". Essentially, your wallet program connects to someone elses monerod (blockchain) program, a.k.a "node" a.k.a. network service

8 |

It is somewhat slower, and there is some information leak, as detailed here.

9 |

That being said, no one can steal your monero because you use a remote node.

10 |

You should really run your own node

11 |

Its honestly not that hard - it can take 40 minutes to synchronize if you have a SSD and a good internet connection. Also, these remote nodes are NOT reliable. A lot of times they just won't connect, because the software really wasn't made for this.

12 |

Download your node software here: GetMonero.org and learn how to run the software here

13 |
14 |

MoneroWorld maintains two different collections of open nodes. One is a collection of random nodes - anyone can offer their node up for inclusion, and MoneroWorld will detect it and include it. These are the Random Nodes seen below.

15 |

The second type of open node are those listed as web addresses, like node.moneroworld.com. There are limited nodes in these addresses, and their status isn't checked (yet). So they may be down.

16 |

Please consider donating if you use these open nodes.

17 |

I run some of them, others run others.

18 |

44UW4sPKb4XbWHm8PXr6K8GQi7jUs9i7t2mTsjDn2zK7jYZwNERfoHaC1Yy4PYs1eTCZ9766hkB6RLUf1y95EvCQNpCZnuu

19 |

Random Nodes!

20 |

MoneroWorld runs a script every 30 minutes to scan the Monero network for open nodes. Click the button to get an IP address of a random one!

21 | 22 |

Note that these nodes use port 18089, not the standard 18081.

23 |

Press The Button!

24 |

There are this many random nodes available

25 |
26 |

To use with monero-wallet-cli, just use these commands

27 |

Windows

28 |

monero-wallet-cli.exe --daemon-address ADDRESS.OF.HOST:18089

29 |

Unix-type (ubuntu, MacOS)

30 |

./monero-wallet-cli --daemon-address ADDRESS.OF.HOST:18089

31 |
32 |

Monero GUI

33 |

To use with the Monero GUI, enter the node address here (or the ip address). Be sure to enter the proper port! 34 | 35 | 36 |

Non-random Moneroworld Open Node Addresses

37 | 38 |

How does it work? the open node addresses actually point to many different nodes - when you request one, one in the list is selected. So if it doesn't work once, just try again.

39 |
40 |

--daemon-host node.xmrbackb.one

41 |

A high speed node network maintained by Snipa, developer and maintainer of xmrpool.net

42 |

--daemon-host node.moneroworld.com

43 |

Largest list of open nodes. This includes the geo-located nodes below.

44 |

--daemon-host europe.moneroworld.com

45 |

Nodes in Europe.

46 |

--daemon-host useast.moneroworld.com

47 |

Nodes in US Eastern

48 |

--daemon-host uswest.moneroworld.com

49 |

Nodes in US Western

50 |

--daemon-host southafrica.moneroworld.com

51 |

Nodes in South Africa

52 | 53 |
54 | 55 |

If you would like to offer your node up for inclusion in the Moneroworld Network of Open Nodes, you have two options.

56 |

Option 1: you can simply add the following code to the launch of your daemon (and open your firewall), and the MoneroWorld script will sniff you out and add your node to the random list

57 |

--rpc-bind-ip YOUR.EXTERNAL_IP.GOES.HERE --rpc-bind-port 18089 --restricted-rpc --confirm-external-bind

58 |

Option 2: You can ask to be added to one of the address collection. There is limited space in these, so I only add high reliability nodes. You still need to launch your daemon with some special flags, and then please email me at gingeropolous@tutanota.com to ask me to add the node.

59 |

--rpc-bind-ip YOUR.EXTERNAL_IP.GOES.HERE --rpc-bind-port 18081 --restricted-rpc --confirm-external-bind

60 |
61 |

Run the script on your own daemon! 62 |

Hidden Nodes

63 |

i2p: gyzyfxa6y2ayqbycvci3dz2pc2tjf6rnkcttvb3aubtxawkrmg5q.b32.i2p

64 |

Please consider only using this to push transactions and not full wallet synchronization.

65 |

monerotools.i2p also has a raw transaction pusher

66 |
67 |

Tor remote nodes

68 |

monerowinfamlvkp.onion

69 | -------------------------------------------------------------------------------- /nodes_base.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Moneroworld Open Nodes

4 |

What is an Open Node?

5 |

Use these at your own risk!

6 |

The Monero software architecture allows for an easy way to use Monero without downloading the entire blockchain. 7 | This is called "using a remote node". Essentially, your wallet program connects to someone elses monerod (blockchain) program, a.k.a "node" a.k.a. network service

8 |

It is somewhat slower, and there is some information leak, as detailed here.

9 |

That being said, no one can steal your monero because you use a remote node.

10 |

You should really run your own node

11 |

Its honestly not that hard - it can take 40 minutes to synchronize if you have a SSD and a good internet connection. Also, these remote nodes are NOT reliable. A lot of times they just won't connect, because the software really wasn't made for this.

12 |

Download your node software here: GetMonero.org and learn how to run the software here

13 |
14 |

MoneroWorld maintains two different collections of open nodes. One is a collection of random nodes - anyone can offer their node up for inclusion, and MoneroWorld will detect it and include it. These are the Random Nodes seen below.

15 |

The second type of open node are those listed as web addresses, like node.moneroworld.com. There are limited nodes in these addresses, and their status isn't checked (yet). So they may be down.

16 |

Please consider donating if you use these open nodes.

17 |

I run some of them, others run others.

18 |

44UW4sPKb4XbWHm8PXr6K8GQi7jUs9i7t2mTsjDn2zK7jYZwNERfoHaC1Yy4PYs1eTCZ9766hkB6RLUf1y95EvCQNpCZnuu

19 |

Random Nodes!

20 |

MoneroWorld runs a script every 30 minutes to scan the Monero network for open nodes. Click the button to get an IP address of a random one!

21 | 22 |

Note that these nodes use port 18089, not the standard 18081.

23 |

Press The Button!

24 |

There are this many random nodes available

25 |
26 |

To use with monero-wallet-cli, just use these commands

27 |

Windows

28 |

monero-wallet-cli.exe --daemon-address ADDRESS.OF.HOST:18089

29 |

Unix-type (ubuntu, MacOS)

30 |

./monero-wallet-cli --daemon-address ADDRESS.OF.HOST:18089

31 |
32 |

Monero GUI

33 |

To use with the Monero GUI, enter the node address here (or the ip address). Be sure to enter the proper port! 34 | 35 | 36 |

Non-random Moneroworld Open Node Addresses

37 | 38 |

How does it work? the open node addresses actually point to many different nodes - when you request one, one in the list is selected. So if it doesn't work once, just try again.

39 |
40 |

--daemon-host node.xmrbackb.one

41 |

A high speed node network maintained by Snipa, developer and maintainer of xmrpool.net

42 |

--daemon-host node.moneroworld.com

43 |

Largest list of open nodes. This includes the geo-located nodes below.

44 |

--daemon-host europe.moneroworld.com

45 |

Nodes in Europe.

46 |

--daemon-host useast.moneroworld.com

47 |

Nodes in US Eastern

48 |

--daemon-host uswest.moneroworld.com

49 |

Nodes in US Western

50 |

--daemon-host southafrica.moneroworld.com

51 |

Nodes in South Africa

52 | 53 |
54 | 55 |

If you would like to offer your node up for inclusion in the Moneroworld Network of Open Nodes, you have two options.

56 |

Option 1: you can simply add the following code to the launch of your daemon (and open your firewall), and the MoneroWorld script will sniff you out and add your node to the random list

57 |

--rpc-bind-ip YOUR.EXTERNAL_IP.GOES.HERE --rpc-bind-port 18089 --restricted-rpc --confirm-external-bind

58 |

Option 2: You can ask to be added to one of the address collection. There is limited space in these, so I only add high reliability nodes. You still need to launch your daemon with some special flags, and then please email me at gingeropolous@tutanota.com to ask me to add the node.

59 |

--rpc-bind-ip YOUR.EXTERNAL_IP.GOES.HERE --rpc-bind-port 18081 --restricted-rpc --confirm-external-bind

60 |
61 |

Run the script on your own daemon! 62 |

Hidden Nodes

63 |

i2p: gyzyfxa6y2ayqbycvci3dz2pc2tjf6rnkcttvb3aubtxawkrmg5q.b32.i2p

64 |

Please consider only using this to push transactions and not full wallet synchronization.

65 |

monerotools.i2p also has a raw transaction pusher

66 |
67 |

Tor remote nodes

68 |

monerowinfamlvkp.onion

69 | --------------------------------------------------------------------------------