Найти - Пользователи
Полная версия: ip на мыло
Начало » Python для новичков » ip на мыло
1 2
sanodin
Здравствуйте…

Подскажите как при изменении переменной в цикле 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)
fata1ex
Запишите в файл.
sanodin
В файл запишу, а как его проверять?В батнике такая проверка выглядела так:
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
)
на питоне бы что то подобное…
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)

?
sanodin
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)

?

Проверю,отпишусь,спасибо…
py.user.next
sanodin
Подскажите как при изменении переменной в цикле for выполнить условие одно или другое в зависимости от того изменился ли параметр(переменная)
приведи вывод ipconfig /all
и пример того, что нужно сравнить
sanodin
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
Рабочий вариант кода…прошу дать советы по оптимизации и указать на ошибки
# -*- 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)
sp3

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

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 для поиска айпишников

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

Например:
sp=""
a = os.popen("ipconfig /all ")
for line in a.readlines():
    sp+=line
sp = ''.join(a.readlines())

Ну а так, всё нормально, если программа работает. Остальное придёт с опытом/практикой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB