Push- notification med IP-adress

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Trumstock
Inlägg: 15
Blev medlem: 01 aug 2010, 21:05
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Push- notification med IP-adress

Inlägg av Trumstock »

Hej!

Jag har en Ubuntu-server som agerar lagringsplats och torrentklient. Jag vill kunna komma åt servern via SSH oavsett var jag befinner mig, men jag har dynamisk IP. Jag har utan några direkt kunskaper försökt skriva ett litet script som ett par gånger om dagen körs och skickar min IP-adress som push-meddelande till min telefon. När jag provkör scriptet står det "-bash: ./ip-check.sh: bin/bash: felaktig tolk: Filen eller katalogen finns inte".

Vad är fel?

Kod: Markera allt

#!bin/bash

CURRENT=`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<$
DIR=/home/john/current-ip
OLD=`cat $DIR`
API_KEY="KEY"
SUBJECT="Ny IP-adress"
MESSAGE=`cat $CURRENT`

if [ "$CURRENT" != "$OLD" ]; then
echo $CURRENT>$DIR
curl -d "apikey=$API_KEY&application=IP-not&event=$SUBJECT&description=$MESSAGE" "https://api.prowlapp.com/publicapi/add"


fi
andol
Inlägg: 3093
Blev medlem: 31 dec 2007, 00:19
OS: Ubuntu
Utgåva: 23.10 Mantic Minotaur

Re: Push- notification med IP-adress

Inlägg av andol »

De första felet, det som klagar på, är att du saknar det inledande / du rimligen vill ha i sökvägen till bash. Ändra första raden till att istället se ut så här.

Kod: Markera allt

#!/bin/bash
Användarvisningsbild
BadOmen
Inlägg: 1172
Blev medlem: 18 aug 2006, 10:45
OS: Kubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Umeå

Re: Push- notification med IP-adress

Inlägg av BadOmen »

Hej
du kanske kan komma åt din externa ip så här i stället:

Kod: Markera allt

curl ifconfig.me
Eller logga in på din server vi exempelvis http://www.noip.com/services/managed_dn ... c_dns.html.
Betygsätt din Hårdvara och underlätta inköp av ny för andra:http://ubuntu-se.org/phpBB3/viewforum.php?f=138
Ubuntu-se forsknings team, här.
Min Ubuntu blogg som funkar som en stor post-it lapp för mig http://attminnas.blogspot.com/
Trumstock
Inlägg: 15
Blev medlem: 01 aug 2010, 21:05
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Push- notification med IP-adress

Inlägg av Trumstock »

Jag löste det till slut, tack för hjälpen! :)
Här är koden om någon är intresserad:

Kod: Markera allt

#!/bin/bash

CURRENT=`curl ifconfig.me`
DIR=/home/john/current-ip
OLD=`cat $DIR`
API_KEY="key"
SUBJECT="Ny IP-adress"
MESSAGE="$CURRENT"

if [ "$CURRENT" != "$OLD" ]; then
echo "$CURRENT">"$DIR"
curl -d "apikey=$API_KEY&application=IP-not&event=$SUBJECT&description=$MESSAGE" "https://api.prowlapp.com/publicapi/add"
fi
m!rage
Inlägg: 2550
Blev medlem: 28 apr 2009, 21:47
OS: Arch Linux
Ort: Lund

Re: Push- notification med IP-adress

Inlägg av m!rage »

Jag har skrivit ett Pythonskript för att göra ungefär samma sak, men som istället skickar e-post till mig när IP-adressen ändrats.

Kod: Markera allt

#!/usr/bin/env python3
"""
IP Monitor

version 1

Sends an e-mail if the network's external IP address has changed since last run.
"""

def get_ip():
    import urllib.request
    import re

    with urllib.request.urlopen('http://dns.loopia.se/checkip/checkip.php') as f:
        html = f.read().decode('utf-8')
        ip = re.findall('[0-9]+.[0-9]+.[0-9]+.[0-9]+', html)[0]
    
    return ip

def compare(ip):
    from os.path import expanduser
    home = expanduser("~")
    try:
        file = open(home + '/.ipmonitor', 'r')
        return file.read() == ip
    except IOError as e:
        return False

def update(ip):
    from os.path import expanduser
    home = expanduser("~")
    try:
        file = open(home + '/.ipmonitor', 'w')
        file.write(ip)
        return True
    except IOError as e:
        return False

def compose(ip, wrote, poster, recipient):
    from email.mime.text import MIMEText
    from email.utils import formatdate
    
    msg = MIMEText('')
    if wrote:
        msg.set_payload('New IP address: %s.' % ip)
    else:
        msg.set_payload('New IP address: %s.\n\nUnable to create config file!' % ip)
    msg['Subject'] = 'IP address change: %s' % ip
    msg['From'] = poster
    msg['To'] = recipient
    # RFC 2822: "Use local time". Anton: "Use UTC".
    msg['Date'] = formatdate(localtime = False)
    
    return msg

def send(msg, server, port):
    from netrc import netrc
    from smtplib import SMTP
    
    username, _, password = netrc().authenticators(server)
    
    smtp = SMTP(server, port)
    smtp.starttls()
    smtp.login(username, password)
    # smtp.send_message(msg) # Python 3.2
    smtp.sendmail(msg['From'], msg['To'], str(msg)) # Python 3.1
    smtp.quit()

def main():
    ip = get_ip()
    if compare(ip):
        pass
#        print('No change')
    else:
        print('New IP: %s' % ip)
        wrote = update(ip)
        if wrote:
            print('Wrote config')
        else:
            print('Failed to write config')
        msg = compose(ip, wrote, 'frånadress@example.com', 'tilladress@example.com')
        send(msg, 'smtp.example.com', 587)
        print('Sent e-mail')

if __name__ == '__main__':
    main()
Ändra frånadress@example.com, tilladress@example.com och smtp.example.com till lämpliga värden. Inloggningsuppgifter läses från ens .netrc-fil på ungefär det här formatet:

Kod: Markera allt

machine smtp.example.com
login frånadress@example.com
password lösenord
Jag låter cron köra skriptet på en server var sjätte timme med den här raden i min crontab:

Kod: Markera allt

0 */6 * * * ~/bin/ipmonitor.py
Skriv svar

Återgå till "Terminalforum"