免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2663 | 回复: 0
打印 上一主题 下一主题

帖个刚写的脚本:按IP分类、再按端口分类汇总、排序输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-06 17:06 |只看该作者 |倒序浏览
说明:
1。按IP对数据文件分类
2。对初次分类文件再按端口分类、统计、排序、输出排名在11位以前的
  1. #!/usr/bin/python
  2. # -*- coding: cp936 -*-
  3. #diff_nights.py  write by rwx_hc 2006-11-05
  4. #此程序用于统计输出夜间访问记录
  5. #本程序雏形由weqboy提供
  6. import string
  7. import sys
  8. import os #处理路径分割符
  9. import time #延时处理

  10. #定义数据文件和比对文件路径
  11. path_input = '..' + os.sep + 'input' + os.sep
  12. path_dat = '..' + os.sep + 'dat' + os.sep

  13. #从config.txt读入配置,取得日期数据
  14. try:
  15.     f_config = file('..' + os.sep + 'config.txt')
  16.     config_list = f_config.readlines()
  17.     f_config.close()
  18. except IOError:
  19.     print 'Error:config.txt could not opened!'
  20.     sys.exit()   
  21. str_date = config_list[1][0:-1]#取得日期

  22. #定义原始数据文件名
  23. str_file_data = path_input + 'nights_' + str_date + '.csv'

  24. #定义比对文件,五大系统的IP文件
  25. file_bi_ip = path_dat + 'bi_ip.dat'
  26. file_mis_ip = path_dat + 'mis_ip.dat'
  27. file_crm_ip = path_dat + 'crm_ip.dat'
  28. file_intelligent_ip = path_dat + 'intelligent_ip.dat'
  29. file_cmod_ip = path_dat + 'cmod_ip.dat'
  30. file_boss3_ip = path_dat + 'boss3_ip.dat'
  31. file_boss_ip = path_dat + 'boss_ip.dat'                  
  32.                   

  33. #定义函数filter_ip,区分IP输出数据文件
  34. def filter_ip(file_data):
  35.     #打开IP文件存入不同列表
  36.     try:
  37.         f_bi_ip = file(file_bi_ip, 'r')
  38.         bi_ip_list = f_bi_ip.readlines()
  39.         f_bi_ip.close()
  40.         
  41.         f_mis_ip = file(file_mis_ip, 'r')
  42.         mis_ip_list = f_mis_ip.readlines()
  43.         f_mis_ip.close()
  44.         
  45.         f_crm_ip = file(file_crm_ip, 'r')
  46.         crm_ip_list = f_crm_ip.readlines()
  47.         f_crm_ip.close()
  48.         
  49.         f_intelligent_ip = file(file_intelligent_ip, 'r')
  50.         intelligent_ip_list = f_intelligent_ip.readlines()
  51.         f_intelligent_ip.close()
  52.         
  53.         f_cmod_ip = file(file_cmod_ip, 'r')
  54.         cmod_ip_list = f_cmod_ip.readlines()
  55.         f_cmod_ip.close()
  56.         
  57.         f_boss_ip = file(file_boss_ip, 'r')
  58.         boss_ip_list = f_boss_ip.readlines()
  59.         f_boss_ip.close()
  60.         
  61.         f_boss3_ip = file(file_boss3_ip, 'r')
  62.         boss3_ip_list = f_boss3_ip.readlines()
  63.         f_boss3_ip.close()           
  64.   
  65.     except IOError:
  66.         print 'Error:ip_file could not opened!'
  67.         sys.exit     
  68.    
  69.     #只读方式打开数据文件
  70.     try:
  71.         f_data = file(file_data, 'r')
  72.         #filelist=fsock.readlines()
  73.         #fsock.close()
  74.     except IOError:
  75.         print 'Error:data_file could not opened!'
  76.         sys.exit()
  77.    
  78.     #处理数据文件
  79.     str_title = f_data.readline() #得到标题栏
  80.    
  81.     #新建文件以写入数据
  82.     f_bi_all = file(path_input + 'bi_ip_' + str_date, 'w')   
  83.     f_mis_all = file(path_input + 'mis_ip_' + str_date, 'w')   
  84.     f_crm_all = file(path_input + 'crm_ip_' + str_date, 'w')   
  85.     f_intelligent_all = file(path_input + 'intelligent_ip_' + str_date, 'w')   
  86.     f_cmod_all = file(path_input + 'cmod_ip_' + str_date, 'w')        
  87.     f_boss_all = file(path_input + 'boss_ip_' + str_date, 'w')   
  88.     f_boss3_all = file(path_input + 'boss3_ip_' + str_date, 'w')
  89.    
  90.     #写入标题栏
  91.     f_bi_all.write(str_title)
  92.     f_mis_all.write(str_title)
  93.     f_crm_all.write(str_title)
  94.     f_intelligent_all.write(str_title)
  95.     f_cmod_all.write(str_title)
  96.     f_boss_all.write(str_title)
  97.     f_boss3_all.write(str_title)
  98.    
  99.     #数据部分
  100.    
  101.     while True:
  102.         line = f_data.readline()
  103.         if len(line) == 0: # 文件尾退出
  104.             break
  105.         tmp = line.split('|')
  106.         if(len(tmp) < 4):
  107.             continue
  108.         else:
  109.             tmp = tmp[2] + '\n' #IP文件得到的列表元素都含有一个'\n'
  110.         if tmp in bi_ip_list:
  111.             f_bi_all.write(line)
  112.             continue
  113.         if tmp in mis_ip_list:
  114.             f_mis_all.write(line)
  115.             continue
  116.         if tmp in crm_ip_list:
  117.             f_crm_all.write(line)
  118.             continue
  119.         if tmp in intelligent_ip_list:
  120.             f_intelligent_all.write(line)
  121.             continue
  122.         if tmp in cmod_ip_list:
  123.             f_cmod_all.write(line)
  124.             continue
  125.         if tmp in boss_ip_list:
  126.             f_boss_all.write(line)
  127.             continue
  128.         if tmp in boss3_ip_list:
  129.             f_boss3_all.write(line)
  130.             continue
  131.    
  132.     #关闭文件
  133.     f_data.close() # close the file
  134.     f_bi_all.close()
  135.     f_mis_all.close()
  136.     f_crm_all.close()
  137.     f_intelligent_all.close()
  138.     f_cmod_all.close()
  139.     f_boss_all.close()
  140.     f_boss3_all.close()     
  141.      
  142. #filter_ip函数结束


  143. #定义filter_port函数
  144. def filter_port(file_data):
  145.     #只读方式打开数据文件
  146.     try:
  147.         f_data = file(path_input + file_data + str_date, 'r')        
  148.     except IOError:
  149.         print 'Error:' + path_input + file_data + str_date + 'could not opened!'
  150.         sys.exit()
  151.    
  152.     #处理数据文件
  153.     str_title = f_data.readline()
  154.     str_title = 'user_id|user_name|count|uplen|downlen\n'#得到标题栏
  155.     #新建文件以写入数据
  156.     f_port_all = file(path_input + 'all_' + file_data + str_date + '.csv', 'w')
  157.     f_port_telnet = file(path_input + 'telnet_' + file_data + str_date + '.csv', 'w')
  158.     f_port_ftp = file(path_input + 'ftp_' + file_data + str_date + '.csv', 'w')
  159.     f_port_oracle = file(path_input + 'oracle_' + file_data + str_date + '.csv', 'w')
  160.     f_port_db2 = file(path_input + 'db2_' + file_data + str_date + '.csv', 'w')
  161.     f_port_1445 = file(path_input + '1445_' + file_data + str_date + '.csv', 'w')   
  162.    
  163.     #写入标题栏
  164.     f_port_all.write(str_title)
  165.     f_port_telnet.write(str_title)
  166.     f_port_ftp.write(str_title)
  167.     f_port_oracle.write(str_title)
  168.     f_port_db2.write(str_title)
  169.     f_port_1445.write(str_title)
  170.    
  171.     dic_user_all = {} #用字典类保存用户ID-访问次数
  172.     dic_user_telnet = {}
  173.     dic_user_ftp = {}
  174.     dic_user_oracle = {}
  175.     dic_user_db2 = {}
  176.     dic_user_1445 = {}
  177.    
  178.     dic_username_all = {} #用字典类保存用户ID-用户名
  179.     dic_username_telnet = {}
  180.     dic_username_ftp = {}
  181.     dic_username_oracle = {}
  182.     dic_username_db2 = {}
  183.     dic_username_1445 = {}
  184.    
  185.     dic_uplen_all = {} #用字典类保存上行数据
  186.     dic_uplen_telnet = {}
  187.     dic_uplen_ftp = {}
  188.     dic_uplen_oracle = {}
  189.     dic_uplen_db2 = {}
  190.     dic_uplen_1445 = {}
  191.    
  192.     dic_downlen_all = {} #用字典类保存下行数据
  193.     dic_downlen_telnet = {}
  194.     dic_downlen_ftp = {}
  195.     dic_downlen_oracle = {}
  196.     dic_downlen_db2 = {}
  197.     dic_downlen_1445 = {}
  198.         
  199.     #数据部分   
  200.     while True:
  201.         line = f_data.readline()
  202.         
  203.         if len(line) == 0: # 文件尾退出
  204.             break
  205.         
  206.         tmp = line.split('|') #取得一行记录字段列表
  207.         
  208.         #all
  209.         if(dic_user_all.has_key(tmp[0])):#所有端口访问次数统计
  210.             dic_user_all[tmp[0]] += 1
  211.         else:
  212.             dic_user_all[tmp[0]] = 1
  213.         
  214.         dic_username_all[tmp[0]] = tmp[1]#用户ID与用户名关联
  215.         
  216.         if(dic_uplen_all.has_key(tmp[0])):#所有端口上行流量求和
  217.             dic_uplen_all[tmp[0]] += long(tmp[4])
  218.         else:
  219.             dic_uplen_all[tmp[0]] = long(tmp[4])
  220.         
  221.         if(dic_downlen_all.has_key(tmp[0])):#所有端口下行流量求和
  222.             dic_downlen_all[tmp[0]] += long(tmp[5])
  223.         else:
  224.             dic_downlen_all[tmp[0]] = long(tmp[5])
  225.         
  226.         #telnet
  227.         if tmp[3] == '23':
  228.             if(dic_user_telnet.has_key(tmp[0])):
  229.                 dic_user_telnet[tmp[0]] += 1
  230.             else:
  231.                 dic_user_telnet[tmp[0]] = 1
  232.             
  233.             dic_username_telnet[tmp[0]] = tmp[1]#用户ID与用户名关联
  234.             
  235.             if(dic_uplen_telnet.has_key(tmp[0])):#23端口上行流量求和
  236.                 dic_uplen_telnet[tmp[0]] += long(tmp[4])
  237.             else:
  238.                 dic_uplen_telnet[tmp[0]] = long(tmp[4])
  239.         
  240.             if(dic_downlen_telnet.has_key(tmp[0])):#23端口下行流量求和
  241.                 dic_downlen_telnet[tmp[0]] += long(tmp[5])
  242.             else:
  243.                 dic_downlen_telnet[tmp[0]] = long(tmp[5])
  244.             continue
  245.         
  246.         #ftp
  247.         if tmp[3] == '21':
  248.             if(dic_user_ftp.has_key(tmp[0])):
  249.                 dic_user_ftp[tmp[0]] += 1
  250.             else:
  251.                 dic_user_ftp[tmp[0]] = 1
  252.             
  253.             dic_username_ftp[tmp[0]] = tmp[1]#用户ID与用户名关联
  254.             
  255.             if(dic_uplen_ftp.has_key(tmp[0])):#23端口上行流量求和
  256.                 dic_uplen_ftp[tmp[0]] += long(tmp[4])
  257.             else:
  258.                 dic_uplen_ftp[tmp[0]] = long(tmp[4])
  259.         
  260.             if(dic_downlen_ftp.has_key(tmp[0])):#23端口下行流量求和
  261.                 dic_downlen_ftp[tmp[0]] += long(tmp[5])
  262.             else:
  263.                 dic_downlen_ftp[tmp[0]] = long(tmp[5])
  264.             continue
  265.         
  266.         #oracle
  267.         if tmp[3] == '1521':
  268.             if(dic_user_oracle.has_key(tmp[0])):
  269.                 dic_user_oracle[tmp[0]] += 1
  270.             else:
  271.                 dic_user_oracle[tmp[0]] = 1
  272.             
  273.             dic_username_oracle[tmp[0]] = tmp[1]#用户ID与用户名关联
  274.             
  275.             if(dic_uplen_oracle.has_key(tmp[0])):#23端口上行流量求和
  276.                 dic_uplen_oracle[tmp[0]] += long(tmp[4])
  277.             else:
  278.                 dic_uplen_oracle[tmp[0]] = long(tmp[4])
  279.         
  280.             if(dic_downlen_oracle.has_key(tmp[0])):#23端口下行流量求和
  281.                 dic_downlen_oracle[tmp[0]] += long(tmp[5])
  282.             else:
  283.                 dic_downlen_oracle[tmp[0]] = long(tmp[5])
  284.             continue
  285.         
  286.         #db2
  287.         if tmp[3] in ('50000','51000','56000','58000','60000'):
  288.             if(dic_user_db2.has_key(tmp[0])):
  289.                 dic_user_db2[tmp[0]] += 1
  290.             else:
  291.                 dic_user_db2[tmp[0]] = 1
  292.             
  293.             dic_username_db2[tmp[0]] = tmp[1]#用户ID与用户名关联
  294.             
  295.             if(dic_uplen_db2.has_key(tmp[0])):#23端口上行流量求和
  296.                 dic_uplen_db2[tmp[0]] += long(tmp[4])
  297.             else:
  298.                 dic_uplen_db2[tmp[0]] = long(tmp[4])
  299.         
  300.             if(dic_downlen_db2.has_key(tmp[0])):#23端口下行流量求和
  301.                 dic_downlen_db2[tmp[0]] += long(tmp[5])
  302.             else:
  303.                 dic_downlen_db2[tmp[0]] = long(tmp[5])
  304.             continue
  305.         
  306.         #1445
  307.         if tmp[3] == '1445':
  308.             if(dic_user_1445.has_key(tmp[0])):
  309.                 dic_user_1445[tmp[0]] += 1
  310.             else:
  311.                 dic_user_1445[tmp[0]] = 1
  312.             
  313.             dic_username_1445[tmp[0]] = tmp[1]#用户ID与用户名关联
  314.             
  315.             if(dic_uplen_1445.has_key(tmp[0])):#23端口上行流量求和
  316.                 dic_uplen_1445[tmp[0]] += long(tmp[4])
  317.             else:
  318.                 dic_uplen_1445[tmp[0]] = long(tmp[4])
  319.         
  320.             if(dic_downlen_1445.has_key(tmp[0])):#23端口下行流量求和
  321.                 dic_downlen_1445[tmp[0]] += long(tmp[5])
  322.             else:
  323.                 dic_downlen_1445[tmp[0]] = long(tmp[5])
  324.             continue
  325.     f_data.close()
  326.         
  327.     #生成uplen列表并逆排序
  328.     #get all
  329.     value_list_uplen_all = dic_uplen_all.values()
  330.     value_list_uplen_all.sort(reverse=True)
  331.     value_list_uplen_all = value_list_uplen_all[:11]
  332.     for user in dic_user_all:
  333.         if dic_uplen_all[user] in value_list_uplen_all:
  334.             strtmp = user + '|' + dic_username_all[user] + '|' + str(dic_user_all[user]) \
  335.             + '|' + str(dic_uplen_all[user]) + '|' + str(dic_downlen_all[user]) + '\n'
  336.             f_port_all.write(strtmp)
  337.     f_port_all.close()
  338.    
  339.     #get telnet
  340.     value_list_uplen_telnet = dic_uplen_telnet.values()
  341.     value_list_uplen_telnet.sort(reverse=True)
  342.     value_list_uplen_telnet = value_list_uplen_telnet[:11]
  343.     for user in dic_user_telnet:
  344.         if dic_uplen_telnet[user] in value_list_uplen_telnet:
  345.             strtmp = user + '|' + dic_username_telnet[user] + '|' + str(dic_user_telnet[user]) \
  346.             + '|' + str(dic_uplen_telnet[user]) + '|' + str(dic_downlen_telnet[user]) + '\n'
  347.             f_port_telnet.write(strtmp)
  348.     f_port_telnet.close()
  349.    
  350.     #get ftp
  351.     value_list_uplen_ftp = dic_uplen_ftp.values()
  352.     value_list_uplen_ftp.sort(reverse=True)
  353.     value_list_uplen_ftp = value_list_uplen_ftp[:11]
  354.     for user in dic_user_ftp:
  355.         if dic_uplen_ftp[user] in value_list_uplen_ftp:
  356.             strtmp = user + '|' + dic_username_ftp[user] + '|' + str(dic_user_ftp[user]) \
  357.             + '|' + str(dic_uplen_ftp[user]) + '|' + str(dic_downlen_ftp[user]) + '\n'
  358.             f_port_ftp.write(strtmp)
  359.     f_port_ftp.close()
  360.    
  361.     #get oracle
  362.     value_list_uplen_oracle = dic_uplen_oracle.values()
  363.     value_list_uplen_oracle.sort(reverse=True)
  364.     value_list_uplen_oracle = value_list_uplen_oracle[:11]
  365.     for user in dic_user_oracle:
  366.         if dic_uplen_oracle[user] in value_list_uplen_oracle:
  367.             strtmp = user + '|' + dic_username_oracle[user] + '|' + str(dic_user_oracle[user]) \
  368.             + '|' + str(dic_uplen_oracle[user]) + '|' + str(dic_downlen_oracle[user]) + '\n'
  369.             f_port_oracle.write(strtmp)
  370.     f_port_oracle.close()
  371.    
  372.     #get db2
  373.     value_list_uplen_db2 = dic_uplen_db2.values()
  374.     value_list_uplen_db2.sort(reverse=True)
  375.     value_list_uplen_db2 = value_list_uplen_db2[:11]
  376.     for user in dic_user_db2:
  377.         if dic_uplen_db2[user] in value_list_uplen_db2:
  378.             strtmp = user + '|' + dic_username_db2[user] + '|' + str(dic_user_db2[user]) \
  379.             + '|' + str(dic_uplen_db2[user]) + '|' + str(dic_downlen_db2[user]) + '\n'
  380.             f_port_db2.write(strtmp)
  381.     f_port_db2.close()
  382.    
  383.     #get 1445
  384.     value_list_uplen_1445 = dic_uplen_1445.values()
  385.     value_list_uplen_1445.sort(reverse=True)
  386.     value_list_uplen_1445 = value_list_uplen_1445[:11]
  387.     for user in dic_user_1445:
  388.         if dic_uplen_1445[user] in value_list_uplen_1445:
  389.             strtmp = user + '|' + dic_username_1445[user] + '|' + str(dic_user_1445[user]) \
  390.             + '|' + str(dic_uplen_1445[user]) + '|' + str(dic_downlen_1445[user]) + '\n'
  391.             f_port_1445.write(strtmp)
  392.     f_port_1445.close()   
  393. #filter_port函数结束


  394. #程序体部分
  395. start_time = time.time()#记录程序开始时间
  396. #调用filter_ip()函数
  397. filter_ip(str_file_data)
  398. #调用filter_port()函数
  399. filter_port('bi_ip_')
  400. filter_port('mis_ip_')
  401. filter_port('crm_ip_')
  402. filter_port('intelligent_ip_')
  403. filter_port('cmod_ip_')
  404. filter_port('boss_ip_')
  405. filter_port('boss3_ip_')
  406. #记录程序结束时间
  407. end_time = time.time()
  408. #计算程序耗时并输出信息
  409. used_time = str(end_time - start_time)
  410. print '成功完成夜间访问记录文件比对操作' + '数据文件日期:' + str_date + ' 程序用时:' + used_time + '秒'
  411. time.sleep(3)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP