Инструменты пользователя

Инструменты сайта


python_cod

Python-ники

Проверка температуры в серверной

#!/usr/bin/env python
# coding=utf-8
 
from grab import Grab
import codecs
import os
 
g = Grab()
g.go('http://10.1.0.56/ups_env.htm', log_file='/tmp/out_serv.html')
t=open("/tmp/out_serv.html")
decoder = codecs.getdecoder('cp1251')
encoder = codecs.getencoder('utf-8')
 
def temperature():
    for i in t:
        s=0
        for ii in i:
            c=(i[s-6:s-4])
            if encoder(decoder(ii)[0])[0]=="°" and c.isdigit()==True:
                tem=i[s-6:s-2]
                gr= float(i[s-6:s-2])
                return gr
            s=s+1
 
print temperature()
os.remove('/tmp/out_serv.html')

Генератор каши из символов (паролей)

#!/usr/bin/env python
 
import random
 
Big_S=list('QWERTYUIOPASDFGHJKLZXCVBNM')
Low_S=list('qwertyuiopasdfghjklzxcvbnm')
Num_S=list('1234567890')
Spe_S=list('!@#$%^&*()')
 
lb=2
ll=2
ln=2
ls=2
 
Pass=""
PassA=""
 
def Big():
    for i in range(lb):
        global Pass
        n=random.randrange(len(Big_S))
        Pass=Pass+Big_S[n]
    return Pass
 
def Low():
    for i in range(ll):
        global Pass
        n=random.randrange(len(Low_S))
        Pass=Pass+Low_S[n]
    return Pass
 
def Num():
    for i in range(ln):
        global Pass
        n=random.randrange(len(Num_S))
        Pass=Pass+Num_S[n]
    return Pass
 
def Spe():
    for i in range(ls):
        global Pass
        n=random.randrange(len(Spe_S))
        Pass=Pass+Spe_S[n]
    return Pass
 
def All():
    global PassA
    if lb>0:
        PassA=Big()
    if ll>0:
        PassA=Low()
    if ln>0:
        PassA=Num()
    if ls>0:
        PassA=Spe()
    PassR=list(PassA)
    random.shuffle(PassR)
    PassEnd=""
    for i in range(len(PassR)):
        PassEnd=PassEnd+PassR[i]
    return PassEnd
 
print All()

Поиск в логах mail письма присланные\отправленные пользователю за необходимую дату

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
 
 
def date_interval(date_mail,mail_log):
    date = []
    mail_log_date = open(mail_log,"r")
    for line in mail_log_date:
        if date_mail in line:
            date.append(line)
 
    mail_log_date.close()
    mail_log_date = open("mail_log_date","w")
    mail_log_date.writelines(date)
    mail_log_date.close()
 
def to_user(user_to,date_mail):
    mail_log = open("mail_log_date","r")
    mail_user = []
    id_mail_all = []
    to_all = 0
    for line in mail_log:
        if "to=<" + user_to in line and "orig_to=<all" in line:
                to_all = 1
        if "to=<" + user_to in line and "orig_to=<all" not in line:
                id_mail = line.split()
                id_mail = id_mail[5]
                id_mail_all.append(id_mail)
    mail_log.close()
 
    for i in range(len(id_mail_all)):
        print "\nПисьмо №",i+1
        mail_log = open("mail_log_date","r")
        for line in mail_log:
                if id_mail_all[i] in line:
                    print line.replace("\n","")
        mail_log.close()
 
 
    if to_all == 0:
        print "\n\nПользователю",user_to,",было прислано",len(id_mail_all),"писем, сообщений на алиас all не было. Выборка за: ",date_mail,"\n\n"
    elif to_all == 1:
        print "\n\nПользователю",user_to,"было прислано",len(id_mail_all),"писем, сообщения на алиас all исключены из выборки. Выборка за: ",date_mail,"\n\n"
 
def from_user(user_from,date_mail):
    mail_log = open("mail_log_date","r")
    mail_user = []
    id_mail_all = []
    to_all = 0
    for line in mail_log:
        if "from=<" + user_from in line:
                id_mail = line.split()
                id_mail = id_mail[5]
                if id_mail <> "NOQUEUE:":
                        id_mail_all.append(id_mail)
    mail_log.close()
    for i in range(len(id_mail_all)):
        print "\nПисьмо №",i+1
        mail_log = open("mail_log_date","r")
        for line in mail_log:
                if id_mail_all[i] in line:
                    print line.replace("\n","")
        mail_log.close()
 
 
    print "\n\nОт",user_from,",было отправлено",len(id_mail_all),"писем. Выборка за:",date_mail,"\n\n"
 
 
def main():
    date = raw_input("Дата сообщения в формате Месяц дата:Aug 25 ,либо месяц:Aug ...:")
    user_to = raw_input("Получатель: ")
    user_from = raw_input("Отправитель: ")
    date_interval(date,"all")
    #to_user(user_to)
 
    if user_to <> "" and user_from == "":
        to_user(user_to,date)
    elif user_to == "" and user_from <> "":
        from_user(user_from,date)
 
    os.remove("mail_log_date")
 
main()

Удаление пользователя

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

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import getpass,datetime,subprocess
 
user_lock=0 #принимает значение 0 и 1, если пользователя нет либо не будем блокировать, то поиска в алиасах не осуществляется
 
def lock_user_passwd(user_del,file_passwd):
 
    """Блокируем пользователя в фале /etc/passwd
    пример заблокированной записи:
    #ivanovii:x:1:231:Иванов Иван Иванович:/home/ivanovii:/bin/false #УЗ Заблокированa 2015-01-22 # Пользователем: root"""
 
    global user_lock
 
    count_i = 0 #Считает строки
    count_i_str = None #Строка в коротой находится целевой пользователь
    root_user = getpass.getuser() # Ползователь который блокирует УЗ
    date = datetime.date.today() # Дата блокировки
    passwd = [] # Список в который читается файл passwd
    len_user_name = len(user_del)
    user_del = user_del.lower()
    user_pass = open (file_passwd,"r")
    user_b = 0
 
    for line in user_pass:
        passwd.append(line)
        if user_del in line:
            if line[0] == "#" and line[1:len_user_name+1] == user_del and line[len_user_name+1] == ":":
                print "Учетная запись уже заблокирована: "
                print line
                count_i_str = count_i
                user_b = 0
                user_lock = 0
            elif line[0:len_user_name] == user_del and line[len_user_name] == ":":
                count_i_str = count_i
                print "Учетная запись",user_del,"существует(строка",count_i_str,"):\n"
                print line
                answer = raw_input("блокируем? (y/n) ")
                while answer not in ("y","n"):
                    answer = raw_input("блокируем? (y/n) ")
                if answer == "y":
                    user_b = 1
                    user_lock = 1
                elif answer == "n":
                    print ("\nУЗ не будет заблокирована!")
                    user_b = 0
                    user_lock = 0
        count_i += 1
    user_pass.close()
 
    if count_i_str <> None:
        if user_b == 1:
            user_pass = open (file_passwd,"w")
            line_new = "#"+passwd[count_i_str].replace("\n","")+" #УЗ Заблокированa "+str(date)+" # Пользователем: "+root_user+"\n"
            print "\nУчетная запись заблокирована:"
            print line_new
            passwd[count_i_str] = line_new
            user_pass.writelines(passwd)
            user_pass.close()
 
        elif user_b == 0:
            pass
    else:
        print"Учетной записи ",user_del," не существует!"
 
def main():
    """Запускает остальные функции"""
 
    user_del = raw_input("Введите имя пользователя: ")
    while not user_del:
        user_del = raw_input("Введите имя пользователя: ")
    file_passwd = "/etc/pas"
    file_alias = "/etc/postfix/ali"
 
    lock_user_passwd(user_del,file_passwd)
    if user_lock == 1:
        lock_user_alias(user_del,file_alias)
    elif user_lock ==0:
        pass
 
 
def lock_user_alias(user_del,file_alias):
    """Ищет и удаляет пользователя из алиасов в postfix"""
 
    count_i = 0
    count_i_str = None
    alias=[]
    user_alias = open (file_alias,"r")
    alias_all = None
    print "Ищем УЗ в алиасах:\n"
    for line in user_alias:
        alias.append(line)
        count_i+=1
        if user_del in line:
            if line[0:4]=="all:":
                alias_all=1
                count_i_str=count_i
                print "alias all:..."
            else:
                print line
    user_alias.close()
 
    if count_i_str <> None:
        user_alias = open (file_alias,"w")
        user_del_all=user_del+","
        line_new = alias[count_i_str-1].replace(user_del_all,"")
        alias[count_i_str-1] = line_new
        user_alias.writelines(alias)
        user_alias.close()
        subprocess.call('newaliases', shell=True)
        print ("УЗ удалена из алиаса all, из остальных удалите вручную и выполните команду newalias\n")
    else:
        print("Удалите эти записи вручную и выполните команду newalias!")
 
main()

Поиск сессий по ip | пользователю на mail

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Скрипт для поиска в логе авторизации /var/log/auth/all.
 
В поле "Введите значение поиска:" необходимо задать.
    либо логин пользователя, будет поиск по сессиям с данным логином.
    либо ip, будет поиск по сессиям с данным ip.
 
Скрипт сам определяет, что задано для поиска: логин или ip дибо что то непонятное.
 
Вывод поиска:
    Время: Feb 4 10:00:38 ip: 10.10.10.10 пользователь: ivanovii
"""
 
import re
 
baza_ip_user={}
 
def analiz_stroki_ip(line,ip_input):
    if line.split()[5] == "START:":
        pid_re = re.compile("pid=([0-9][0-9][0-9][0-9][0-9]?)")
        reg_ip = re.compile("[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]")
        ip_find = reg_ip.findall(line)
        for i in ip_find:
            if i == ip_input:
                for i in pid_re.findall(line):
                    pid = i
                    baza_ip_user[pid]=[ip_input,line.split()[0],line.split()[1],line.split()[2]]
    elif line.split()[6] == "Authentication":
        pid_re = re.compile("popa3d\[([0-9][0-9][0-9][0-9][0-9]?)")
        user = line.split()[9]
        for i in pid_re.findall(line):
                pid = i
                if pid in baza_ip_user:
                    info = baza_ip_user.get(pid)
                    info.append(user)
                    baza_ip_user[pid]=info
                    all_info = baza_ip_user.get(pid)
                    print "Время:",all_info[1],all_info[2],all_info[3],"ip:",all_info[0],"пользователь:",all_info[4]
                    del baza_ip_user[pid]
 
def analiz_stroki_user(line,user_input):
    if line.split()[5] == "START:":
        pid_re = re.compile("pid=([0-9][0-9][0-9][0-9][0-9]?)")
        reg_ip = re.compile("[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]")
        ip_find = reg_ip.findall(line)
        for i in ip_find:
            ip_input = i
            for i in pid_re.findall(line):
                pid = i
                baza_ip_user[pid]=[ip_input,line.split()[0],line.split()[1],line.split()[2]]
    elif line.split()[6] == "Authentication":
        pid_re = re.compile("popa3d\[([0-9][0-9][0-9][0-9][0-9]?)")
        user = line.split()[9]
        for i in pid_re.findall(line):
                pid = i
                if pid in baza_ip_user:
                    info = baza_ip_user.get(pid)
                    info.append(user)
                    baza_ip_user[pid]=info
                    all_info = baza_ip_user.get(pid)
                    if all_info[4] == user_input:
                        print "Время:",all_info[1],all_info[2],all_info[3],"ip:",all_info[0],"пользователь:",all_info[4]
                        del baza_ip_user[pid]
                    else:
                        del baza_ip_user[pid]
 
def main():
 
    log_file = open("/var/log/auth/all","r")
    reg_ip = re.compile("[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]\.[12]?[0-9]?[0-9]")
    reg_user = re.compile("[A-za-z0-9]+")
 
    input_name=raw_input("Введите значение поиска:")
    if re.match(reg_ip,input_name)<>None:
        for line in log_file:
            analiz_stroki_ip(line,input_name)
 
    elif re.match(reg_user,input_name)<>None:
        for line in log_file:
            analiz_stroki_user(line,input_name)
    else:
        print "Введено неверное значение, перезапустите скрипт и повторите ввод!"
 
main()

Получение данных о курсе доллара\евро с сайта ЦБ

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import urllib
from xml.etree import ElementTree as ET
 
id_dollar = "R01235"
id_evro = "R01239"
 
valuta = ET.parse(urllib.urlopen("http://www.cbr.ru/scripts/XML_daily.asp?date_req"))
 
for  line in valuta.findall('Valute'):
    id_v = line.get('ID')
    if id_v == id_dollar:
        rub = line.find('Value').text
        print "\nКурс доллара",rub,"рублей"
    if id_v == id_evro:
        rub = line.find('Value').text
        print "\nКурс евро",rub,"рублей"

Отправка СМС через sms.ru

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
""" Автор Титов А.В. t_aleksandr_v@inbox.ru 17.02.2015
 
    Скрипт предназначен для отправки СМС через сайт sms.ru
    Принимает следующие аргументы:
 
    -i или --idsender - id ползователя на sms.ru
    -t или --to - номер телефона получателя в формате 79219996660
    -a или --subject - текст сообщения на латинице
"""
 
from urllib2 import urlopen
from optparse import OptionParser
 
 
def sendsms(idsender,subject,to):
 
    subject = subject.replace(" ","+")
    url="http://sms.ru/sms/send?api_id=%s&text=%s&to=%s" %(idsender,subject,to)
    res=urlopen(url)
 
if __name__ == '__main__':
 
    parser = OptionParser()
 
    parser.add_option("-i", "--idsender", dest="idsender", default="4011d481-c92z-0c24-69cf-2d044b78zzb0", help="ID user on sms.ru", metavar="IDSENDER")
    parser.add_option("-t", "--to", dest="to", default="79219993330", help="to telephone number", metavar="TO")
    parser.add_option("-s", "--subject", dest="subject", default="Hello", help="Name of subject", metavar="SUBJECT")
 
    (options, args) = parser.parse_args()
 
    sendsms(options.idsender,options.subject,options.to)
python_cod.txt · Последние изменения: 2016/08/08 10:33 — sander