Страница 1 из 1

Анализатор трафика

Добавлено: 2011-09-26 9:06:06
Максим
Всем привет, стоит фрюха 7.4 + squid + sams и очень хочется мне отслеживать полностью весь трафик от юзеров и по каждому ip. Но в инете все только говорят о tcpdump но у него нету графической оболочки, а так хочется видеть как в sarg по каждому ip кто сколько накачал. Есть ли какие нибудь варианты ??????
За ранее большое спасибо!!!

Re: Анализатор трафика

Добавлено: 2011-09-26 9:30:21
Electronik
не знаю как в sams, но в sams2 есть такая информация.

Re: Анализатор трафика

Добавлено: 2011-09-26 9:52:11
Morty
вот такой вариант, без всяких "граф. оболочек"

Код: Выделить всё

#!/usr/bin/python -O
import os, datetime, time
#, netaddr

logfile = "/var/log/squid/access.log.0"
#net = '192.168.0.0/16'
today = datetime.date.today()
host = os.popen("hostname").read()
start_time = datetime.datetime(2001,03,25)
stop_time = datetime.datetime(2020,03,29)
# make Epoch Seconds
ep_start = time.mktime(start_time.timetuple())
ep_stop = time.mktime(stop_time.timetuple())
# for skleroz:
# datetime.datetime(1973, 01, 18, 3, 45, 50)  =>  1973-01-18 03:45:50
def CalculateSquid(logfile):
    global IpList, err
    IpList = {}  # Dictionary {ip:byte}
    dates = []
    f = open(logfile)
    content = f.readline()
    err = 0
    while content:
        try:
            date = content.split()[0]
            Ip = content.split()[2]
            bytes = int(content.split()[4])
        except:
            err += 1
        content = f.readline()
        if ep_start <= float(date) <= ep_stop:
            IpList[Ip] = IpList.get(Ip,0) + bytes
            dates.append(date)
    f.close()
    #for manualy set time period
    from_t = datetime.datetime.fromtimestamp(float(dates[0]))
    fin_t = datetime.datetime.fromtimestamp(float(dates[-1]))
    print "Period \t\t: ", from_t.ctime(),'-',fin_t.ctime()
# ---

# Function that print the result, form reversed dictionary
def GraphReport():
    global b
    reverse = dict([(val,key) for (key,val) in IpList.items()])
    b = reverse.keys()
    for key, val in sorted(reverse.items(), reverse = True):
    #    if netaddr.IPAddress(val) in netaddr.IPNetwork(net):
        if 1 < len(str(key)) < 4:
            print val, '\t', key,' bytes'
        if 4 <= len(str(key)) < 7:
            print val, '\t', key/1024, ' Kbytes'
        if len(str(key)) >= 7:
            print val, '\t', key/1024**2, ' Mbytes'
# ---
print "\n"
CalculateSquid(logfile)
print "Report generated:", today
print "Ignored lines \t:", err
print "hostname \t:",host
print "Host \t\tdownloaded\n",'-'*35
GraphReport()
print "Summary downloaded :", sum(b)/1024**2,"Mb\n"

Re: Анализатор трафика

Добавлено: 2011-09-26 10:42:36
Максим
Прошу прощения что не правильно сформулировал вопрос! Мне нужны отчеты по всем портам, а не только по 80 как в sarg. По sarg у меня все красиво собирается, но там учитываются только, то что скачали или лазили через браузер, а хочется и ftp и все остальное.

Re: Анализатор трафика

Добавлено: 2011-09-26 10:49:49
Morty
изучай http://ru.wikipedia.org/wiki/Netflow

либо можешь какой-то костыль в виде darkstat попользовать ))

А еще можешь придумать свой велосипед со своими круглыми колесами ;) Это тоже здорово