Files
sindan-client/macos/sindan.sh
2023-09-05 14:44:39 +09:00

987 lines
26 KiB
Bash
Executable File

#!/bin/bash
# sindan.sh
# version 3
VERSION="3.0.1"
# read configuration file
cd $(dirname $0)
source sindan.conf
# read function files
cd $(dirname $0)
source sindan_funcb.sh
source sindan_func0.sh
source sindan_func1.sh
source sindan_func2.sh
source sindan_func3.sh
source sindan_func4.sh
source sindan_func5.sh
source sindan_func6.sh
#
# main
#
####################
## Preparation
# Check parameters
for param in PIDFILE MAX_RETRY IFTYPE PING_SRVS PING6_SRVS FQDNS GPDNS4 GPDNS6 V4WEB_SRVS V6WEB_SRVS V4SSH_SRVS V6SSH_SRVS CMD_AIRPORT; do
if [ -z $(eval echo '$'$param) ]; then
echo "ERROR: $param is null in configration file." 1>&2
exit 1
fi
done
# Check commands
for cmd in gtimeout; do
if ! which $cmd > /dev/null 2>&1; then
echo "ERROR: $cmd is not found." 1>&2
exit 1
fi
done
# Set PID file
trap 'rm -f $PIDFILE; exit 0' INT EXIT
if [ -e "$PIDFILE" ]; then
ppid=$(cat "$PIDFILE")
if kill -0 "$ppid" > /dev/null 2>&1; then
kill -9 -"$ppid"
rm -f "$PIDFILE"
echo "Warning: killed the previous job which was running."
else
echo "Warning: previous check appears to have not finished correctly."
fi
fi
echo $$ >"$PIDFILE"
# Make log directory
mkdir -p log
mkdir -p trace-json
# Generate UUID
uuid=$(generate_uuid)
UUID=$uuid
####################
## Phase 0
echo "Phase 0: Hardware Layer checking..."
layer="hardware"
# Get OS version
os=$(get_os)
# Get hardware information
hw_info=$(get_hw_info)
if [ -n "$hw_info" ]; then
write_json "$layer" common hw_info "$INFO" self "$hw_info" 0
fi
# Get CPU frequency
cpu_freq=$(get_cpu_freq "$os")
if [ -n "$cpu_freq" ]; then
write_json "$layer" common cpu_freq "$INFO" self "$cpu_freq" 0
fi
# Get CPU voltage
cpu_volt=$(get_cpu_volt "$os")
if [ -n "$cpu_volt" ]; then
write_json "$layer" common cpu_volt "$INFO" self "$cpu_volt" 0
fi
# Get CPU temperature
cpu_temp=$(get_cpu_temp "$os")
if [ -n "$cpu_temp" ]; then
write_json "$layer" common cpu_temp "$INFO" self "$cpu_temp" 0
fi
# Get clock state
clock_state="synchronized=$(get_clock_state)"
if [ -n "$clock_state" ]; then
write_json "$layer" common clock_state "$INFO" self "$clock_state" 0
fi
# Get clock source
clock_src=$(get_clock_src)
if [ -n "$clock_src" ]; then
write_json "$layer" common clock_src "$INFO" self "$clock_src" 0
fi
# Report phase 0 results
if [ "$VERBOSE" = "yes" ]; then
echo " hardware information:"
echo " os: $os"
echo " hw_info: $hw_info"
echo " cpu(freq: $cpu_freq Hz, volt: $cpu_volt V, temp: $cpu_temp 'C"
echo " clock_state: $clock_state"
echo " clock_src: $clock_src"
fi
echo " done."
####################
## Phase 1
echo "Phase 1: Datalink Layer checking..."
layer="datalink"
# Get ifname
ifname=$(get_ifname "$IFTYPE")
# Down, Up interface
if [ "$RECONNECT" = "yes" ]; then
# Down target interface
if [ "$VERBOSE" = "yes" ]; then
echo " interface:$ifname down"
fi
do_ifdown "$ifname"
sleep 2
# Start target interface
if [ "$VERBOSE" = "yes" ]; then
echo " interface:$ifname up"
fi
do_ifup "$ifname"
sleep 5
fi
# Get iftype
write_json "$layer" common iftype "$INFO" self "$IFTYPE" 0
# Check I/F status
result_phase1=$FAIL
rcount=0
while [ "$rcount" -lt "$MAX_RETRY" ]; do
if ifstatus=$(get_ifstatus "$ifname"); then
result_phase1=$SUCCESS
break
fi
sleep 5
rcount=$(( rcount + 1 ))
done
if [ -n "$ifstatus" ]; then
write_json "$layer" "$IFTYPE" ifstatus "$result_phase1" self \
"$ifstatus" 0
fi
if [ "$IFTYPE" != "WWAN" ]; then
# Get MAC address
mac_addr=$(get_macaddr "$ifname")
# Get ifmtu
ifmtu=$(get_ifmtu "$ifname")
if [ -n "$ifmtu" ]; then
write_json "$layer" "$IFTYPE" ifmtu "$INFO" self "$ifmtu" 0
fi
fi
#
if [ "$IFTYPE" = "Wi-Fi" ]; then
# Get Wi-Fi SSID
ssid=$(get_wlan_ssid)
if [ -n "$ssid" ]; then
write_json "$layer" "$IFTYPE" ssid "$INFO" self "$ssid" 0
fi
# Get Wi-Fi BSSID
bssid=$(get_wlan_bssid)
if [ -n "$bssid" ]; then
write_json "$layer" "$IFTYPE" bssid "$INFO" self "$bssid" 0
fi
# Get Wi-Fi AP's OUI
wlanapoui=$(get_wlan_apoui)
if [ -n "$wlanapoui" ]; then
write_json "$layer" "$IFTYPE" wlanapoui "$INFO" self "$wlanapoui" 0
fi
# Get Wi-Fi channel
channel=$(get_wlan_channel)
if [ -n "$channel" ]; then
write_json "$layer" "$IFTYPE" channel "$INFO" self "$channel" 0
fi
# Get Wi-Fi RSSI
rssi=$(get_wlan_rssi)
if [ -n "$rssi" ]; then
write_json "$layer" "$IFTYPE" rssi "$INFO" self "$rssi" 0
fi
# Get Wi-Fi noise
noise=$(get_wlan_noise)
if [ -n "$noise" ]; then
write_json "$layer" "$IFTYPE" noise "$INFO" self "$noise" 0
fi
# # Get Wi-Fi quality
# quarity=$(get_wlan_quality)
# if [ -n "$quarity" ]; then
# write_json "$layer" "$IFTYPE" quarity "$INFO" self "$quarity" 0
# fi
# Get Wi-Fi rate
rate=$(get_wlan_rate)
if [ -n "$rate" ]; then
write_json "$layer" "$IFTYPE" rate "$INFO" self "$rate" 0
fi
# Get Wi-Fi environment
environment=$(get_wlan_environment)
if [ -n "$environment" ]; then
write_json "$layer" "$IFTYPE" environment "$INFO" self \
"$environment" 0
fi
elif [ "$IFTYPE" = "WWAN" ]; then
.
# TBD
else
# Get media type
media=$(get_mediatype "$ifname")
if [ -n "$media" ]; then
write_json "$layer" "$IFTYPE" media "$INFO" self "$media" 0
fi
fi
# Report phase 1 results
if [ "$VERBOSE" = "yes" ]; then
echo " datalink information:"
echo " datalink status: $result_phase1"
echo " type: $IFTYPE, ifname: $ifname"
echo " status: $ifstatus, mtu: $ifmtu byte"
if [ "$IFTYPE" = "Wi-Fi" ]; then
echo " ssid: $ssid, ch: $channel, rate: $rate Mbps"
echo " bssid: $bssid"
echo " rssi: $rssi dBm, noise: $noise dBm"
# echo " quality: $quality"
echo " environment:"
echo "$environment"
elif [ "$IFTYPE" = "WWAN" ]; then
.
# TBD
# echo " apn: $wwan_apn, iftype: $wwan_iftype, iptype: $wwan_iptype"
# echo " operator: $wwan_operator, mmc/mnc: $wwan_mmcmnc"
# echo " cid: $wwan_cid, lac: $wwan_lac, tac: $wwan_tac"
# echo " rssi: $wwan_rssi dBm, rsrq: $wwan_rsrq dB, rsrp:" \
# "$wwan_rsrp dBm, s/n: $wwan_snir dB"
# echo " quality: $wwan_quality %"
# echo " environment:"
# echo "$wwan_environment"
else
echo " media: $media"
fi
fi
echo " done."
####################
## Phase 2
echo "Phase 2: Interface Layer checking..."
layer="interface"
## IPv4
if [ "$EXCL_IPv4" != "yes" ]; then
# Get IPv4 I/F configurations
v4ifconf=$(get_v4ifconf "$IFTYPE")
if [ -n "$v4ifconf" ]; then
write_json "$layer" IPv4 v4ifconf "$INFO" self "$v4ifconf" 0
fi
# Check IPv4 autoconf
if [ "$IFTYPE" = "WWAN" ]; then
result_phase2_1=$SUCCESS
v4autoconf="$v4ifconf"
else
result_phase2_1=$FAIL
rcount=0
while [ $rcount -lt "$MAX_RETRY" ]; do
if v4autoconf=$(check_v4autoconf "$ifname" "$v4ifconf"); then
result_phase2_1=$SUCCESS
break
fi
sleep 5
rcount=$(( rcount + 1 ))
done
fi
write_json "$layer" IPv4 v4autoconf "$result_phase2_1" self \
"$v4autoconf" 0
# Get IPv4 address
v4addr=$(get_v4addr "$ifname")
if [ -n "$v4addr" ]; then
write_json "$layer" IPv4 v4addr "$INFO" self "$v4addr" 0
fi
# Get IPv4 netmask
netmask=$(get_netmask "$ifname")
if [ -n "$netmask" ]; then
write_json "$layer" IPv4 netmask "$INFO" self "$netmask" 0
fi
# Get IPv4 routers
v4routers=$(get_v4routers "$ifname")
if [ -n "$v4routers" ]; then
write_json "$layer" IPv4 v4routers "$INFO" self "$v4routers" 0
fi
# Get IPv4 name servers
v4nameservers=$(get_v4nameservers)
if [ -n "$v4nameservers" ]; then
write_json "$layer" IPv4 v4nameservers "$INFO" self \
"$v4nameservers" 0
fi
# Get IPv4 NTP servers
#TBD
# Report phase 2 results (IPv4)
if [ "$VERBOSE" = "yes" ]; then
echo " interface information:"
echo " intarface status (IPv4): $result_phase2_1"
echo " IPv4 conf: $v4ifconf"
echo " IPv4 addr: ${v4addr}/${netmask}"
echo " IPv4 routers: $v4routers"
echo " IPv4 namesrv: $v4nameservers"
fi
fi
## IPv6
if [ "$EXCL_IPv6" != "yes" ]; then
# Get IPv6 I/F configurations
v6ifconf=$(get_v6ifconf "$IFTYPE")
if [ -n "$v6ifconf" ]; then
write_json "$layer" IPv6 v6ifconf "$INFO" self "$v6ifconf" 0
fi
# Get IPv6 linklocal address
v6lladdr=$(get_v6lladdr "$ifname")
if [ -n "$v6lladdr" ]; then
write_json "$layer" IPv6 v6lladdr "$INFO" self "$v6lladdr" 0
fi
# Report phase 2 results (IPv6)
if [ "$VERBOSE" = "yes" ]; then
echo " IPv6 conf: $v6ifconf"
echo " IPv6 lladdr: $v6lladdr"
fi
# Get IPv6 RA infomation
ra_info=$(get_ra_info "$ifname")
# Get IPv6 RA source addresses
ra_addrs=$(echo "$ra_info" | get_ra_addrs)
if [ -n "$ra_addrs" ]; then
write_json "$layer" IPv6 ra_addrs "$INFO" self "$ra_addrs" 0
fi
if [ "$v6ifconf" = "automatic" ] && [ -z "$ra_addrs" ]; then
# Report phase 2 results (IPv6-RA)
if [ "$VERBOSE" = "yes" ]; then
echo " RA does not exist."
fi
else
if [ "$v6ifconf" = "manual" ]; then
result_phase2_2=$SUCCESS
v6autoconf="v6conf is $v6ifconf"
write_json "$layer" IPv6 v6autoconf "$result_phase2_2" self \
"$v6autoconf" 0
# Get IPv6 address
v6addrs=$(get_v6addrs "$ifname" "")
if [ -n "$v6addr" ]; then
write_json "$layer" IPv6 v6addrs "$INFO" "$v6ifconf" "$v6addrs" 0
fi
s_count=0
for addr in $(echo "$v6addrs" | sed 's/,/ /g'); do
# Get IPv6 prefix length
pref_len=$(get_prefixlen_from_ifinfo "$ifname" "$addr")
if [ -n "$pref_len" ]; then
write_json "$layer" IPv6 pref_len "$INFO" "$addr" "$pref_len" \
"$s_count"
fi
if [ "$VERBOSE" = "yes" ]; then
echo " IPv6 addr: ${addr}/${pref_len}"
fi
s_count=$(( s_count + 1 ))
done
if [ "$VERBOSE" = "yes" ]; then
echo " intarface status (IPv6): $result_phase2_2"
fi
else
count=0
for saddr in $(echo "$ra_addrs" | sed 's/,/ /g'); do
# Get IPv6 RA flags
ra_flags=$(echo "$ra_info" | get_ra_flags "$saddr")
if [ -z "$ra_flags" ]; then
ra_flags="none"
fi
write_json "$layer" RA ra_flags "$INFO" "$saddr" "$ra_flags" \
"$count"
# Get IPv6 RA parameters
# ra_hlim=$(echo "$ra_info" | get_ra_hlim "$saddr")
# if [ -n "$ra_hlim" ]; then
# write_json "$layer" RA ra_hlim "$INFO" "$saddr" "$ra_hlim" \
# "$count"
# fi
# ra_ltime=$(echo "$ra_info" | get_ra_ltime "$saddr")
# if [ -n "$ra_ltime" ]; then
# write_json "$layer" RA ra_ltime "$INFO" "$saddr" "$ra_ltime" \
# "$count"
# fi
# ra_reach=$(echo "$ra_info" | get_ra_reach "$saddr")
# if [ -n "$ra_reach" ]; then
# write_json "$layer" RA ra_reach "$INFO" "$saddr" "$ra_reach" \
# "$count"
# fi
# ra_retrans=$(echo "$ra_info" | get_ra_retrans "$saddr")
# if [ -n "$ra_retrans" ]; then
# write_json "$layer" RA ra_retrans "$INFO" "$saddr" \
# "$ra_retrans" "$count"
# fi
# Report phase 2 results (IPv6-RA)
if [ "$VERBOSE" = "yes" ]; then
echo " IPv6 RA src addr: $saddr"
echo " IPv6 RA flags: $ra_flags"
# echo " IPv6 RA hoplimit: $ra_hlim"
# echo " IPv6 RA lifetime: $ra_ltime"
# echo " IPv6 RA reachable: $ra_reach"
# echo " IPv6 RA retransmit: $ra_retrans"
fi
# Get IPv6 RA prefixes
ra_prefs=$(echo "$ra_info" | get_ra_prefs "$saddr" "$ifname")
if [ -n "$ra_prefs" ]; then
write_json "$layer" RA ra_prefs "$INFO" "$saddr" "$ra_prefs" \
"$count"
fi
s_count=0
for pref in $(echo "$ra_prefs" | sed 's/,/ /g'); do
# Get IPv6 RA prefix flags
ra_pref_flags=$(echo "$ra_info" |
get_ra_pref_flags "$saddr" "$pref" "$ifname")
if [ -n "$ra_pref_flags" ]; then
write_json "$layer" RA ra_pref_flags "$INFO" \
"${saddr}-${pref}" "$ra_pref_flags" "$s_count"
fi
# Get IPv6 RA prefix parameters
ra_pref_vltime=$(echo "$ra_info" |
get_ra_pref_vltime "$saddr" "$pref" "$ifname")
if [ -n "$ra_pref_vltime" ]; then
write_json "$layer" RA ra_pref_vltime "$INFO" \
"${saddr}-${pref}" "$ra_pref_vltime" "$s_count"
fi
ra_pref_pltime=$(echo "$ra_info" |
get_ra_pref_pltime "$saddr" "$pref" "$ifname")
if [ -n "$ra_pref_pltime" ]; then
write_json "$layer" RA ra_pref_pltime "$INFO" \
"${saddr}-${pref}" "$ra_pref_pltime" "$s_count"
fi
# Get IPv6 prefix length
ra_pref_len=$(get_prefixlen "$pref")
if [ -n "$ra_pref_len" ]; then
write_json "$layer" RA ra_pref_len "$INFO" \
"${saddr}-${pref}" "$ra_pref_len" "$s_count"
fi
# Report phase 2 results (IPv6-RA-Prefix)
if [ "$VERBOSE" = "yes" ]; then
echo " IPv6 RA prefix: $pref"
echo " flags: $ra_pref_flags"
echo " valid time: $ra_pref_vltime"
echo " preferred time: $ra_pref_pltime"
fi
# Check IPv6 autoconf
result_phase2_2=$FAIL
rcount=0
while [ $rcount -lt "$MAX_RETRY" ]; do
# Get IPv6 address
v6addrs=$(get_v6addrs "$ifname" "$pref")
if v6autoconf=$(check_v6autoconf "$ifname" "$v6ifconf" \
"$ra_flags" "$pref" "$ra_pref_flags"); then
result_phase2_2=$SUCCESS
break
fi
sleep 5
rcount=$(( rcount + 1 ))
done
write_json "$layer" IPv6 v6addrs "$INFO" "$pref" "$v6addrs" \
"$count"
write_json "$layer" IPv6 v6autoconf "$result_phase2_2" \
"$pref" "$v6autoconf" "$count"
if [ "$VERBOSE" = "yes" ]; then
for addr in $(echo "$v6addrs" | sed 's/,/ /g'); do
echo " IPv6 addr: ${addr}/${ra_pref_len}"
done
echo " intarface status (IPv6): $result_phase2_2"
fi
s_count=$(( s_count + 1 ))
done
# Get IPv6 RA routes
#TBD
# Get IPv6 RA RDNSSes
#TBD
count=$(( count + 1 ))
done
fi
# Get IPv6 routers
v6routers=$(get_v6routers "$ifname")
if [ -n "$v6routers" ]; then
write_json "$layer" IPv6 v6routers "$INFO" self "$v6routers" 0
fi
# Get IPv6 name servers
v6nameservers=$(get_v6nameservers)
if [ -n "$v6nameservers" ]; then
write_json "$layer" IPv6 v6nameservers "$INFO" self "$v6nameservers" 0
fi
# Get IPv6 NTP servers
#TBD
# Report phase 2 results (IPv6)
if [ "$VERBOSE" = "yes" ]; then
echo " IPv6 routers: $v6routers"
echo " IPv6 namesrv: $v6nameservers"
fi
fi
fi
echo " done."
####################
## Phase 3
echo "Phase 3: Localnet Layer checking..."
layer="localnet"
# Do ping to IPv4 routers
count=0
for target in $(echo "$v4routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 4 router "$target" "$count" &
count=$(( count + 1 ))
done
# Do ping to IPv4 nameservers
count=0
for target in $(echo "$v4nameservers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 4 namesrv "$target" "$count" &
count=$(( count + 1 ))
done
# Do ping to IPv6 routers
count=0
for target in $(echo "$v6routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 router "$target" "$count" &
count=$(( count + 1 ))
done
# Do ping to IPv6 nameservers
count=0
for target in $(echo "$v6nameservers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 namesrv "$target" "$count" &
count=$(( count + 1 ))
done
wait
echo " done."
####################
## Phase 4
echo "Phase 4: Globalnet Layer checking..."
layer="globalnet"
if [ "$EXCL_IPv4" != "yes" ]; then
v4addr_type=$(check_v4addr "$v4addr")
else
v4addr_type="linklocal"
fi
if [ "$v4addr_type" = "private" ] || [ "$v4addr_type" = "global" ]; then
count=0
for target in $(echo "$PING_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv4 routers
count_r=0
for target_r in $(echo "$v4routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 4 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
fi
# Do ping to extarnal IPv4 servers
cmdset_ping "$layer" 4 srv "$target" "$count" &
# Do traceroute to extarnal IPv4 servers
cmdset_trace "$layer" 4 srv "$target" "$count" &
if [ "$MODE" = "client" ]; then
# Check path MTU to extarnal IPv4 servers
cmdset_pmtud "$layer" 4 srv "$target" "$ifmtu" "$count" "$v4addr" &
fi
count=$(( count + 1 ))
done
fi
if [ -n "$v6addrs" ]; then
count=0
for target in $(echo "$PING6_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv6 routers
count_r=0
for target_r in $(echo "$v6routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
fi
# Do ping to extarnal IPv6 servers
cmdset_ping "$layer" 6 srv "$target" "$count" &
# Do traceroute to extarnal IPv6 servers
cmdset_trace "$layer" 6 srv "$target" "$count" &
for addr in $(echo "$v6addrs" | sed 's/,/ /g'); do
if [ "$MODE" = "client" ]; then
# Check path MTU to extarnal IPv6 servers
cmdset_pmtud "$layer" 6 srv "$target" "$ifmtu" "$count" "$addr" &
fi
done
count=$(( count + 1 ))
done
fi
wait
echo " done."
####################
## Phase 5
echo "Phase 5: DNS Layer checking..."
layer="dns"
# Clear dns local cache
#TBD
if [ "$v4addr_type" = "private" ] || [ "$v4addr_type" = "global" ]; then
count=0
for target in $(echo "$v4nameservers" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv4 nameservers
cmdset_ping "$layer" 4 namesrv "$target" "$count" &
fi
# Do dns lookup for A record by IPv4
cmdset_dnslookup "$layer" 4 A "$target" "$count" &
# Do dns lookup for AAAA record by IPv4
cmdset_dnslookup "$layer" 4 AAAA "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$GPDNS4" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv4 routers
count_r=0
for target_r in $(echo "$v4routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 4 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
# Do ping to IPv4 nameservers
cmdset_ping "$layer" 4 namesrv "$target" "$count" &
# Do traceroute to IPv4 nameservers
cmdset_trace "$layer" 4 namesrv "$target" "$count" &
fi
# Do dns lookup for A record by IPv4
cmdset_dnslookup "$layer" 4 A "$target" "$count" &
# Do dns lookup for AAAA record by IPv4
cmdset_dnslookup "$layer" 4 AAAA "$target" "$count" &
count=$(( count + 1 ))
done
fi
exist_dns64="no"
if [ -n "$v6addrs" ]; then
count=0
for target in $(echo "$v6nameservers" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv6 nameservers
cmdset_ping "$layer" 6 namesrv "$target" "$count" &
fi
# Do dns lookup for A record by IPv6
cmdset_dnslookup "$layer" 6 A "$target" "$count" &
# Do dns lookup for AAAA record by IPv6
cmdset_dnslookup "$layer" 6 AAAA "$target" "$count" &
# check DNS64
exist_dns64=$(check_dns64 "$target")
count=$(( count + 1 ))
done
count=0
for target in $(echo "$GPDNS6" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv6 routers
count_r=0
for target_r in $(echo "$v6routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
# Do ping to IPv6 nameservers
cmdset_ping "$layer" 6 namesrv "$target" "$count" &
# Do traceroute to IPv6 nameservers
cmdset_trace "$layer" 6 namesrv "$target" "$count" &
fi
# Do dns lookup for A record by IPv6
cmdset_dnslookup "$layer" 6 A "$target" "$count" &
# Do dns lookup for AAAA record by IPv6
cmdset_dnslookup "$layer" 6 AAAA "$target" "$count" &
count=$(( count + 1 ))
done
fi
wait
echo " done."
####################
## Phase 6
echo "Phase 6: Application Layer checking..."
layer="app"
if [ "$v4addr_type" = "private" ] || [ "$v4addr_type" = "global" ]; then
count=0
for target in $(echo "$V4WEB_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv4 routers
count_r=0
for target_r in $(echo "$v4routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 4 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
# Do ping to IPv4 web servers
cmdset_ping "$layer" 4 websrv "$target" "$count" &
# Do traceroute to IPv4 web servers
cmdset_trace "$layer" 4 websrv "$target" "$count" &
fi
# Do curl to IPv4 web servers by IPv4
cmdset_http "$layer" 4 websrv "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$V4SSH_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
target_fqdn=$(echo $target | awk -F_ '{print $1}')
# Do ping to IPv4 ssh servers
cmdset_ping "$layer" 4 sshsrv "$target_fqdn" "$count" &
# Do traceroute to IPv4 ssh servers
cmdset_trace "$layer" 4 sshsrv "$target_fqdn" "$count" &
fi
# Do ssh-keyscan to IPv4 ssh servers by IPv4
cmdset_ssh "$layer" 4 sshsrv "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$PS_SRVS4" | sed 's/,/ /g'); do
for port in $(echo "$PS_PORTS" | sed 's/,/ /g'); do
# Do portscan by IPv4
cmdset_portscan "$layer" 4 pssrv "$target" "$port" "$count" &
done
count=$(( count + 1 ))
done
fi
if [ -n "$v6addrs" ]; then
count=0
for target in $(echo "$V6WEB_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
count_r=0
for target_r in $(echo "$v6routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
# Do ping to IPv6 web servers
cmdset_ping "$layer" 6 websrv "$target" "$count" &
# Do traceroute to IPv6 web servers
cmdset_trace "$layer" 6 websrv "$target" "$count" &
fi
# Do curl to IPv6 web servers by IPv6
cmdset_http "$layer" 6 websrv "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$V6SSH_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
target_fqdn=$(echo $target | awk -F_ '{print $1}')
# Do ping to IPv6 ssh servers
cmdset_ping "$layer" 6 sshsrv "$target_fqdn" "$count" &
# Do traceroute to IPv6 ssh servers
cmdset_trace "$layer" 6 sshsrv "$target_fqdn" "$count" &
fi
# Do ssh-keyscan to IPv6 ssh servers by IPv6
cmdset_ssh "$layer" 6 sshsrv "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$PS_SRVS6" | sed 's/,/ /g'); do
for port in $(echo "$PS_PORTS" | sed 's/,/ /g'); do
# Do portscan by 6
cmdset_portscan "$layer" 6 pssrv "$target" "$port" "$count" &
done
count=$(( count + 1 ))
done
# DNS64
if [ "$exist_dns64" = "yes" ]; then
echo " exist dns64 server"
count=0
for target in $(echo "$V4WEB_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
# Do ping to IPv6 routers
count_r=0
for target_r in $(echo "$v6routers" | sed 's/,/ /g'); do
cmdset_ping "$layer" 6 router "$target_r" "$count_r" &
count_r=$(( count_r + 1 ))
done
# Do ping to IPv4 web servers by IPv6
cmdset_ping "$layer" 6 websrv "$target" "$count" &
# Do traceroute to IPv4 web servers by IPv6
cmdset_trace "$layer" 6 websrv "$target" "$count" &
fi
# Do curl to IPv4 web servers by IPv6
cmdset_http "$layer" 6 websrv "$target" "$count" &
# Do measure http throuput by IPv6
#TBD
# v6http_throughput_srv
count=$(( count + 1 ))
done
count=0
for target in $(echo "$V4SSH_SRVS" | sed 's/,/ /g'); do
if [ "$MODE" = "probe" ]; then
target_fqdn=$(echo $target | awk -F_ '{print $1}')
# Do ping to IPv4 ssh servers by IPv6
cmdset_ping "$layer" 6 sshsrv "$target_fqdn" "$count" &
# Do traceroute to IPv4 ssh servers by IPv6
cmdset_trace "$layer" 6 sshsrv "$target_fqdn" "$count" &
fi
# Do ssh-keyscan to IPv4 ssh servers by IPv6
cmdset_ssh "$layer" 6 sshsrv "$target" "$count" &
count=$(( count + 1 ))
done
count=0
for target in $(echo "$PS_SRVS4" | sed 's/,/ /g'); do
for port in $(echo "$PS_PORTS" | sed 's/,/ /g'); do
# Do portscan by IPv6
cmdset_portscan "$layer" 6 pssrv "$target" "$port" "$count" &
done
count=$(( count + 1 ))
done
fi
fi
# dualstack performance measurements
if [ "$v4addr_type" = "private" ] || [ "$v4addr_type" = "global" ] || \
[ -n "$v6addrs" ]; then
# SPEEDINDEX
if [ "$DO_SPEEDINDEX" = "yes" ]; then
count=0
for target in $(echo "$SI_SRVS" | sed 's/,/ /g'); do
# Do speedindex
cmdset_speedindex "$layer" Dualstack speedidsrv "$target" "$count"
count=$(( count + 1 ))
done
fi
# SPEEDTEST
if [ "$DO_SPEEDTEST" = "yes" ]; then
count=0
for target in $(echo "$ST_SRVS" | sed 's/,/ /g'); do
# Do speedtest
cmdset_speedtest "$layer" Dualstack speedtssrv "$target" "$count"
count=$(( count + 1 ))
done
fi
fi
wait
echo " done."
####################
## Phase 7
echo "Phase 7: Create campaign log..."
# Write campaign log file
if [ "$IFTYPE" = "Wi-Fi" ]; then
write_json_campaign "$uuid" "$mac_addr" "$os" "$IFTYPE" "$ssid"
elif [ "$IFTYPE" = "WWAN" ]; then
write_json_campaign "$uuid" "$wwan_imei" "$os" "$IFTYPE" "$wwan_apn"
else
write_json_campaign "$uuid" "$mac_addr" "$os" "$IFTYPE" none
fi
# remove PID file
rm -f "$PIDFILE"
echo " done."
exit 0