Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析大型日志文件-Python_Python_Parsing_Logfiles - Fatal编程技术网

解析大型日志文件-Python

解析大型日志文件-Python,python,parsing,logfiles,Python,Parsing,Logfiles,我有一个防火墙日志文件,如下所示: “编号”、“时间”、“来源”、“目的地”、“协议”、“信息” “1”、“0.000000”、“172.16.113.168”、“172.16.112.50”、“TELNET”、“TELNET数据” …“2”、“0.000426”、“172.16.112.50”、“172.16.113.168”、“TELNET”、“TELNET” 数据……” “3”、“0.019849”、“172.16.113.168”、“172.16.112.50”、“TCP”、“21582

我有一个防火墙日志文件,如下所示:

“编号”、“时间”、“来源”、“目的地”、“协议”、“信息” “1”、“0.000000”、“172.16.113.168”、“172.16.112.50”、“TELNET”、“TELNET数据” …“2”、“0.000426”、“172.16.112.50”、“172.16.113.168”、“TELNET”、“TELNET” 数据……” “3”、“0.019849”、“172.16.113.168”、“172.16.112.50”、“TCP”、“21582>telnet” [ACK]序列=2Ack=2 Win=32120 Len=0“ “4”、“0.530125”、“172.16.113.168”、“172.16.112.50”、“TELNET”、“TELNET数据” …“5”、“0.530634”、“172.16.112.50”、“172.16.113.168”、“TELNET”、“TELNET” 数据…“6”、“0.549962”、“172.16.113.168”、“172.16.112.50”、“TCP”、“21582”

telnet[ACK]Seq=3 ACK=3 Win=32120 Len=0“

我希望能够运行文件的名称(我使用Linux)例如

log1.py logfile.csv(程序名后跟日志文件名) 并获得以下输出:

$log1.py logfile.csv 源IP目标IP协议计数

        0.0.0.0     255.255.255.255      BOOTP         20
    0.1.125.174         131.84.1.31        TCP          2
    192.168.1.1         172.168.1.2        TCP        100 

       (............lots more here .....................)

Oracle_89:a5:9f       3com_9c:b2:54        ARP         14

                                        Total:     649787
  172.16.112.50      202.77.162.213       ICMP          1
                                       Portmap          5
                                           RSH          9
                                       SADMIND          1
                                           TCP         30
                                        TELNET         41

                                        Total:         87
另一个非常有用的特性是,当我使用源IP地址和目标IP地址运行程序时。我希望输出类似于以下内容:

$log1.py 172.16.112.50 logfile.csv

      Source IP      Destination IP   Protocol      Count

  172.16.112.50      135.13.216.191        IMF          4
                                          SMTP         53
                                           TCP         43
                                        TELNET         35
        (............lots more here .....................)

                     172.16.112.194       SMTP          7
                                           TCP         42
                                        TELNET       3745

                                        Total:      38369
最后,我希望能够指定源IP地址和目标IP和地址,并获得以下输出:

$log1.py 172.16.112.50 202.77.162.213 packets.csv 源IP目标IP协议计数

        0.0.0.0     255.255.255.255      BOOTP         20
    0.1.125.174         131.84.1.31        TCP          2
    192.168.1.1         172.168.1.2        TCP        100 

       (............lots more here .....................)

Oracle_89:a5:9f       3com_9c:b2:54        ARP         14

                                        Total:     649787
  172.16.112.50      202.77.162.213       ICMP          1
                                       Portmap          5
                                           RSH          9
                                       SADMIND          1
                                           TCP         30
                                        TELNET         41

                                        Total:         87
我是一名初级系统管理员,在编程方面没有太多经验(只是HTML),我已经开始学习。但是,在过去的3天里,我一直在解决这个问题,以下是我迄今为止的经验:

# Function for validating IP address is valid or not 
def ip_validation(ip_address):
    ip_regex= re.match('^[\d]{1,3}[.][\d]{1,3}[.][\d]{1,3}[.][\d]{1,3}$', ip_address)
    return ip_regex
def filereader(file_name):
    file_dump= open(file_name,'r')
    for eachline in file_dump:
        line_a= eachline.replace('\"','') # removes all quotes from the file
        line_b= line_a.split(',') # Delimate each fild based on ','             
        src_ip= line_b[2] # Source IP
        dst_ip= line_b[3] # Destination IP
        prot= line_b[4] # Protocol
        eachline= src_ip, dst_ip, prot      
        itlist.append(eachline) 
        itlist.sort()
        print itlist

解析日志文件并创建列表列表,其中每个子列表包含(源IP、目标IP、协议、计数)

现在,您只需在这个外部列表上应用函数。
如果需要进一步澄清,请回复。

谢谢Palash我相信我已经创建了一个列表“itlist”包含(源ip、目标ip、协议)如何获得计数我需要设置一个控制中断来循环所有项目并对每个项目进行计数?我从理论上知道需要什么,但我就是不能让程序来做。哈哈,哦,我误解了。你没有准备好伯爵。我能看到的唯一方法是在排序的列表中循环,并动态计数。我相信日志文件是静态的,在您处理它时不会被更新;这可以在几行代码中完成。