From 432acf6bf5cd42025a63266e77bacd8c5256c0a5 Mon Sep 17 00:00:00 2001 From: kaotisk Date: Mon, 24 Jun 2024 04:00:36 +0300 Subject: ak-network: script to handle connectivity ```bash ak-network - AK Nettool ======================= Network tools Usage: -h, --help Prints this help message -s, --scan [ipfs|cjdns|stellar] Scan network(s) for peers -c, --connect [ipfs|cjdns] Connect to network(s) -p, --peers [ipfs|cjdns|stellar] Outputs peers found 1719190884 [ERROR] ak-network command finished (1) ``` Functions introduced or refactored: - _ak_network_cjdns_scanner - _ak_network_stellar_show_ids - _ak_network_stellar_get_next_page - _ak_network_stellar_proceed_to_next_page - _ak_network_stellar_get_asset_holders - _ak_network_scan_stellar - _ak_network_scan_ipfs - _ak_network_scan_cjdns - _ak_network_scan - _ak_network_show_peers_stellar - _ak_network_show_peers_cjdns - _ak_network_show_peers_ipfs - _ak_network_show_peers - _ak_network_ipfs_connect_bootstrap - _ak_network_cjdns_connect - _ak_network_cjdns_connect_bootstrap - _ak_network_connect --- bin/ak-cjdns-scanner | 52 ------- bin/ak-network | 37 ++++- bin/ak-peers-get-cjdns | 2 - bin/ak-peers-get-stellar | 18 --- bin/ak-stellar-get-participants | 111 -------------- lib/_ak_network | 315 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 348 insertions(+), 187 deletions(-) delete mode 100755 bin/ak-cjdns-scanner delete mode 100755 bin/ak-peers-get-cjdns delete mode 100755 bin/ak-peers-get-stellar delete mode 100755 bin/ak-stellar-get-participants create mode 100755 lib/_ak_network diff --git a/bin/ak-cjdns-scanner b/bin/ak-cjdns-scanner deleted file mode 100755 index 044670b..0000000 --- a/bin/ak-cjdns-scanner +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# -# Needs CJDNS tools in your PATH -# -# Ref: https://github.com/cjdelisle/cjdns -# -which dumpLinks > /dev/null 2>&1 -if [ $? -ne 0 ] -then - echo "You need to install cjdns and cjdns-tools" - exit 1 -fi - -which publictoip6 > /dev/null 2>&1 -if [ $? -ne 0 ] -then - echo "You need to install cjdns and cjdns-tools" - exit 1 -fi - -TEMPDIR="$(mktemp -d)" -AK_ZPEERSFILE="$HOME/.arching-kaos/peersFile" -cd $TEMPDIR -counter=0 -printf '[' > walk.aknet -dumpLinks \ - | cut -d ' ' -f 2,4 \ - | sed 's/ /\n/g' \ - | sort \ - | uniq \ - | while read -r ip || [ -n "$ip" ] -do - node_info="$(curl \ - --connect-timeout 3 \ - -A 'akd/0.1.0; https://github.com/arching-kaos' \ - "http://[$(publictoip6 $ip)]:8610/v0/node_info" 2>/dev/null | jq -c -M)" - if [ $? -eq 0 ] && [ $(echo -n "$node_info" | wc -c) -gt 0 ] - then - if [ "$counter" -ne "0" ] - then - printf ',' >> walk.aknet - fi - printf '{"cjdns":{"public_key":"%s","ip":"%s"},"node_info":%s}' \ - "$ip" "`publictoip6 $ip`" "$node_info" >> walk.aknet - counter="`expr $counter + 1`" - fi -done -printf ']' >> walk.aknet - -mv walk.aknet $AK_ZPEERSFILE - -rm -rf $TEMPDIR diff --git a/bin/ak-network b/bin/ak-network index c506879..26d4e3e 100755 --- a/bin/ak-network +++ b/bin/ak-network @@ -1,5 +1,34 @@ #!/bin/bash -while true -do - cat $ZLATEST | nc -lv 127.0.0.1 5050 -done +## +## Network tools +## +## Usage: +## +## -h, --help Prints this help message +## +## -s, --scan [ipfs|cjdns|stellar] Scan network(s) for peers +## +## -c, --connect [ipfs|cjdns] Connect to network(s) +## +## -p, --peers [ipfs|cjdns|stellar] Outputs peers found +## +fullprogrampath="$(realpath $0)" +PROGRAM=$(basename $0) +descriptionString="AK Nettool" + +# At least these +source $AK_LIBDIR/_ak_log +source $AK_LIBDIR/_ak_script +source $AK_LIBDIR/_ak_network + +# Flags to run +if [ ! -z $1 ]; then + case $1 in + -h | --help) _ak_usage; exit;; + -s | --scan) _ak_network_scan $2; exit;; + -c | --connect) _ak_network_connect $2; exit;; + -p | --peers) _ak_network_show_peers $2; exit;; + * ) _ak_usage;; + esac +else _ak_usage +fi diff --git a/bin/ak-peers-get-cjdns b/bin/ak-peers-get-cjdns deleted file mode 100755 index dee8af4..0000000 --- a/bin/ak-peers-get-cjdns +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -cat $AK_ZPEERSFILE | jq \ No newline at end of file diff --git a/bin/ak-peers-get-stellar b/bin/ak-peers-get-stellar deleted file mode 100755 index ec9eaa6..0000000 --- a/bin/ak-peers-get-stellar +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/bash -source $AK_LIBDIR/_ak_ipfs -stellarParticipants="$AK_WORKDIR/stellar-network-participants" -stellarParticipantsOnline="$AK_WORKDIR/stellar-network-participants-online" -( -printf '[' -counter=0 -cat $stellarParticipantsOnline | while read stellarAddress akConfig -do - if [ $counter -ne 0 ] - then - printf ',' - fi - counter=$(( $counter + 1 )) - printf '{"stellar":{"address":"%s","config":"%s"},"node_info":%s}' "$stellarAddress" "$akConfig" "$(_ak_ipfs_cat /ipns/$akConfig)" -done -printf ']' -) #| jq diff --git a/bin/ak-stellar-get-participants b/bin/ak-stellar-get-participants deleted file mode 100755 index 779e9e1..0000000 --- a/bin/ak-stellar-get-participants +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/bash -PROGRAM="$(basename $0)" -tempdir=`mktemp -d` -tempfile="$tempdir/tmp" -tempaddr="$tempdir/tmpaddr" -source $AK_LIBDIR/_ak_log - -stellarParticipants="$AK_WORKDIR/stellar-network-participants" -stellarParticipantsOnline="$AK_WORKDIR/stellar-network-participants-online" -if [ ! -f "$stellarParticipants" ] -then - touch $stellarParticipants -fi -if [ ! -f "$stellarParticipantsOnline" ] -then - touch $stellarParticipantsOnline -fi -if [ ! -f "$tempdir" ] -then - touch $tempdir -fi -if [ ! -f "$tempaddr" ] -then - touch $tempaddr -fi - -if [ ! -z $1 ] && [ "$1" == "-l" ] && [ ! -z $2 ] -then - limit=$2 -else - limit=3 -fi - -show_ids(){ - i=0 - flag=0 - while [ "$i" -lt "$limit" ] - do - test="$(cat $tempfile | jq '.["_embedded"]' | jq .'["records"]' | jq '.['$i']' | jq '.["id"]' | sed -e 's/\"//g')" - while IFS="" read -r p || [ -n "$p" ] - do - if [ "$p" == "$test" ] - then - flag=1 - break - fi - done < $stellarParticipants - if [ "$flag" == "0" ] - then - echo $test >> $stellarParticipants - _ak_log_info "Added $test" - else - _ak_log_info "$test already there. Skipping..." - fi - i="$(expr $i + 1)" - done -} - -get_next_page(){ - cat $tempfile | grep -1 next | grep https | sed -e 's/^.*https/https/' | sed -e 's/\u0026/\&/g; s/"//g; s/\\//g' -} - -proceed_to_next_page(){ - nextURL="$(get_next_page)" - curl \ - --connect-timeout 3 \ - "$nextURL" > $tempfile 2>/dev/null -} - -get_asset_holders(){ - curl \ - --connect-timeout 3 \ - https://horizon.stellar.org/accounts\?asset\=ARCHINGKAOS:GB4QVKD6NW3CSNO5TNPARAWNPPXOPSSTKB35XCWB7PUNBIQTK3DVELB2\&limit\=$limit > $tempfile 2>/dev/null -} - -get_asset_holders -while [ "$(tail -1 $stellarParticipants)" != "null" ] -do - show_ids - proceed_to_next_page -done - -grep G $stellarParticipants > $tempaddr -cat $tempaddr > $stellarParticipants -rm $tempfile $tempaddr -while IFS="" read -r p || [ -n "$p" ] -do - flag=0 - test="$(curl \ - --connect-timeout 3 \ - https://horizon.stellar.org/accounts/$p/data/config 2>/dev/null | grep value)" - if [ "$?" == 0 ] - then - addressValuePair="$(printf '%s %s\n' "$p" "$(echo $test | sed -e 's/^.*: "//g; s/"//g' | base64 -d)")" - while IFS="" read -r x || [ -n "$x" ] - do - if [ "$x" == "$addressValuePair" ] - then - flag=1 - break - fi - done < $stellarParticipantsOnline - if [ "$flag" == "0" ] - then - echo $addressValuePair >> $stellarParticipantsOnline - _ak_log_info "$p is configured with $(echo $addressValuePair | awk '{ print $2 }'). Added to online participants." - else - _ak_log_info "$(echo $addressValuePair | awk '{ print $2 }') is already in $stellarParticipantsOnline. Skipping..." - fi - fi -done < $stellarParticipants diff --git a/lib/_ak_network b/lib/_ak_network new file mode 100755 index 0000000..8c40f2b --- /dev/null +++ b/lib/_ak_network @@ -0,0 +1,315 @@ +#!/bin/bash +source $AK_LIBDIR/_ak_log +source $AK_LIBDIR/_ak_ipfs + +cjdnstoolspath="$HOME/cjdns/tools" + +_ak_network_cjdns_scanner(){ + # + # Needs CJDNS tools in your PATH + # + # Ref: https://github.com/cjdelisle/cjdns + # + which dumpLinks > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo "You need to install cjdns and cjdns-tools" + exit 1 + fi + + which publictoip6 > /dev/null 2>&1 + if [ $? -ne 0 ] + then + echo "You need to install cjdns and cjdns-tools" + exit 1 + fi + + TEMPDIR="$(mktemp -d)" + AK_ZPEERSFILE="$HOME/.arching-kaos/peersFile" + cd $TEMPDIR + counter=0 + printf '[' > walk.aknet + dumpLinks \ + | cut -d ' ' -f 2,4 \ + | sed 's/ /\n/g' \ + | sort \ + | uniq \ + | while read -r ip || [ -n "$ip" ] + do + node_info="$(curl \ + --connect-timeout 3 \ + -A 'akd/0.1.0; https://github.com/arching-kaos' \ + "http://[$(publictoip6 $ip)]:8610/v0/node_info" 2>/dev/null | jq -c -M)" + if [ $? -eq 0 ] && [ $(echo -n "$node_info" | wc -c) -gt 0 ] + then + if [ "$counter" -ne "0" ] + then + printf ',' >> walk.aknet + fi + if [ ! -n "$node_info" ] + then + node_info="null" + fi + printf '{"cjdns":{"public_key":"%s","ip":"%s"},"node_info":%s}' \ + "$ip" "`publictoip6 $ip`" "$node_info" >> walk.aknet + counter="`expr $counter + 1`" + fi + done + printf ']' >> walk.aknet + + mv walk.aknet $AK_ZPEERSFILE + + rm -rf $TEMPDIR +} + +_ak_network_stellar_show_ids(){ + i=0 + flag=0 + while [ "$i" -lt "$limit" ] + do + test="$(cat $tempfile | jq '.["_embedded"]' | jq .'["records"]' | jq '.['$i']' | jq '.["id"]' | sed -e 's/\"//g')" + while IFS="" read -r p || [ -n "$p" ] + do + if [ "$p" == "$test" ] + then + flag=1 + break + fi + done < $stellarParticipants + if [ "$flag" == "0" ] + then + echo $test >> $stellarParticipants + _ak_log_info "Added $test" + else + _ak_log_info "$test already there. Skipping..." + fi + i="$(expr $i + 1)" + done +} + +_ak_network_stellar_get_next_page(){ + cat $tempfile | jq -r '._links.next.href' + # cat $tempfile | grep -1 next | grep https | sed -e 's/^.*https/https/' | sed -e 's/\u0026/\&/g; s/"//g; s/\\//g' +} + +_ak_network_stellar_proceed_to_next_page(){ + nextURL="$(_ak_network_stellar_get_next_page)" + curl \ + --connect-timeout 3 \ + "$nextURL" > $tempfile 2>/dev/null +} + +_ak_network_stellar_get_asset_holders(){ + if [ ! -z $1 ] && [ $1 -gt 0 ] && [ -n "$1" ] + then + limit=$1 + else + limit=3 + fi + curl \ + --connect-timeout 3 \ + https://horizon.stellar.org/accounts\?asset\=ARCHINGKAOS:GB4QVKD6NW3CSNO5TNPARAWNPPXOPSSTKB35XCWB7PUNBIQTK3DVELB2\&limit\=$limit > $tempfile 2>/dev/null +} + +_ak_network_scan_stellar(){ + tempdir=`mktemp -d` + tempfile="$tempdir/tmp" + tempaddr="$tempdir/tmpaddr" + + stellarParticipants="$AK_WORKDIR/stellar-network-participants" + stellarParticipantsOnline="$AK_WORKDIR/stellar-network-participants-online" + if [ ! -f "$stellarParticipants" ] + then + touch $stellarParticipants + fi + if [ ! -f "$stellarParticipantsOnline" ] + then + touch $stellarParticipantsOnline + fi + if [ ! -f "$tempdir" ] + then + touch $tempdir + fi + if [ ! -f "$tempaddr" ] + then + touch $tempaddr + fi + + if [ ! -z $1 ] && [ "$1" == "-l" ] && [ ! -z $2 ] + then + limit=$2 + else + limit=3 + fi + + _ak_network_stellar_get_asset_holders $limit + while [ "$(tail -1 $stellarParticipants)" != "null" ] + do + _ak_network_stellar_show_ids + _ak_network_stellar_proceed_to_next_page + done + + grep G $stellarParticipants > $tempaddr + cat $tempaddr > $stellarParticipants + rm $tempfile $tempaddr + while IFS="" read -r p || [ -n "$p" ] + do + flag=0 + test="$(curl \ + --connect-timeout 3 \ + https://horizon.stellar.org/accounts/$p/data/config 2>/dev/null | grep value)" + if [ "$?" == 0 ] + then + addressValuePair="$(printf '%s %s\n' "$p" "$(echo $test | sed -e 's/^.*: "//g; s/"//g' | base64 -d)")" + while IFS="" read -r x || [ -n "$x" ] + do + if [ "$x" == "$addressValuePair" ] + then + flag=1 + break + fi + done < $stellarParticipantsOnline + if [ "$flag" == "0" ] + then + echo $addressValuePair >> $stellarParticipantsOnline + _ak_log_info "$p is configured with $(echo $addressValuePair | awk '{ print $2 }'). Added to online participants." + else + _ak_log_info "$(echo $addressValuePair | awk '{ print $2 }') is already in $stellarParticipantsOnline. Skipping..." + fi + fi + done < $stellarParticipants +} + +_ak_network_scan_ipfs(){ + _ak_not_implemented _ak_network_scan_ipfs +} + +_ak_network_scan_cjdns(){ + _ak_network_cjdns_scanner +} + +_ak_network_scan(){ + if [ ! -z $1 ] && [ -n "$1" ] + then + case $1 in + stellar) _ak_network_scan_stellar; exit;; + ipfs) _ak_network_scan_ipfs; exit;; + cjdns) _ak_network_scan_cjdns; exit;; + * ) _ak_log_error "Unknown network $1";exit 1;; + esac + else + _ak_network_scan_stellar + _ak_network_scan_ipfs + _ak_network_scan_cjdns + fi +} +_ak_network_show_peers_stellar(){ + stellarParticipants="$AK_WORKDIR/stellar-network-participants" + stellarParticipantsOnline="$AK_WORKDIR/stellar-network-participants-online" + ( + printf '[' + counter=0 + cat $stellarParticipantsOnline | while read stellarAddress akConfig + do + if [ $counter -ne 0 ] + then + printf ',' + fi + counter=$(( $counter + 1 )) + printf '{"stellar":{"address":"%s","config":"%s"},"node_info":%s}' \ + "$stellarAddress" \ + "$akConfig" \ + "$(_ak_ipfs_cat /ipns/$akConfig)" + done + printf ']' + ) #| jq +} + +_ak_network_show_peers_cjdns(){ + cat $AK_ZPEERSFILE | jq +} + +_ak_network_show_peers_ipfs(){ + _ak_not_implemented _ak_network_show_peers_ipfs +} + + +_ak_network_show_peers(){ + if [ ! -z $1 ] && [ -n "$1" ] + then + case $1 in + stellar) _ak_network_show_peers_stellar; exit;; + cjdns) _ak_network_show_peers_cjdns; exit;; + ipfs) _ak_network_show_peers_ipfs; exit;; + * ) _ak_log_error "Unknown network $1";exit 1;; + esac + else + (_ak_network_show_peers_stellar; _ak_network_show_peers_cjdns; _ak_network_show_peers_ipfs) | \ + jq -j | \ + sed -e 's/]\[/,/g' | \ + jq + + fi + +} + +_ak_network_ipfs_connect_bootstrap(){ + curl -s "https://arching-kaos.net/files/ak_ipfs_bootstrap_peers" | while read peer + do + _ak_ipfs_swarm_connect "$peer" + done +} + +_ak_network_cjdns_connect(){ + if [ ! -z $1 ] && [ -n "$1" ] && [ -f $1 ] + then + peersfile="$1" + else + peersfile="$(mktemp)" + tmpon="yes" + curl -s "https://arching-kaos.net/files/ak_cjdns_bootstrap_peers" > $peersfile + fi + + totalpeers="$(jq '. | length' < $peersfile)" + number="0" + interface="0" + + while [ $number -lt $totalpeers ] + do + address="$(jq -r '.['$number'].address' < $peersfile)" + login="$(jq -r '.['$number'].login' < $peersfile)" + password="$(jq -r '.['$number'].password' < $peersfile)" + publicKey="$(jq -r '.['$number'].publicKey' < $peersfile)" + peerName="$(jq -r '.['$number'].peerName' < $peersfile)" + if [ $(echo $address | grep '\[') ] + then + interface="1" + else + interface="0" + fi + $cjdnstoolspath/cexec 'UDPInterface_beginConnection("'$publicKey'", "'$address'", "'$peerName'", "'$password'", "'$login'", '$interface')' + number="$(( $number + 1 ))" + done + if [ "$tmpon" == "yes" ] + then + rm $peersfile + fi +} + +_ak_network_cjdns_connect_bootstrap(){ + _ak_network_cjdns_connect +} + +_ak_network_connect(){ + if [ ! -z $1 ] && [ -n "$1" ] + then + case $1 in + cjdns) _ak_network_cjdns_connect_bootstrap; exit;; + ipfs) _ak_network_ipfs_connect_bootstrap; exit;; + * ) _ak_log_error "Unknown network $1";exit 1;; + esac + else + _ak_network_cjdns_connect_bootstrap + _ak_network_ipfs_connect_bootstrap + fi +} -- cgit v1.2.3