Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 1, 2012 17:59:00

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

ip на мыло

Здравствуйте…

Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)

a = os.popen("ipconfig /all ")
for line in a.readlines():
print line

то бишь при смене ip отослать на почту новый ip адрес

Может записать все в файл, а его проверять на наличие любых изменений? Или изменение в строке проверить
    sp.append(line)
b=str(sp)
print b

Сам код отправки ip на мыло
# -*- coding: cp1251 -*-
import os
import smtplib
from email.MIMEText import MIMEText
import time




while True:
sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
sp+=line


# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = sp
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'

# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxxxx"

# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you

# отправка
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()

time.sleep(60)

Отредактировано sanodin (Июнь 1, 2012 20:39:43)

Офлайн

#2 Июнь 1, 2012 20:26:31

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

ip на мыло

Запишите в файл.



Офлайн

#3 Июнь 1, 2012 20:55:48

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

ip на мыло

В файл запишу, а как его проверять?В батнике такая проверка выглядела так:

ipconfig /all > 1.new.txt
set sendIP=1
if exist 1.txt (
fc /b 1.txt 1.new.txt >nul && set sendIP=0
del /f /q 1.txt
)
ren 1.new.txt 1.txt
if %sendIP%==1 (
blat.exe 1.txt -to sanodin@yandex.ru
if not %errorlevel%==0 del /f /q 1.txt
)
на питоне бы что то подобное…

Отредактировано sanodin (Июнь 1, 2012 20:56:17)

Офлайн

#4 Июнь 1, 2012 21:24:03

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

ip на мыло

while True:
    old_ip = read(file)
    current_ip = read('ipconfig')
    if old_ip != current_ip:
        send_mail('old_ip changed to current_ip')
    store(current_ip)
    sleep(10)

?



Отредактировано fata1ex (Июнь 1, 2012 21:25:01)

Офлайн

#5 Июнь 1, 2012 21:34:20

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

ip на мыло

fata1ex
while True:
    old_ip = read(file)
    current_ip = read('ipconfig')
    if old_ip != current_ip:
        send_mail('old_ip changed to current_ip')
    store(current_ip)
    sleep(10)

?

Проверю,отпишусь,спасибо…

Офлайн

#6 Июнь 2, 2012 10:15:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

ip на мыло

sanodin
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
приведи вывод ipconfig /all
и пример того, что нужно сравнить



Отредактировано py.user.next (Июнь 2, 2012 10:16:12)

Офлайн

#7 Июнь 2, 2012 13:52:03

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

ip на мыло

py.user.next
sanodin
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
приведи вывод ipconfig /all
и пример того, что нужно сравнить

Вывод:
Настройка протокола IP для Windows

Имя компьютера . . . . . . . . . : best-e87b585a9d
Основной DNS-суффикс . . . . . . :
Тип узла. . . . . . . . . . . . . : неизвестный
IP-маршрутизация включена . . . . : да
WINS-прокси включен . . . . . . . : нет

Подключение по локальной сети - Ethernet адаптер:

DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : Realtek RTL8168/8111 PCI-E Gigabit Ethernet NIC
Физический адрес. . . . . . . . . : 00-1D-92-60-06-FC
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : 192.168.0.1
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . :

Utel - PPP адаптер:

DNS-суффикс этого подключения . . :
Описание . . . . . . . . . . . . : WAN (PPP/SLIP) Interface
Физический адрес. . . . . . . . . : 00-53-45-00-00-00
Dhcp включен. . . . . . . . . . . : нет
IP-адрес . . . . . . . . . . . . : xx.203.172.84
Маска подсети . . . . . . . . . . : 255.255.255.255
Основной шлюз . . . . . . . . . . : xx.203.172.xx
DNS-серверы . . . . . . . . . . . : 213.179.249.151
213.179.249.152
Основной WINS-сервер . . . . . . : 10.11.12.13
Дополнительный WINS-сервер. . . . : 10.11.12.14
NetBIOS через TCP/IP. . . . . . . : отключен

Нужен ip адрес как статический так и динамический любого подключения
Этот отчет приходит на мыло только в том случае если изменился адрес а не по тайму,проверка проходит каждый цикл и если адрес изменился то повторный отчет должен уходить на мыло с новым адресом

Отредактировано sanodin (Июнь 2, 2012 13:59:55)

Офлайн

#8 Июнь 2, 2012 15:37:59

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

ip на мыло

Рабочий вариант кода…прошу дать советы по оптимизации и указать на ошибки

# -*- coding: cp1251 -*-
import os
import smtplib
from email.MIMEText import MIMEText
import time

sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
sp+=line

file=open('1.txt','wb')
file.write(sp)
file.close()

# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = sp
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'

# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxx"

# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you

# отправка
try:
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()

except StandardError, exc:
pass


while True:
def ttt():
so=""
k = os.popen("ipconfig /all ")
for lin in k.readlines():
so+=lin
return so
def mail(so):
# отправитель
me = 'sanodin@yandex.ua'
# получатель
you = 'sanodin@yandex.ua'
# текст письма
text = so
#text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Отчет ip'

# параметры SMTP-сервера
server = "213.180.204.38" # "smtp.yandex.ua"
port = 25
user_name = "sanodin"
user_passwd = "xxxxxx"

# формирование сообщения
msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
try:
s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
except StandardError, exc:
pass

fil=open('1.txt','rb')
old_ip = fil.read()
fil.close()
current_ip = ttt()
if old_ip != current_ip:
mail(ttt())
file=open('1.txt','wb')
file.write(ttt())
file.close()

time.sleep(20)

Офлайн

#9 Июнь 2, 2012 15:47:45

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

ip на мыло


если программа не закрывается можно не сохранять данные в файл

while True:
    def ttt():
        ...
    def mail(so):
зачем переопределять функции внутри цикла?

def ttt():
        so=""
        k = os.popen("ipconfig /all ")
        for lin in k.readlines():
            so+=lin
        return so
def ttt():
        return os.popen("ipconfig /all ").read()
     
?


можно использовать re для поиска айпишников



Отредактировано sp3 (Июнь 2, 2012 15:48:44)

Офлайн

#10 Июнь 2, 2012 15:56:52

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

ip на мыло

+
Посмотрите на subprocess, контекстные менеджеры, pep8 и comprehensions.

Например:

sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
    sp+=line
sp = ''.join(a.readlines())

Ну а так, всё нормально, если программа работает. Остальное придёт с опытом/практикой.



Отредактировано fata1ex (Июнь 2, 2012 15:57:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version