Страница 1 из 1

Получение и отправка динамического IP на е-mail и jabber

Добавлено: 22 авг 2010, 01:45
Infernal Flame
Долгое время заботила мысль как получать ИП домашнего сервака подключенного к анлиму, но не имеющего статического адреса.
в итоге было перерыто куча всего чего можно и нельзя. Вполть до того что юзал телнет для подключения к почтовому серву..
вот в итоге что теперь имеем

основной скрипт, используемый в кроне:

Код: Выделить всё

#!/bin/bash

LAST_IP=`cat /root/last_ip`
INTERFACE="ppp0"
STRING=`ifconfig $INTERFACE | grep "inet addr"`

IP=`echo $STRING | gawk -F: '{print $2}' | gawk -F' ' '{print $1}'`;
if [ "$LAST_IP" != "$IP" ]; then
    #IP was changed - save it

        echo $IP > /root/last_ip
## save ip for web
    echo '<html><head><title>' $IP '</title></head><body>' $IP '</body></html>' > /srv/www/htdocs/index.html;
## send ip to e-mail
/usr/local/bin/sendEmail -f адрес@отправителя -t адрес@получателя -o message-charset=utf-8 -u "New IP address at home" -o message-file=last_ip -o message-format=text/html -s смтп.сервер.отправителя -o tls=no -xu логин_на_сервере_отправителя -xp пароль_на_сервере_отправителя -l log.txt
## send ip to jabber
/root/jsend in.flame@jabber.sysadmins.el.kg $IP
fi
как видно, из не стандартного в скрипте используются программа sendEmail, которую берем в треше и прога на питоне, листинг которой ниже, которая кстати сказать, требует библиотеку xmpppy

Код: Выделить всё

#!/usr/bin/python
import sys,os,xmpp,time,ConfigParser

name = os.path.basename(sys.argv[0])

if len(sys.argv) < 2:
    print "Send a message via Jabber (XMPP)"
    print "Syntax:", name, "JID text"
    print "JID\trecipient's Jabber ID"
    print "text\tmessage, use '-' for stdin"
    sys.exit(0)

toJID = sys.argv[1]
if sys.argv[2] == '-':
    text = ' '.join(sys.stdin.readlines())
else:
    text = ' '.join(sys.argv[2:])

configFile = os.path.join(os.environ['HOME'], '.' + name)
config = ConfigParser.RawConfigParser()

try:
    config.read(configFile)
    fromJID = config.get('Connection', 'JID')
    password = config.get('Connection', 'Password')
except:
    print "Default configuration was written to", configFile
    config.add_section('Connection')
    config.set('Connection', 'JID', 'user@example.com/home')
    config.set('Connection', 'Password', '********')
    f = file(configFile, 'w')
    config.write(f)
    f.close()
    sys.exit(0)

fromJID = xmpp.protocol.JID(fromJID)
client = xmpp.Client(fromJID.getDomain(),debug=[])

conn = client.connect()
if not conn:
    print 'Could not connect!'
    sys.exit(1)
print 'Connected with', conn

auth = client.auth(fromJID.getNode(), password, resource=fromJID.getResource())
if not auth:
    print 'Could not authenticate!'
    sys.exit(1)
print 'Authenticated using', auth

messageID = client.send(xmpp.protocol.Message(toJID, text))
print 'Message was sent'

time.sleep(1)
client.disconnect()
по части sendEmail писать нечего - скачали, распаковали, юзаем...

по части jsend...

После первого запуска утилита создаёт в домашнем каталоге файл с JID и паролем отправителя. Это удобнее, чем вводить пароль в качестве параметра командной строки, так как в этом случае никто не сможет его подсмотреть. Да и доступ к файлу можно будет закрыть. Файл получит имя, совпадающее с именем скрипта, но с точкой впереди, чтобы не отображаться лишний раз в списке файлов. В моём случае имя будет «/root/.jsend». Естественно, файл после первого запуска нужно будет открыть и вписать свои JID и пароль.

Формат запуска скрипта:
jsend JID text

JID — это идентификатор получателя сообщения, а text — это собственно текст, который нужно отправить.

Re: Получение и отправка динамического IP на е-mail и jabber

Добавлено: 22 авг 2010, 01:51
Infernal Flame
вся эта тягомуть проверена на моем работающем домашнем серваке под управлением Slackware 13.0 "стандартной комплектации" пока что нареканий в работе не вызывает...
любые комменты и доработки приветствуются :)

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

Re: Получение и отправка динамического IP на е-mail и jabber

Добавлено: 23 авг 2010, 08:55
Raven
Гоголь спас? :-D

Re: Получение и отправка динамического IP на е-mail и jabber

Добавлено: 23 авг 2010, 09:19
Infernal Flame
Raven
как и всегда