Sida 1 av 1
Push- notification med IP-adress
Postat: 08 mar 2013, 11:15
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
Re: Push- notification med IP-adress
Postat: 08 mar 2013, 12:18
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.
Re: Push- notification med IP-adress
Postat: 08 mar 2013, 13:57
av BadOmen
Hej
du kanske kan komma åt din externa ip så här i stället:
Eller logga in på din server vi exempelvis
http://www.noip.com/services/managed_dn ... c_dns.html.
Re: Push- notification med IP-adress
Postat: 09 mar 2013, 00:20
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
Re: Push- notification med IP-adress
Postat: 09 mar 2013, 14:13
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: