Global: Convert IPv4/IPv6 from char to numbers/binary
This is done for tables router_ipv6 and router_netif. This is not done for table gw_netif (contains subnet masks). This requires changes to the MySQL database! Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
parent
bc3460f2e0
commit
c1c728f2a3
|
@ -157,7 +157,7 @@ mysql.execute("""
|
|||
CREATE TABLE router_ipv6 (
|
||||
`router` mediumint(8) UNSIGNED NOT NULL,
|
||||
`netif` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`ipv6` varchar(60) COLLATE utf8_unicode_ci NOT NULL
|
||||
`ipv6` binary(16) NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
|
||||
""")
|
||||
|
||||
|
@ -190,8 +190,8 @@ mysql.execute("""
|
|||
`tx_bytes` bigint(20) UNSIGNED NOT NULL,
|
||||
`rx` int(10) UNSIGNED NOT NULL,
|
||||
`tx` int(10) UNSIGNED NOT NULL,
|
||||
`fe80_addr` varchar(60) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`ipv4_addr` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`fe80_addr` binary(16) DEFAULT NULL,
|
||||
`ipv4_addr` int(10) UNSIGNED DEFAULT NULL,
|
||||
`mac` bigint(20) UNSIGNED DEFAULT NULL,
|
||||
`wlan_channel` tinyint(3) UNSIGNED DEFAULT NULL,
|
||||
`wlan_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
|
|
|
@ -4,6 +4,8 @@ import time
|
|||
import datetime
|
||||
|
||||
from ffmap.config import CONFIG
|
||||
#from socket import inet_pton, inet_ntop, AF_INET6
|
||||
from ipaddress import IPv4Address, IPv6Address
|
||||
|
||||
def utcnow():
|
||||
return datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
|
||||
|
@ -50,6 +52,32 @@ def int2mactuple(data,index=None):
|
|||
r = int2mac(r)
|
||||
return data
|
||||
|
||||
def ipv6tobin(data):
|
||||
if data:
|
||||
return IPv6Address(data).packed
|
||||
#return inet_pton(AF_INET6,data)
|
||||
else:
|
||||
return None
|
||||
def bintoipv6(data):
|
||||
if data:
|
||||
return IPv6Address(data).compressed
|
||||
#return inet_ntop(AF_INET6,data)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def ipv4toint(data):
|
||||
if data:
|
||||
return int(IPv4Address(data))
|
||||
#return inet_pton(AF_INET,data)
|
||||
else:
|
||||
return None
|
||||
def inttoipv4(data):
|
||||
if data:
|
||||
return str(IPv4Address(data))
|
||||
#return inet_ntop(AF_INET,data)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def writelog(path, content):
|
||||
with open(path, "a") as csv:
|
||||
csv.write(time.strftime('{%Y-%m-%d %H:%M:%S}') + " - " + content + "\n")
|
||||
|
|
|
@ -254,7 +254,7 @@ def import_nodewatcher_xml(mysql, mac, xml, banned, netifdict, statstime):
|
|||
ndata = []
|
||||
adata = []
|
||||
for n in router_update["netifs"]:
|
||||
ndata.append((router_id,n["name"],n["mtu"],n["traffic"]["rx_bytes"],n["traffic"]["tx_bytes"],n["traffic"]["rx"],n["traffic"]["tx"],n["ipv6_fe80_addr"],n["ipv4_addr"],n["mac"],n["wlan_channel"],n["wlan_type"],n["wlan_width"],n["wlan_ssid"],n["wlan_txpower"],))
|
||||
ndata.append((router_id,n["name"],n["mtu"],n["traffic"]["rx_bytes"],n["traffic"]["tx_bytes"],n["traffic"]["rx"],n["traffic"]["tx"],n["fe80_addr"],n["ipv4_addr"],n["mac"],n["wlan_channel"],n["wlan_type"],n["wlan_width"],n["wlan_ssid"],n["wlan_txpower"],))
|
||||
for a in n["ipv6_addrs"]:
|
||||
adata.append((router_id,n["name"],a,))
|
||||
|
||||
|
@ -797,7 +797,7 @@ def parse_nodewatcher_xml(xml,statstime):
|
|||
"rx": 0,
|
||||
"tx": 0,
|
||||
},
|
||||
"ipv4_addr": evalxpath(netif,"ipv4_addr/text()"),
|
||||
"ipv4_addr": ipv4toint(evalxpath(netif,"ipv4_addr/text()")),
|
||||
"mac": mac2int(evalxpath(netif,"mac_addr/text()")),
|
||||
"wlan_channel": evalxpathint(netif,"wlan_channel/text()",None),
|
||||
"wlan_type": evalxpath(netif,"wlan_type/text()",None),
|
||||
|
@ -806,12 +806,12 @@ def parse_nodewatcher_xml(xml,statstime):
|
|||
"wlan_txpower": evalxpath(netif,"wlan_tx_power/text()",None),
|
||||
}
|
||||
with suppress(IndexError):
|
||||
interface["ipv6_fe80_addr"] = ""
|
||||
interface["ipv6_fe80_addr"] = netif.xpath("ipv6_link_local_addr/text()")[0].lower().split("/")[0]
|
||||
interface["fe80_addr"] = None
|
||||
interface["fe80_addr"] = ipv6tobin(netif.xpath("ipv6_link_local_addr/text()")[0].split("/")[0])
|
||||
interface["ipv6_addrs"] = []
|
||||
if len(netif.xpath("ipv6_addr/text()")) > 0:
|
||||
for ipv6_addr in netif.xpath("ipv6_addr/text()"):
|
||||
interface["ipv6_addrs"].append(ipv6_addr.lower().split("/")[0])
|
||||
interface["ipv6_addrs"].append(ipv6tobin(ipv6_addr.split("/")[0]))
|
||||
|
||||
router_update["netifs"].append(interface)
|
||||
|
||||
|
|
|
@ -297,14 +297,14 @@ def dnslist():
|
|||
FROM router
|
||||
INNER JOIN router_netif ON router.id = router_netif.router
|
||||
INNER JOIN router_ipv6 ON router.id = router_ipv6.router AND router_netif.netif = router_ipv6.netif
|
||||
WHERE LEFT(ipv6,4) = 'fd43'
|
||||
WHERE LEFT(HEX(ipv6),4) = 'fd43'
|
||||
GROUP BY hostname, mac
|
||||
""",())
|
||||
mysql.close()
|
||||
|
||||
s = ""
|
||||
for router in router_data:
|
||||
s += int2shortmac(router["mac"]) + "\t" + router["fd43"] + "\n"
|
||||
s += int2shortmac(router["mac"]) + "\t" + bintoipv6(router["fd43"]) + "\n"
|
||||
|
||||
return Response(s,mimetype='text/plain')
|
||||
|
||||
|
@ -316,14 +316,14 @@ def dnsentries():
|
|||
FROM router
|
||||
INNER JOIN router_netif ON router.id = router_netif.router
|
||||
INNER JOIN router_ipv6 ON router.id = router_ipv6.router AND router_netif.netif = router_ipv6.netif
|
||||
WHERE LEFT(ipv6,4) = 'fd43'
|
||||
WHERE LEFT(HEX(ipv6),4) = 'fd43'
|
||||
GROUP BY hostname, mac
|
||||
""",())
|
||||
mysql.close()
|
||||
|
||||
s = ""
|
||||
for router in router_data:
|
||||
s += int2shortmac(router["mac"]) + ".fff.community. 300 IN AAAA " + router["fd43"] + " ; " + router["hostname"] + "\n"
|
||||
s += int2shortmac(router["mac"]) + ".fff.community. 300 IN AAAA " + bintoipv6(router["fd43"]) + " ; " + router["hostname"] + "\n"
|
||||
|
||||
return Response(s,mimetype='text/plain')
|
||||
|
||||
|
@ -458,7 +458,7 @@ def get_routers_by_nickname(nickname):
|
|||
'name': router['hostname'],
|
||||
'oid': str(router['id']),
|
||||
'mac': int2mac(router['mac']),
|
||||
'ipv6_fe80_addr': router['fe80_addr']
|
||||
'fe80_addr': bintoipv6(router['fe80_addr'])
|
||||
}
|
||||
)
|
||||
return jsonify(nodelist_data)
|
||||
|
@ -490,7 +490,7 @@ def get_routers_by_keyxchange_id(keyxchange_id):
|
|||
nodelist_data['nodes'].append(
|
||||
{
|
||||
'name': router['hostname'],
|
||||
'ipv6_fe80_addr': router['fe80_addr'],
|
||||
'ipv6_fe80_addr': bintoipv6(router['fe80_addr']),
|
||||
'href': 'https://monitoring.freifunk-franken.de/routers/' + str(router['id']),
|
||||
'firmware': router['firmware'],
|
||||
'hardware': router['hardware'],
|
||||
|
|
|
@ -9,7 +9,7 @@ import json
|
|||
import datetime
|
||||
import re
|
||||
import hashlib
|
||||
from ffmap.misc import int2mac, int2shortmac
|
||||
from ffmap.misc import int2mac, int2shortmac, inttoipv4, bintoipv6
|
||||
|
||||
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/' + '../..'))
|
||||
from ffmap.misc import *
|
||||
|
@ -28,6 +28,14 @@ def int2macfilter(d):
|
|||
def int2shortmacfilter(d):
|
||||
return int2shortmac(d)
|
||||
|
||||
@filters.app_template_filter('int2ipv4')
|
||||
def int2ipv4filter(d):
|
||||
return inttoipv4(d)
|
||||
|
||||
@filters.app_template_filter('bin2ipv6')
|
||||
def bin2ipv6filter(d):
|
||||
return bintoipv6(d)
|
||||
|
||||
@filters.app_template_filter('utc2local')
|
||||
def utc2local(dt):
|
||||
return dt.astimezone(tz.tzlocal())
|
||||
|
|
|
@ -276,16 +276,16 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-5 col-sm-5">
|
||||
{%- if netif.ipv6_fe80_addr -%}
|
||||
{{ netif.ipv6_fe80_addr }}
|
||||
{%- if netif.fe80_addr -%}
|
||||
{{ netif.fe80_addr|bin2ipv6 }}
|
||||
{%- else -%}
|
||||
<em title="Calculated from MAC Address">{{ netif.mac|macint2fe80 }}</em>
|
||||
{%- endif -%}
|
||||
{%- if netif.ipv4_addr -%}
|
||||
<br />{{ netif.ipv4_addr }}
|
||||
<br />{{ netif.ipv4_addr|int2ipv4 }}
|
||||
{%- endif -%}
|
||||
{%- for ipv6_addr in netif.ipv6_addrs -%}
|
||||
<br />{{ ipv6_addr }}
|
||||
<br />{{ ipv6_addr|bin2ipv6 }}
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
{%- if netif.rx is defined %}
|
||||
|
@ -321,16 +321,16 @@
|
|||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-5 col-sm-5">
|
||||
{%- if netif.ipv6_fe80_addr -%}
|
||||
{{ netif.ipv6_fe80_addr }}
|
||||
{%- if netif.fe80_addr -%}
|
||||
{{ netif.fe80_addr|bin2ipv6 }}
|
||||
{%- else -%}
|
||||
<em title="Calculated from MAC Address">{{ netif.mac|macint2fe80 }}</em>
|
||||
{%- endif -%}
|
||||
{%- if netif.ipv4_addr -%}
|
||||
<br />{{ netif.ipv4_addr }}
|
||||
<br />{{ netif.ipv4_addr|int2ipv4 }}
|
||||
{%- endif -%}
|
||||
{%- for ipv6_addr in netif.ipv6_addrs -%}
|
||||
<br />{{ ipv6_addr }}
|
||||
<br />{{ ipv6_addr|bin2ipv6 }}
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
{%- if netif.rx is defined %}
|
||||
|
|
Loading…
Reference in New Issue