python-호스트 공격 로그 분석, 공격 태세도 완성

4079 단어

어젯밤 서버 피격 사항을 접수합니다.


해커를 이용해 내 서버에 대한 공격을 완료하고 싶습니다.1. secure 로그 분석, 월, 날짜, IP 등 정보 추출
cat /var/log/secure |awk '{if($2 == 01)print  }' | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}' | awk -F[=] '{if($2 > 100)print  }'

2. 추출한 데이터를 데이터베이스에 저장한다.(현재 버전에서는 증량을 실현할 수 없음)
 python3 MySQLdb
   PyMySQL

PyMySQL 풋내기 튜토리얼 3, html로 페이지 보여주기.
   1.0 
# -*-coding:utf-8 -*-
# BY WANGCC

import re
from datetime import date
import pymysql

logfile = r'log.txt'
months = {
          'Jan':1,'Feb':2,'Mar':3,'Apr':4,'May':5,'Jun':6,
          'Jul':7,'Aug':8,'Sep':9,'Oct':10,'Nov':11,'Dec':12
         }
t = date.today()
month = t.strftime('%b')
day = t.strftime('%d')
month_days = {}


def read_file(file_name):
    pat = re.compile(' (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) ')
    lines = []
    f = open(file_name, 'r')
    line = f.readline()
    while line:
        line = f.readline()
        try:
            if line.split()[0] == month and (int(day) - int(line.split()[1])) < 7 and (int(day) - int(line.split()[1])) >= 0:
                if re.search(pat,line):
                     lines.append(line)
            elif (months[month] - months[line.split()[0]]) == 1 or (months[month] - months[line.split()[0]]) == -11:
                if (int(day) + month_days[line.split()[0]] - int(line.split()[1])) < 7 and re.search(pat,line):
                    lines.append(line)
        except IndexError:
            pass
    for line in lines:
        ip = re.findall(pat,line)[0]
        mysql(month, day, ip)
    label = f.tell()  #  
    f.close()

    return month,day,ip



def mysql(month,day,ip):

    #  
    db = pymysql.connect("127.0.0.1", "root", "tZQowE6p5#)t", "monitor", charset='utf8')
    #  cursor() 
    cursor = db.cursor()
    # SQL  
    #sql ="UPDATE monitor SET ip='20.20.20.20' WHERE id = '1'"   #update
    print((day))
    sql="insert into monitor(ip,month,day)value ('%s','%s','%s')"%(ip,month,day)
    try:
        print('try')
        #  sql 
        print(ip,month,day)
        cursor.execute(sql)
        #  
        db.commit()
        print('try--end')
    except Exception as e:
        print(e,' ')
        #  
        db.rollback()
    #  
    db.close()

if __name__ == '__main__':
    month,day,ip = read_file(logfile)


이것은 IP에 따라 소속 지리적 위치를 조회하는 것이다.

# -*-coding:utf-8 -*-
# BY WANGCC
import requests
import IPy


def get_location(ip):
    url = 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?co=&resource_id=6006&t=1529895387942&ie=utf8&oe=gbk&cb=op_aladdin_callback&format=json&tn=baidu&cb=jQuery110203920624944751099_1529894588086&_=1529894588088&query=%s' % ip
    # headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36'}
    r = requests.get(url)
    r.encoding = r.apparent_encoding
    html = r.text
    c1 = html.split('location":"')[1]
    c2 = c1.split('","')[0]
    return c2


def check_ip(ip):
    try:
        IPy.IP(ip)
        return True
    except Exception as e:
        print(e)
        return False


def ip_bae(ip):
    if check_ip(ip):
        return (get_location(ip))


if __name__ == '__main__':
    ip = '114.114.114.114'
    print(ip_bae(ip))

여기에 몇 가지 기록이 필요합니다. 1. 오랜 시간 동안 추출된 IP는 하나입니다. 이것은 목록에 데이터를 한 줄에 넣었기 때문입니다.2. 줄에 따라 파일을 읽을 때 빈 줄이면 프로그램이 오류를 보고합니다.try,except를 추가하면 이 문제를 피할 수 있습니다.3. 현재 파일을 읽을 때 읽기 시간과 증분 조회를 제어할 수 없습니다.4.re모듈은 다시 배워야 하는데 사실은 간단한 것이지만 오늘은 오후 내내 종잡을 수가 없어요.
실제 요소는 코드를 적게 쓴다.

좋은 웹페이지 즐겨찾기