IPv4/IPv6 Dualstack Traffic Analyse

ipv6_logoWenn man schon IPv4 und IPv6 aktiviert und seine Dienste über beide Protokolle zur Verfügung stellt, möchte man manchmal auch wissen wie viel Traffic über die einzelnen Wege zustande kommt.

Anbei ein kleines Shellscript welches Apache-acceslogs vom gestrigen Tag auswertet.
Ontop zu einem regulären IPv4/IPv6 Test – Goldwert :-)

Man wundere sich nicht über den etwas sehr abgespaceten IPv6 Regex :-)

Dies lässt sich natürlich beliebig auf Dienste wie Mail, FTP usw erweitern.

#!/bin/bash

# title: apache duals stack traffic analyse
# contact: basti@baebeca.de
# source: baebeca.de
# article: http://blog.baebeca.de/2013/02/20/ipv4ipv6-dualstack-traffic-analyse/
# date: 20130216
# version: v.1.0

# ipv4 regex validation / visits
cat /var/log/apache2/access*.log | grep $(date -d yesterday +%d/%b/%Y) | grep -E '[0-9]{1,3}(\.[0-9]{1,3}){3}' | grep -v "(internal dummy connection)" | grep -v "Monitoring" | grep -v "Python-urllib" | grep -v "get_crawler.php" > /var/log/apache_traffic_ipv4

IPV4_VISITS=`cat /var/log/apache_traffic_ipv4 | wc -l`
echo "$IPV4_VISITS IPv4 visits"
echo ""

# ipv6 regex validation / visits
# ipv6 grep regex by Dicky (http://www.violato.net/blog/others/40-ipv6-regex-validation)
cat /var/log/apache2/access*.log | grep $(date -d yesterday +%d/%b/%Y) | grep -E '((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))' | grep -v "(internal dummy connection)" | grep -v "Monitoring" | grep -v "Python-urllib" | grep -v "get_crawler.php" > /var/log/apache_traffic_ipv6

IPV6_VISITS=`cat /var/log/apache_traffic_ipv6 | wc -l`
echo "$IPV6_VISITS IPv6 visits"
echo ""

# mysql inserts for statistics
# ipv4
mysql -u root -p<pass> <database> -e "INSERT INTO <table> SET date = '$(date --date='(date -d yesterday +%d/%b/%Y) 00:00:01 UTC+1 -86401 second' +%s)', apache_traffic_ipv4=$IPV4_VISITS ON DUPLICATE KEY UPDATE apache_traffic_ipv4=$IPV4_VISITS;"

# ipv6
mysql -u root -p<pass> <database> -e "INSERT INTO <table> SET date = '$(date --date='(date -d yesterday +%d/%b/%Y) 00:00:01 UTC+1 -86401 second' +%s)', apache_traffic_ipv6=$IPV6_VISITS ON DUPLICATE KEY UPDATE apache_traffic_ipv6=$IPV6_VISITS;"

 

3 Kommentare
  1. hasan
    hasan sagte:

    okey jetzt wirds mir klar :-D
    da nur ein server bis jetzt ipv6 fähig ist(aber nicht dadrüber läuft)
    für mich unwichtig

    generel wirds mit ipv6 paar probleme geben
    mit bestimmten programmen, die dieses nicht unterstützen

    • Baebeca
      Baebeca sagte:

      Genau das, was oben geschrieben wurde :)

      „Wenn man schon IPv4 und IPv6 aktiviert und seine Dienste über beide Protokolle zur Verfügung stellt, möchte man manchmal auch wissen wie viel Traffic über die einzelnen Wege zustande kommt.“

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar