2017-09-20 8 views
0

pcap에서 csv로 변환 된 매우 큰 csv 파일로 가득 찬 디렉토리가 있습니다.pcap로 가득 찬 디렉토리에서 csv 파일로 가장 일반적인 ip 가져 오기

나는 그 디렉토리에있는 각 csv 파일을 반복하고 가장 일반적인 소스 IP 주소 (2 열)를 얻으려고합니다.

현재 내 파일은 시작하기 전에 다음 파일에 각 파일의 값을 덤프하도록 관리했기 때문에 올바르지 않습니다. 각각의 파일은 동일한 IP를 가지고있는 것으로 보이며 그렇지 않습니다.

ipCounter = collections.Counter() 

#iterate through all of the files in the directory, using glob 
for filename in glob.glob('/path/to/directory/*'): 
    with open(filename) as input_file: 
     #skip column titles 
     input_file.next() 

     for row in csv.reader(input_file, delimiter=','): 
      ipCounter[row[2]] += 1 

    print 'Source IPs most common in: %s' % filename 
    print ipCounter.most_common() 

나는 정확히 파이썬 프로 아니에요, 그래서이 작업을 수행 할 수있는 더 좋은 방법이있을 수있다, 그러나 이것은 내가 지금까지 들어 왔 것입니다.

답변

1

당신의 접근 방식은 괜찮아 보입니다. for 루프 내에서 카운터를 이동해야하지만 파일 당 most_common()을 수행하려는 경우 또는 두 개의 카운터, 하나 당신에게 파일 당 총을주고, 초 전체 폴더 당신에게 전체 수를주고 있습니다

Source IPs most common in: ips.csv 
    1.1.1.1 2 
    1.2.3.4 1 
    1.4.2.3 1 

Source IPs most common in: ips2.csv 
    1.1.1.1 2 
    1.2.3.4 1 
    1.4.2.3 1 

Overall IPs most common: 
    1.1.1.1 4 
    1.2.3.4 2 
    1.4.2.3 2 

당신은 할 수 : 당신과 같은 출력을 줄 것이다

import collections 
import glob 

ip_counter_all = collections.Counter()  

for filename in glob.glob('ip*.csv'): 
    ip_counter = collections.Counter() 

    with open(filename) as input_file: 
     csv_input = csv.reader(input_file) 
     header = next(csv_input) 

     for row in csv_input: 
      ip_counter[row[2]] += 1 

    ip_counter_all.update(ip_counter) 

    print '\nSource IPs most common in: {}'.format(filename) 

    for ip_addr, count in ip_counter.most_common(): 
     print " {} {}".format(ip_addr, count) 

print '\nOverall IPs most common:' 

for ip_addr, count in ip_counter_all.most_common(): 
    print " {} {}".format(ip_addr, count) 

또한 새로운 format() 문자열을 표시하는 방법을 사용하십시오.