diff options
Diffstat (limited to 'retiolum')
| -rwxr-xr-x | retiolum/bin/find-active-nodes | 21 | ||||
| -rw-r--r-- | retiolum/scripts/adv_graphgen/find-all-nodes.py | 59 | 
2 files changed, 80 insertions, 0 deletions
| diff --git a/retiolum/bin/find-active-nodes b/retiolum/bin/find-active-nodes new file mode 100755 index 00000000..2c316d0e --- /dev/null +++ b/retiolum/bin/find-active-nodes @@ -0,0 +1,21 @@ +#! /bin/dash +set -eu +cd /etc/tinc/retiolum/hosts +for name in ` +  grep '^[[:space:]]*Address[[:space:]]*=' * | +    cut -d: -f1 | sort | uniq +`; do +  if eval "`sed -n ' +      s/[[:space:]]\+//g +      s/^\(Address\|Port\)=\(.*\)/\1="\${\1+\$\1\n}\2"/p +    ' $name`"; then +    port=${Port-655} +    for host in $Address; do +      if nc -zw 2 $host $port 2>/dev/null; then +        echo "$name [('$host', $port)]" +      fi & +    done +    wait +  fi & +done +wait diff --git a/retiolum/scripts/adv_graphgen/find-all-nodes.py b/retiolum/scripts/adv_graphgen/find-all-nodes.py new file mode 100644 index 00000000..ae0fae8f --- /dev/null +++ b/retiolum/scripts/adv_graphgen/find-all-nodes.py @@ -0,0 +1,59 @@ +#!/usr/bin/python + +def find_potential_super(path="/etc/tinc/retiolum/hosts"): +  import os +  import re + +  needle_addr = re.compile("Address\s*=\s*(.*)") +  needle_port = re.compile("Port\s*=\s*(.*)") +  for f in os.listdir(path): +    with open(path+"/"+f) as of: +      addrs = [] +      port = "655" + +      for line in of.readlines(): + +        addr_found = needle_addr.match(line) +        if addr_found: +          addrs.append(addr_found.group(1)) + +        port_found = needle_port.match(line) +        if port_found: +          port = port_found.group(1) +       +      if addrs : yield (f ,[(addr ,int(port)) for addr in addrs]) + +def try_connect(addr): +  try: +    from socket import socket,AF_INET,SOCK_STREAM +    s = socket(AF_INET,SOCK_STREAM) +    s.settimeout(2) +    s.connect(addr) +    s.settimeout(None) +    s.close() +    return addr +  except Exception as e: +    pass +    #return () + +def check_one_super(ha): +    host,addrs = ha +    valid_addrs = [] +    for addr in addrs: +      ret = try_connect(addr) +      if ret: valid_addrs.append(ret) +    if valid_addrs: return (host,valid_addrs) + +def check_all_the_super(path="/etc/tinc/retiolum/hosts"): +  from multiprocessing import Pool +  p = Pool(20) +  return filter(None,p.map(check_one_super,find_potential_super(path))) + + + +if __name__ == "__main__": +  """ +  usage +  """ +  for host,addrs in check_all_the_super(): +    print host,addrs | 
