blob: 5620fae538c49dc1e0591bab0c4a7853ea7f946e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#!/usr/bin/env bash
###
### arching-kaos-tools
### Tools to interact and build an Arching Kaos Infochain
### Copyright (C) 2021 - 2025 kaotisk
###
### This program is free software: you can redistribute it and/or modify
### it under the terms of the GNU General Public License as published by
### the Free Software Foundation, either version 3 of the License, or
### (at your option) any later version.
###
### This program is distributed in the hope that it will be useful,
### but WITHOUT ANY WARRANTY; without even the implied warranty of
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
### GNU General Public License for more details.
###
### You should have received a copy of the GNU General Public License
### along with this program. If not, see <http://www.gnu.org/licenses/>.
###
source $AK_LIBDIR/_ak_lib_load
_ak_lib_load _ak_log
_ak_lib_load _ak_datetime
function _ak_network_yggdrasil_scan_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
last_seen="$TEMPDIR/ls"
pubkeys_ips="$TEMPDIR/pi"
online_ips="$TEMPDIR/oi"
online_pairs="$TEMPDIR/op"
filtered_online_pubkeys_ips="$TEMPDIR/fopi"
curl -s \
--connect-timeout 5 \
"http://yia.yggdrasil-network.ca/crawler/crawler-yia.peers.$(_ak_datetime_human_date_only_yesterday)" > $last_seen
if [ $? -ne 0 ]
then
_ak_log_error "Couldn't fetch active peers from YIA"
exit 1
fi
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 public key DB from YIA"
exit 1
fi
cat $last_seen | tr ' ' '\n' | sort | uniq | while read key
do
grep ${key} ${pubkeys_ips} >> ${online_pairs}
done
counter=0
count=0
max="$(cat $online_pairs|wc -l)"
printf '[' > walk.aknet
cat $online_pairs \
| sort \
| uniq \
| while read -r pkey ip || [ -n "$ip" ]
do
count="$(( $count + 1 ))"
_ak_log_debug "Scanning [${count}/${max}] $ip..."
node_fs_path="$AK_ZPEERSDIR/ygg/$(echo -n $ip| sed 's/://g')"
scan_ts="$(_ak_datetime_unix)"
if [ ! -d ${node_fs_path} ]
then
mkdir -p ${node_fs_path}
echo ${scan_ts} > ${node_fs_path}/first_seen
echo ${scan_ts} > ${node_fs_path}/last_seen
else
echo ${scan_ts} > ${node_fs_path}/last_seen
fi
node_fs_pathname="${node_fs_path}/${scan_ts}_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 > ${node_fs_pathname}
node_info="$(cat ${node_fs_pathname})"
if [ $? -eq 0 ] && [ $(echo -n "$node_info" | wc -c) -gt 0 ]
then
ni_hash="$(echo -n "${node_info}" | sha512sum | cut -d ' ' -f 1)"
if [ ! -f "${node_fs_path}/${ni_hash}" ]
then
mv ${node_fs_pathname} ${node_fs_path}/${ni_hash}
echo "${scan_ts} ${ni_hash}" >> ${node_fs_path}/db
fi
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`"
else
rm ${node_fs_pathname}
fi
done
printf ']' >> walk.aknet
mv walk.aknet $AK_ZPEERSFILE.yggdrasil
rm -rf $TEMPDIR
}
function _ak_network_yggdrasil_show_peers(){
if [ -f $AK_ZPEERSFILE.yggdrasil ]
then
cat $AK_ZPEERSFILE.yggdrasil | jq
else
_ak_log_debug "No yggdrasil peers found"
fi
}
function _ak_network_yggdrasil_scan(){
if [ ! -z $1 ] && [ -n "$1" ]
then
_ak_network_yggdrasil_scan_specific $1
else
_ak_network_yggdrasil_scan_full
fi
}
_ak_log_debug "_ak_network_yggdrasil loaded $(caller)"
|