Skip to content

Instantly share code, notes, and snippets.

@vicariousdrama
Last active September 18, 2023 15:33
Show Gist options
  • Save vicariousdrama/dc2633396354b701e888ef69f360c5b0 to your computer and use it in GitHub Desktop.
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 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.
# 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
#!/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