• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Разбор логов и скан IP (Python)

Недавно столкнулся с проблемой, необходимо было достать и логов довольно большое кол.во айпишек и прогнать отфильтровать их по стране.
Так как лень и автоматизация это порой рядом стоящие слова, то я сразу вспомнил, что существует Python и решил делать авто.

Код хоть и на костылях но прекрастно работает, если кто допилит более быстрый вариант буду очень благодарен, ибо в отсеве падает скорость из за хранения в переменной большого кол.ва данных, но привилегия в том, что нет ограничение на кол.во ип.

В общем как то так.

Регулярочка для поиска ип в файле:
Код:
# import re
# with open("C:/Users/Mason/Desktop/python/Python/Search/access_log-20180813","r") as file:  #Путь к логу который должен находится в одном каталоге с скриптом
#     text = file.read()
# Ips=re.findall(r'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',text)
# file_with_ip=open("C:/___/____/_____/access_log-2018-ip.txt","a")    #Файл с результатом выполнения
# file_with_ip.write("\n".join(set(Ips)))
И сам серчер для отсева :
Код:
from ipwhois import IPWhois

#file_path="C:/___/____/____/result-error.txt"
file_path = input('Укажите имя файла :')

#ready_file_path="C:/___/____/____/result-ip-error.txt"
ready_file_path = input('Укажите финальный файл :' '')

with open(file_path,"r") as file:
    file_text=file.read()
ready_file=open(ready_file_path, "a")

ip_obj= IPWhois

for ip,i in zip(file_text.split("\n"),range(len(file_text.split("\n")))):
    try:
        info = ip_obj(ip).lookup_whois()["nets"][0]
    except:
        continue
    print('IP => %s  \n %s / 100' % (ip, int((i*100)/len(file_text.split("\n")))))
    print("Item %s: %s" % (i,int(len(file_text.split("\n")))))
    if ip:
        if info.get("country") == "UA":  # Указываете страну
            ready_file.write(str(
                    "\n\nIP ==> {ip} \nCity ==> {city} \nCountry ==> {country} \nRegion ==> {regionname} \nProvider ==> {ass} \nAddress ==> {address} \nIp range ==> {iprange} ").format(
                    ip=ip,
                    iprange=info["cidr"],
                    city=info["city"],
                    country=info["country"],
                    regionname=info["state"],
                    address=info["address"],
                    ass=info["name"],
                ))
Линг на либ : secynic/ipwhois

Вот как то так,если кому то действительно прегодится то ставте лукасы и будем думать дальше небольшие скриптосы.
Повторюсь , если кто то сделат более шустрым скрипт то буду благодарен!
 

explorer

Platinum
05.08.2018
1 080
2 472
BIT
0
Немного ликбеза - куски любого кода вставлять нужно в тег код, и выбрать Python в данном случае, чтобы отделять код от текста.

rjl.png

В самом конце лучше выкладывать код программы целиком. Если код длинный, убирать под спойлер. Тогда и читаться будет легко.
А так, любые программы это всегда хорошо ) Пишите ещё, применяя вышесказанное.
 
M

Masonskoe_loje

Немного ликбеза - куски любого кода вставлять нужно в тег код, и выбрать Python в данном случае, чтобы отделять код от текста.

Посмотреть вложение 23298
В самом конце лучше выкладывать код программы целиком. Если код длинный, убирать под спойлер. Тогда и читаться будет легко.
А так, любые программы это всегда хорошо ) Пишите ещё, применяя вышесказанное.
Рекомендации принял и усвоил. Благодарю за корективы.
 
  • Нравится
Реакции: explorer
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!