Last active
September 18, 2023 15:33
-
-
Save vicariousdrama/dc2633396354b701e888ef69f360c5b0 to your computer and use it in GitHub Desktop.
A script for dropping connections from old version nodes or other characteristics
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This script is written for linux. | |
1. Download the file | |
2. Review it | |
nano ./dropnonusefulnodes.sh | |
3. Mark it as executable `chmod +x dropnonusefulnodes.sh` | |
4. Run it | |
./dropnonusefulnodes.sh | |
CTRL+C to stop it. | |
If you want to run as a background service, you can start with the basic template | |
file dropnonusefulnodes.service. You will need to change the user and ExecStart | |
to match wherever you've downloaded the script. The user needs to already have | |
access to the bitcoin-cli command, and the script assumes it can make local | |
calls. | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# dropnonusefulnodes systemd unit to kick nodes that you dont like | |
# /etc/systemd/system/dropnonusefulnodes.service | |
[Unit] | |
Description=Drop connections to non-useful bitcoin nodes | |
StartLimitIntervalSec=600 | |
StartLimitBurst=2 | |
Wants=bitcoind.service | |
After=bitcoind.service | |
[Service] | |
WorkingDirectory=/home | |
ExecStart=/home/admin/dropnonusefulnodes.sh | |
User=admin | |
Restart=on-failure | |
RestartSec=30 | |
PermissionsStartOnly=true | |
[Install] | |
WantedBy=multi-user.target |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
timedelay=30 | |
dropordisrespector=1 | |
dropknots=1 | |
dropapollo=1 | |
dropold=1 | |
dropothers=0 | |
myversion=$(bitcoin-cli getnetworkinfo | jq -r .subversion) | |
# start our loop | |
while true; do | |
j=$(bitcoin-cli getpeerinfo) | |
# Drop any node that doesnt match my version | |
if [[ $dropothers -eq 1 ]]; then | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("'${myversion}'")|not)|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
fi | |
# Disconnect any node that is an Ordisrespector | |
if [[ $dropordisrespector -eq 1 ]]; then | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Ordisrespector"))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
fi | |
# Disconnect any node that is running Bitcoin Knots | |
if [[ $dropknots -eq 1 ]]; then | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Knots"))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
fi | |
# Disconnect any node that is running Apollo | |
if [[ $dropapollo -eq 1 ]]; then | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("FutureBit-Apollo-Node"))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
fi | |
# Disconnect any node that is an old vulnerable version | |
if [[ $dropold -eq 1 ]]; then | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.21."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.20."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.19."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.18."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.17."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.16."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.15."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.14."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.13."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.12."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.11."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.10."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.9."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
for a in $(echo "${j}"|jq -r '.[]|select(.subver | contains("Satoshi:0.8."))|.addr'); do | |
bitcoin-cli disconnectnode ${a} | |
done | |
fi | |
# give it a rest for a bit | |
sleep ${timedelay} | |
done | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment