Forthnet SMS 9


Ενα python script για οσους συνδρομητες της Forthnet δεν θελουν να χρησιμοποιουν την σελιδα της για να στελνουν τα 50 δωρεαν sms που δικαιουνται καθε μηνα. Μπορει επισης να χρησιμοποιηθει σε jailbroken iPhone και Android. Τα προαπαιτουμενα του, η Python και η βιβλιοθηκη της, mechanize. Η εγκατασταση της τελευταιας μπορει να γινει μεσω pip (pip install mechanize)μεσω easy_install (easy_install mechanize) ή απο το site της (download και install).

Συγκεκριμενα για Android θα πρεπει να γινει εγκατασταση του SL4A (Scripting Layer for Android) και στη συνεχεια η εγκατασταση της mechanize, δηλαδη download του tar απο το site της και extraction μονο του φακελου source στο φακελο με τα υπολοιπα scripts. Τελος ενα ‘import mechanize’ αρκει για την εγκατασταση της.

Σε iPhone ειναι ελαφρως πιο χρονοβορα η εγκατασταση, αλλα παραμενει και παλι απλη. Αρχικα εγκασταση της Python. Download του .deb της τελευταιας συμβατης με το iPhone εκδοσης. Απ’το terminal ή τον ssh client: wget https://github.com/linusyang/python-for-ios/releases/download/v2.7.6-3/python_2.7.6-3_iphoneos-arm.deb και στη συνεχεια εγκατασταση της με dpkg -i python_2.7.6-3_iphoneos-arm.deb. Τελος εγκατασταση της mechanize: easy_install mechanize. To script:

#Forthnet SMS python script

import mechanize
import cookielib
import getpass

#User input

print “What’s your email?”
username = raw_input()
print “What’s your password?”
password = getpass.getpass()

#Browser

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [(‘User-agent’, ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0’)]
r = br.open(‘https://www-old.forthnet.gr/secure/webSMS/login.aspx?ReturnUrl=%2fsecure%2fwebsms%2fdefault.aspx&xss_mode=l’)

#Authentication

br.select_form(nr=0)
br.form[‘Username’] = username
br.form[‘Password’] = password
br.submit()

#SMS sending

br.select_form(nr=0)
print “Phone Number:”
number = raw_input()
br.form[‘txtTo’] = number
print “SMS Text:”
message = raw_input()
br.form[‘txtMessage’] = message
br.submit()
print “SMS sent.”

#History

smsThisMonthPage = br.open (‘https://www-old.forthnet.gr/secure/websms/History.aspx’)
smsHTML = smsThisMonthPage.read()
index = smsHTML.find(‘/ 50’)
print “You have sent”,smsHTML[(index3):index],“out of 50 free SMS this month”

 

και το repository του στο github (pull requests καλοδεχουμενα 🙂 ). O παραπανω κωδικας μπορει να αυτοματοποιηθει ακομα περισσοτερο ενσωματωνοντας το username και το password μεσα σ αυτον, προκειμενου να μην χρειαζεται καθε φορα η πληκτρολογηση τους απο τον χρηστη. Οι μονες αλλαγες που πρεπει να γινουν:

#User input

print “What’s your email?”
username = ‘your-username-here@ath.forthnet.gr’
print “What’s your password?
password = ‘your-password-here’

 

Προφανως υπαρχει ενα σοβαρο μειονεκτημα σ αυτη τη λυση, το username και το password παραμενουν αποθηκευμενα χωρις ιχνος κρυπτογραφησης και ειναι προσβασιμα απο οποιονδηποτε εχει προσβαση στο συστημα που τρεχει το script. Ευκολια Vs Ασφαλεια. Το script σε λειτουργια, αποστολη sms στο iPhone απο το οποιο εκτελεστηκε:

 

sms   sms2


Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

9 thoughts on “Forthnet SMS

  • Nikos.Gr33k

    με την QPython πρεπει να το τρεξω? βγαζει καποια σφαλματα στον κωδικα? μαλλον θελει QPython 2?

    • Gi0 Post author

      Δεν εχω καποια Android συσκευη διαθεσιμη να το δοκιμασω, αλλα δεν νομιζω πως θα χει προβλημα με την QPython. Το προβλημα αυτη τη στιγμη δεν εχει να κανει με την script engine που τρεχεις αλλά με τον server της Forthnet, ο οποιος κανει reset την συνδεση οταν μετα απο μερικα δευτερολεπτα και αφου εχεις συνδεθει με το script (το κοκκινο πακετο στην παρακατω φωτογραφια http://giot.is/wp-content/uploads/wireshark-capture.png).

  • Nikos.Gr33k

    Καλημερα!

    Βασικα δινει σφαλμα οταν απω να τρεξω το script απευθειας, ο interpreter της QPython.
    Πρεπει να βρουμε πως πρεπει αν τρεξει σωστα το script σε Αndroid.

    Web2SMS εκει εμσα εχουν υλοποιησει free sms tools κι μεταξυ αυτων και το FORTnet SMS.

    • Gi0 Post author

      Nice! Δεν εχω Android δυστυχως, οποτε παραμενω με το παρον script μολις βγαλω ακρη τι παιζει με το SSL. Σ ευχαριστω για το feedback!

      • Nikos.Gr33k

        Παρακαλω!

        Μολις βγαλεις ακρη πως θα κανουμε το ομορφο αυτο σκριπτακι να τρεχει σωστα στο Androis οπως τρεχει και στο linuxακι ενημερωσε με σε παρακαλω! 🙂

  • Nikos.Gr33k

    Καλημερα,

    Τελικα αποφασια να το χησιμοποιησω τον κωδικα σου στο Arch Linux μου embedded μεσα σε ενα python3 web script.

    Μου ειχες πει για ενα προβλημα. Αυτο διορθωθηκε? Μπορω να στειλω με επιτυχια μαιλ απο 4νετ?

    Επισης και μιαλλη ιδεα. Μπορεις να το κανεις να δουλευει με το mail.mycosmos.gr ?! Θα ειναι φανταστικο!!!

  • Xarilaos

    To site χρησιμοποιεί TLS v1. Μπορείς να το δηλώσεις με το παρακάτω κώδικα.
    Ακόμη το username πρέπει να είναι χωρίς στο τέλος το @ath.forthnet.gr
    Το δοκίμασα και δουλεύει κανονικά.

    Οπότε βάζουμε το παρακάτω μετά τα import

    import ssl
    from ssl import PROTOCOL_SSLv23, PROTOCOL_SSLv3, CERT_NONE, SSLSocket

    def monkey_wrap_socket(sock, keyfile=None, certfile=None,
    server_side=False, cert_reqs=CERT_NONE,
    ssl_version=PROTOCOL_SSLv23, ca_certs=None,
    do_handshake_on_connect=True,
    suppress_ragged_eofs=True, ciphers=None):
    ssl_version=ssl.PROTOCOL_TLSv1
    return SSLSocket(sock, keyfile=keyfile, certfile=certfile,
    server_side=server_side, cert_reqs=cert_reqs,
    ssl_version=ssl_version, ca_certs=ca_certs,
    do_handshake_on_connect=do_handshake_on_connect,
    suppress_ragged_eofs=suppress_ragged_eofs,
    ciphers=ciphers)

    ssl.wrap_socket = monkey_wrap_socket

  • Κωστας

    Δυστηχως αυτη τι στιγμη το script δεν παιζει, μου βγαζει
    try: _create_unverified_https_context = ssl._create_unverified_context except AttributeError: # Legacy Python that doesn’t verify HTTPS certificates by default pass else: # Handle target environment that doesn’t support HTTPS verification ssl._create_default_https_context = _create_unverified_https_context

    μηπως εχουμε κανενα νεο?