[...] Mehr Details, den Download, sowie den Sourcecode gibts unter http://blog.ich-wars-nicht.ch/xtrazone-sms-tool/. [...]
Xtrazone SMS Tool
Achtung: Seit die neue Xtra-Zone aufgeschaltet wurde, konnte das Script wegen dem Captcha noch nicht angepasst werden. Deshalb ist das Xtrazone SMS Tool momentan nicht funktionsfähig.
Das Xtrazone SMS tool
Viele junge Schweizer kennen wohl Xtrazone, ein Internetportal von Swisscom, auf welchem alle Leute die ein xtra-liberty Handyabo haben, 500 Gratis-SMS im Monat versenden können. Ich habe das Angebot bisher jedoch sehr selten genutzt, da die Handhabung sehr umständlich ist. Zuerst muss man sich durch 3 Seiten durchklicken, bis man dann zum Login kommt, und wenn man mal eingeloggt ist, wird man nach ziemlich kurzer Inaktivität schon wieder rausgekickt… Das ist mühsam. Ein Kollege hat deswegen mal ein Windows-Tool gecodet, welches sich im Systray versteckt, und sich die Logindaten merkt. Da ich jedoch privat hauptsächlich Linux-User bin, und dank SSH auch immer Zugriff auf meinen Linux-Server habe, hab ich mir gedacht dass ein Kommandozeilentool für mich viel bessr geeignet wäre…
Ich hab mich also rangesetzt und ein kleines Perlscript geschrieben. Man kann damit sehr bequem über die Konsole mit einem Einzeiler ein SMS versenden.
Voraussetzungen
(Beide Tools können normalerweise über die Paketverwaltung (wie z.B. apt-get) installiert werden.)
Installation
Script herunterladen/abspeichern und starten. Eventuell müssen mit
$ chmod +x sms.pl
die Ausführrechte noch gesetzt werden. Wichtig: Die Leserechte sollten so gesetzt sein, dass nur der Besitzer die Datei lesen kann (chmod 700 sms.pl). Ansonsten kann jeder der Leserechte hat das Passwort, welches im Plaintext gespeichert wird, auslesen.
Danach müssen die Logindaten im Script auf den Zeilen 24 und 25 eingetragen werden.
Um das Script bequemer starten zu können, empfiehlt es sich, das Ganze nach /usr/local/bin zu kopieren.
# cp sms.pl /usr/local/bin/sms
Danach kann es wie jedes andere Programm auch direkt aufgerufen werden.
Benutzung
Syntax:
$ sms 0791234567 Dies ist meine Nachricht!
Hinweise
- Ein Telefonbuch ist noch nicht implementiert, kommt wohl noch. Man kann jedoch in der .bashrc mit
export MAX=0791234567
Telefonnummern als Variable exportieren, die dann mit
$ sms $MAX Hallo Max Muster!
benutzt werden können.
- Dadurch dass das SMS mit nur einem Befehl abgeschickt werden kann, kann man sich z.B. Benachrichtigungs- oder Alarm-Cronjobs mit SMS-Benachrichtigung einrichten.
- Dank dem Tipp von Christian (Siehe Comments) kann man das Ganze auch unter Windows laufen lassen:
Es müssen nur zwei Zeilen zusätzlich angepasst werden, um das Script auf Win laufen zu lassen:
Zeile 35: my $cookiefile = “xtrazone.cookie”; # Temporary cookie file
Zeile 149: if (system(”del $cookiefile”) != 0)
Known Issues
- Ich habe bemerkt, dass man im Nachrichtentext keine Klammern verwenden kann (z.B. für Smileys). Werde das irgendwann mal noch beheben.
Download
xtrazone-sms-0.3.tar.gz (2 KB)
Sourcecode
Der Sourcecode dieses Script steht unter der CreativeCommons by-nc-sa 3.0 Lizenz. Bei Nutzung würe ich mich über einen Kommentar oder ein Feedback freuen.
#!/usr/bin/perl -w ################################################################################ # Xtrazone SMS tool v0.3 - Send an SMS via Swisscom Xtrazone # # Syntax: ./sms.pl 0123456789 message to be sent # # Author: Danilo Bargen <gezuru@gmail.com> # License: CC by-nc-sa 3.0 # (http://creativecommons.org/licenses/by-nc-sa/3.0/) # Changes: # 0.1 2009/09/06 Basic functionality (sending sms) as a Bash script # 0.2 2009/09/07 Basic errorhandling, display of remaining SMS # 0.3 2009/09/12 Rewritten the entire thing in Perl, added new features # Required to run: # - Perl # - Curl # Todo: # - Phonebook # - Help option # - Accept message from stdin ################################################################################ # Edit these two lines my $NUMBER = "1234567890"; my $PASSWORD = "password"; ################################################################################ # Do not edit the following code unless you know what you're doing use strict; use warnings; use POSIX; my $cookiefile = "/tmp/xtrazone.cookie"; # Temporary cookie file my $version = "0.3"; # Check whether curl is installed if (!`which curl`) { die "Error: Curl is not installed, or could not be found.\n"; } if (!@ARGV) # No arguments { die usage(); } elsif (@ARGV < 2) # Only one argument { die usage("No message defined."); } elsif ($ARGV[0] !~ m/[0-9]{10}/) # Argument 1 doesn't consist of 10 numbers { die usage("Invalid cell phone number"); } my $receiver = shift(@ARGV); my $message = join(' ', @ARGV); login(); send_sms(); remove_cookie(); ################################################################################ # Subroutines (functions) # How to use this script sub usage { my $msg = ""; if (@_) { $msg = "@_\n"; } return $msg."Usage: sms NUMBER MESSAGE\nExample: sms 0123456789 Hello, this is my message!\n"; } # Log in sub login { # Curl login-request my $curlbody = `curl --cookie-jar $cookiefile --connect-timeout 10 --header 0 --location 1 --user-agent "Opera/9.23 (Windows NT 5.1; U; en)" --insecure --data "isiwebuserid=$NUMBER&isiwebpasswd=$PASSWORD&isiwebjavascript=No&isiwebappid=mobile&isiwebmethod=authenticate&isiweburi=/youth/sms_senden-de.aspx&isiwebargs=" https://www.swisscom-mobile.ch/youth/sms_senden-de.aspx?login 2>&1`; # Check whether login succeeded if ($curlbody =~ m/Swisscom Privatkunden - SMS senden/) { return 1; } elsif ($curlbody =~ m/eingegebene Passwort ist nicht korrekt./) { die "Login password not correct. Did you set it by editing this script?\n"; } elsif ($curlbody =~ m/curl: \(28\) SSL connection timeout/) { die "SSL connection timeout. The server is currently not reachable.\n"; } elsif ($curlbody =~ m/curl: \(7\) couldn't connect to host/) { die "SSL connection error. The server is currently not reachable.\n"; } else { die "Unknown login error"; } } # Send SMS sub send_sms { # Check message length if (length($message) > 454) { die "Message too long (".length($message)." chars). Max characters: 454.\n"; } if (length($message) > 134) { # Ask user whether he wants to sent a long SMS print "This is a long message, it will eat up ".ceil((length($message)+26)/160)." SMS credits. Do you really want that? [n/Y] "; my $confirmation = <STDIN>; # Get user input from stdin chomp($confirmation); # Remove trailing \n if ($confirmation and lc($confirmation) ne "y" and lc($confirmation) ne "yes") { die "Aborting.\n"; } } # Curl send sms request my $curlbody = `curl --cookie $cookiefile --connect-timeout 10 --header 0 --location 1 --user-agent "Opera/9.23 (Windows NT 5.1; U; en)" --insecure --data "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE_SCM=5&__VIEWSTATE=&CobYouthSMSSenden:txtMessage=$message&CobYouthSMSSenden:txtMessageDisabled= - sent by xtrazone.ch&CobYouthSMSSenden:txtNewReceiver=$receiver&CobYouthSMSSenden:btnSend=Senden&FooterControl:hidNavigationName=SMS senden&FooterControl_hidMailToFriendUrl=youth/sms_senden-de.aspx" https://www.swisscom-mobile.ch/youth/sms_senden-de.aspx 2>&1`; if ($curlbody =~ m/Deine Nachricht wurde gesendet./) { print "SMS sent successfully.\n"; $curlbody =~ s/^.*<span id=\"CobYouthMMSSMSKonto_lblGuthaben\">([0-9]{1,3})<\/span>.*$/$1/s; print "Remaining SMS credit: $curlbody\n"; } elsif ($curlbody =~ m/Dies ist keine gültige Handynummer/) { die "Invalid cell phone number (Example: 0791234567).\n"; } else { die "Unknown error, could not send sms."; } } # Remove cookie file sub remove_cookie { if (system("rm $cookiefile") != 0) { die "Error removing cookie file \"$cookiefile\"."; } }
.::ich-wars-nicht.ch::. » Xtrazone SMS Tool hat am 15.09.2009 um 13:13 kommentiert:
christian hat am 4.10.2009 um 13:53 kommentiert:
funktionier das script bei dir noch? bei mir funktioniert es nicht.
christian hat am 4.10.2009 um 14:01 kommentiert:
hab gerade den fehler gefunden…
ich lass das ganze auf windows laufen. habe aber vergessen das cookie file anzupassen. dann konnte curl nicht schreiben und logischerweise dann swisscom das cookie nicht mehr auffinden…
so, nun läufts komplett auf windows. es müssen nur zwei zeilen zusätzlich angepasst werden um das script auf win laufen zu lassen:
Zeile 35: my $cookiefile = “xtrazone.cookie”; # Temporary cookie file
Zeile 149: if (system(“del $cookiefile”) != 0)
gruess
Beat Bolli hat am 8.10.2009 um 13:15 kommentiert:
Anstelle von system(“rm $cookiefile”) wäre unlink($cookiefile) portabel!
also: system(“rm $cookiefile”) != 0) || die “Error removing cookie file \”$cookiefile\”.”;
Gruess Beat (Vater von Michael)
Christian Schneider hat am 20.10.2009 um 12:10 kommentiert:
das neue xtra zone ist hier und das alte script geht nicht mehr :’(
wäre dankbar, wenn du das script anpassen könntest
Christian Schneider hat am 20.10.2009 um 12:16 kommentiert:
bei mir läufts mehr oder weniger, zwar langsam aber mit viel geduld gehts
Christian Schneider hat am 20.10.2009 um 21:40 kommentiert:
ich bin gerade dran, dein tool dem neuen xtrazone anzupassen.
falls du interesse hast, kann ich dir den sourcecode, sobald ich fertig bin, zusenden.
ich habe noch ein paar erweiterungen eingebaut.
mein code wird nur unter windows getestet sein…
Toby hat am 28.10.2009 um 21:31 kommentiert:
Wäre super, würde mich sehr freuen, wenn ihr die neue Version hier posten würdet:)
Danke schonmal für den alten Skipt..auch wenn der im Moment dank Swisscom nicht seeeeehr hilfreich ist.
Wasauimmer die am chüechle sind……=)
lg Toby
Christian Schneider hat am 23.11.2009 um 21:47 kommentiert:
Hier habe ich noch was gefunden, was das selbe macht, aber mit Adressbuch:
http://www.soinwi.ch/index.php?option=com_content&view=article&id=53&Itemid=65
.::ich-wars-nicht.ch::. hat am 30.12.2009 um 15:01 kommentiert:
Xtrazone SMS Tool auf Github…
Das Xtrazone SMS Tool ist ab sofort auch auf Github zu finden. Wer Github noch nicht kennt – das ist eine Website die auf dem Versionierungswerkzeug GIT basiert. Die Seite ist so konzipiert, dass sich jeder der dort registriert ist (oder auch oh…
christian hat am 25.02.2010 um 12:44 kommentiert:
der moment ist gekommen – nun auch mit captcha :S
christian hat am 27.02.2010 um 21:56 kommentiert:
@danilo: habe dir soeben mein tool per mail an gezuru at gmail.com gesendet.
michael hat am 7.03.2010 um 22:34 kommentiert:
Eine Lösung wäre auch, dass man das Captcha selber eingbiebt. Man bräuchte ja dann eigentlich nur den text, die Nummer und das Captcha (vor dem versenden) einzugeben. Wäre immernoch deutlich einfacher als sich durch die Seite da zu quälen…
Gruss
Michael
marc hat am 9.03.2010 um 15:44 kommentiert:
Hallo
Ich hab eine Applikation in Java gschrieben die den sms-Login benutzt. Das heisst zwar, dass man den login-code aus einer sms eintippen muss. Aber das wäre ein einfacher weg, wenn du rein auf command line basis bleiben willst.
Funktioniert in etwa so: Seite aufrufen, gibt eine XZSESSID-cookie, damit das Formular ausfüllen, mit Handynummer und login-code aus sms. Die Antwort des Servers gibt eine neue XZSESSID, mit welcher man “eingeloggt” ist.
Auf diese Weise hab ichs geschafft dass ich mich auf der Seite einloggen kann. Ich sehe damit das Nachrichten-Formular sowie mein Adressbuch.
Ein anderes Problem ist folgendes: Nach dem Einloggen einfach einen Http-POST mit den Daten der Nachricht zu senden, klappt offensichtlich nicht. Swisscom macht hier wohl eine zusätzliche Kontrolle über AJAX bzw JavaScript.
Dasselbe geschieht auch, wenn man nach dem Einloggen JavaScript im Browser deaktiviert. Das Senden geht ins Leere..
Idee wie man diese Kontrolle umgehen kann? Bzw, mache ich einen Denkfehler mit dem simplen Senden eines POST? Analyse der Http-Header im Browser ergibt eigentlich dasselbe.
peter hat am 5.04.2010 um 16:26 kommentiert:
@danilo
Mit welcher Software knackst du das Captcha? Mit pwntcha und tesseract hat’s bei mir nicht funktioniert.
Der Rest meines Skripts ist fertig: Es funktioniert gleich wie deines, ausser dass beim Senden im Moment noch das Captcha angezeigt wird und anschliessend eingegeben werden muss.
Gruss Peter
peter hat am 6.04.2010 um 18:31 kommentiert:
ah ja… den trainingsmodus hab ich noch übersehen. vielen dank!
das lustige an der url der captchas ist, wenn man das bild aktualisiert, steht zwar der gleiche text, jedoch anders verdreht
Christian Schneider hat am 6.04.2010 um 19:30 kommentiert:
@peter & danilo
hab gerade was entdeckt beim suchen:
mit integrierter captcha decodierung…
Christian Schneider hat am 21.06.2010 um 22:39 kommentiert:
Sali danilo
ich wollte kurz fragen wie es zwischenzeitlich aussieht.
gruss christian

Kommentare