python-호스트 공격 로그 분석, 공격 태세도 완성
어젯밤 서버 피격 사항을 접수합니다.
해커를 이용해 내 서버에 대한 공격을 완료하고 싶습니다.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모듈은 다시 배워야 하는데 사실은 간단한 것이지만 오늘은 오후 내내 종잡을 수가 없어요.
실제 요소는 코드를 적게 쓴다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.