aboutsummaryrefslogtreecommitdiff
path: root/lib/_ak_network
diff options
context:
space:
mode:
authorkaotisk <kaotisk@arching-kaos.org>2025-01-21 04:37:36 +0200
committerkaotisk <kaotisk@arching-kaos.org>2025-01-21 04:37:36 +0200
commit44470569339db65756e8bebed81024fd0c008f22 (patch)
tree551a4ea213baaa1d21611fb9be3a552248c1023e /lib/_ak_network
parent89d00fcbc75e128cba516009db100daec4b794a9 (diff)
downloadarching-kaos-tools-44470569339db65756e8bebed81024fd0c008f22.tar.gz
arching-kaos-tools-44470569339db65756e8bebed81024fd0c008f22.tar.bz2
arching-kaos-tools-44470569339db65756e8bebed81024fd0c008f22.zip
Diffstat (limited to 'lib/_ak_network')
-rwxr-xr-xlib/_ak_network456
1 files changed, 17 insertions, 439 deletions
diff --git a/lib/_ak_network b/lib/_ak_network
index 2bddfd5..d23d913 100755
--- a/lib/_ak_network
+++ b/lib/_ak_network
@@ -18,469 +18,47 @@
### along with this program. If not, see <http://www.gnu.org/licenses/>.
###
source $AK_LIBDIR/_ak_log
-source $AK_LIBDIR/_ak_ipfs
-
-cjdnstoolspath="$HOME/cjdns/tools"
-
-function _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
-}
-
-function _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'
-}
-
-function _ak_network_stellar_proceed_to_next_page(){
- nextURL="$(_ak_network_stellar_get_next_page)"
- curl \
- --connect-timeout 3 \
- "$nextURL" > $tempfile 2>/dev/null
-}
-
-function _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
-}
-
-function _ak_network_scan_stellar(){
- tempdir=`_ak_make_temp_directory`
- 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 [ $? -eq 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
-}
-
-function _ak_network_scan_ipfs(){
- _ak_not_implemented _ak_network_scan_ipfs
-}
-
-function _ak_network_scan_cjdns_dump(){
- #
- # 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 ... falling back to -w"
- _ak_network_scan_cjdns_full
- exit 0
- fi
- which publictoip6 > /dev/null 2>&1
- if [ $? -ne 0 ]
- then
- echo "You need to install cjdns and cjdns-tools ... falling back to -w"
- _ak_network_scan_cjdns_full
- exit 0
- fi
- TEMPDIR="$(_ak_make_temp_directory)"
- AK_ZPEERSFILE="$HOME/.arching-kaos/peersFile"
- cd $TEMPDIR
- max="$(dumpLinks |wc -l)"
- dumpLinks \
- | cut -d ' ' -f 2,4 \
- | sed 's/ /\n/g' \
- | sort \
- | uniq \
- | grep -v `dumpLinks | grep '0000\.0000\.0000\.0001' \
- | cut -d ' ' -f 2` > dumpedLinks
- counter=0
- count=0
- max="$(cat dumpedLinks| wc -l)"
- printf '[' > walk.aknet
- cat dumpedLinks \
- | while read -r ip || [ -n "$ip" ]
- do
- count="$(( $count + 1 ))"
- _ak_log_debug "Scanning [${count}/${max}] $(publictoip6 $ip)..."
- 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.hyperboria
- rm -rf $TEMPDIR
-}
-
-function _ak_network_scan_cjdns_full(){
- # This scan is using HIA resources to scan the whole cjdns network for peers
- #
- # Ref:
- # - https://github.com/ircerr/hia/
- # - http://hia.cjdns.ca/watchlist/c/walk.pubkey
- # - http://hia.cjdns.ca/watchlist/hia.iplist
- #
- TEMPDIR="$(_ak_make_temp_directory)"
- cd $TEMPDIR
- pubkeys_ips="$TEMPDIR/pi"
- online_ips="$TEMPDIR/oi"
- filtered_online_pubkeys_ips="$TEMPDIR/fopi"
- curl -s \
- --connect-timeout 5 \
- "http://hia.cjdns.ca/watchlist/c/walk.pubkey" > $pubkeys_ips
- if [ $? -ne 0 ]
- then
- _ak_log_error "Couldn't fetch DB from HIA"
- exit 1
- fi
- curl -s \
- --connect-timeout 5 \
- "http://hia.cjdns.ca/watchlist/hia.iplist" > $online_ips
- if [ $? -ne 0 ]
- then
- _ak_log_error "Couldn't fetch iplist from HIA"
- exit 1
- fi
- cat $online_ips | while read line
- do
- grep -F "$line" $pubkeys_ips >> $filtered_online_pubkeys_ips
- done
- counter=0
- count=0
- max="$(cat $filtered_online_pubkeys_ips|wc -l)"
- printf '[' > walk.aknet
- cat $filtered_online_pubkeys_ips \
- | sort \
- | uniq \
- | while read -r pkey ip || [ -n "$ip" ]
- do
- count="$(( $count + 1 ))"
- _ak_log_debug "Scanning [${count}/${max}] $ip..."
- node_info="$(curl \
- --connect-timeout 3 \
- -A 'akd/0.1.0; https://github.com/arching-kaos' \
- "http://[$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}' \
- "$pkey" "$ip" "$node_info" >> walk.aknet
- counter="`expr $counter + 1`"
- fi
- done
- printf ']' >> walk.aknet
- mv walk.aknet $AK_ZPEERSFILE.hyperboria
- rm -rf $TEMPDIR
-}
-
-function _ak_network_scan_yggdrasil_full(){
- # This scan is using HIA resources to scan the whole cjdns network for peers
- #
- # Ref:
- # - https://github.com/ircerr/yia/
- # - http://yia.yggdrasil-network.ca/watchlist/yia.iplist
- #
- TEMPDIR="$(_ak_make_temp_directory)"
- cd $TEMPDIR
- pubkeys_ips="$TEMPDIR/pi"
- online_ips="$TEMPDIR/oi"
- filtered_online_pubkeys_ips="$TEMPDIR/fopi"
- curl -s \
- --connect-timeout 5 \
- "http://yia.yggdrasil-network.ca/crawler/crawler-yia.pubkey" > $pubkeys_ips
- if [ $? -ne 0 ]
- then
- _ak_log_error "Couldn't fetch DB from YIA"
- exit 1
- fi
- counter=0
- count=0
- max="$(cat $pubkeys_ips|wc -l)"
- printf '[' > walk.aknet
- cat $pubkeys_ips \
- | sort \
- | uniq \
- | while read -r pkey ip || [ -n "$ip" ]
- do
- count="$(( $count + 1 ))"
- _ak_log_debug "Scanning [${count}/${max}] $ip..."
- node_info="$(curl \
- --connect-timeout 3 \
- -A 'akd/0.1.0; https://github.com/arching-kaos' \
- "http://[$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 '{"yggdrasil":{"public_key":"%s","ip":"%s"},"node_info":%s}' \
- "$pkey" "$ip" "$node_info" >> walk.aknet
- counter="`expr $counter + 1`"
- fi
- done
- printf ']' >> walk.aknet
- mv walk.aknet $AK_ZPEERSFILE.yggdrasil
- rm -rf $TEMPDIR
-}
-
-function _ak_network_scan_cjdns(){
- if [ ! -z $1 ] && [ -n "$1" ]
- then
- case $1 in
- -w | --whole) _ak_network_scan_cjdns_full; exit;;
- -d | --dump) _ak_network_scan_cjdns_dump; exit;;
- *) _ak_network_scan_cjdns_dump; exit;;
- esac
- else
- _ak_network_scan_cjdns_dump
- fi
-}
-
-function _ak_network_scan_yggdrasil(){
- if [ ! -z $1 ] && [ -n "$1" ]
- then
- case $1 in
- *) _ak_network_scan_yggdrasil_full; exit;;
- esac
- else
- _ak_network_scan_yggdrasil_full
- fi
-}
+source $AK_LIBDIR/_ak_network_ipfs
+source $AK_LIBDIR/_ak_network_cjdns
+source $AK_LIBDIR/_ak_network_yggdrasil
+source $AK_LIBDIR/_ak_network_stellar
function _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) shift; _ak_network_scan_cjdns $1; exit;;
- yggdrasil) shift; _ak_network_scan_yggdrasil $1; exit;;
+ stellar) _ak_network_stellar_scan; exit;;
+ ipfs) _ak_network_ipfs_scan; exit;;
+ cjdns) shift; _ak_network_cjdns_scan $1; exit;;
+ yggdrasil) shift; _ak_network_yggdrasil_scan $1; exit;;
* ) _ak_log_error "Unknown network $1";exit 1;;
esac
else
- _ak_network_scan_stellar
- _ak_network_scan_ipfs
- _ak_network_scan_cjdns
- _ak_network_scan_yggdrasil
- fi
-}
-function _ak_network_show_peers_stellar(){
- stellarParticipants="$AK_WORKDIR/stellar-network-participants"
- stellarParticipantsOnline="$AK_WORKDIR/stellar-network-participants-online"
- if [ -f "${stellarParticipantsOnline}" ]
- then
- (
- printf '['
- counter=0
- cat $stellarParticipantsOnline | while read stellarAddress akConfig
- do
- if [ $counter -ne 0 ]
- then
- printf ','
- fi
- counter=$(( $counter + 1 ))
- akConfigHash="$(_ak_ipfs_name_resolve /ipns/$akConfig|cut -d '/' -f 3)"
- printf '{"stellar":{"address":"%s","config":"%s"},"node_info":%s}' \
- "$stellarAddress" \
- "$akConfig" \
- "$(_ak_ipfs_cat $akConfigHash)"
- done
- printf ']'
- ) | sed -e 's/\[]//g' #| jq
- else
- _ak_log_debug "No stellar peers found"
+ _ak_network_stellar_scan
+ _ak_network_ipfs_scan
+ _ak_network_cjdns_scan
+ _ak_network_yggdrasil_scan
fi
}
-function _ak_network_show_peers_cjdns(){
- if [ -f $AK_ZPEERSFILE.hyperboria ]
- then
- cat $AK_ZPEERSFILE.hyperboria | jq
- else
- _ak_log_debug "No hyperboria peers found"
- fi
-}
-
-function _ak_network_show_peers_yggdrasil(){
- if [ -f $AK_ZPEERSFILE.yggdrasil ]
- then
- cat $AK_ZPEERSFILE.yggdrasil | jq
- else
- _ak_log_debug "No yggdrasil peers found"
- fi
-}
-
-function _ak_network_show_peers_ipfs(){
- _ak_not_implemented _ak_network_show_peers_ipfs
-}
-
function _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;;
- yggdrasil) _ak_network_show_peers_yggdrasil; exit;;
+ stellar) _ak_network_stellar_show_peers; exit;;
+ cjdns) _ak_network_cjdns_show_peers; exit;;
+ ipfs) _ak_network_ipfs_show_peers; exit;;
+ yggdrasil) _ak_network_yggdrasil_show_peers; 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_yggdrasil; _ak_network_show_peers_ipfs) | \
+ (_ak_network_stellar_show_peers; _ak_network_cjdns_show_peers; _ak_network_yggdrasil_show_peers; _ak_network_ipfs_show_peers) | \
jq -j | \
sed -e 's/]\[/,/g' | \
jq
fi
}
-function _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
-}
-
-function _ak_network_cjdns_connect(){
- if [ ! -z $1 ] && [ -n "$1" ] && [ -f $1 ]
- then
- peersfile="$1"
- else
- peersfile="$(_ak_make_temp_file)"
- 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
-}
-
-function _ak_network_cjdns_connect_bootstrap(){
- _ak_network_cjdns_connect
-}
-
function _ak_network_connect(){
if [ ! -z $1 ] && [ -n "$1" ]
then