Archive pour le ‘Programmation’ catégorie

monter un serveur PHP en une ligne de commande (ou presque)

24 avril 2010

Dans le genre « news de webg33k » en voici une …

A la base, je cherchais à utiliser/écrire un serveur http en python (pas mal de classes existent dans le domaine) pour servir une page html bidon après un man in the middle avec redirection dnspoof sur le serveur http en question, au lieu de déployer l’artillerie lourde apache ou nginx.
» En lire plus:monter un serveur PHP en une ligne de commande (ou presque)

Push Ip(hone|od) en PHP en envoi « batch »

20 avril 2010

Plop à tous …

Un article en intraveineuse pour tenter de réanimer mon blog … Alors oui l’Iphone ça pue, c’est propriétaire, c’est moche et tout et tout, mais bon ça se répand comme la peste alors on fait avec :s.
» En lire plus:Push Ip(hone|od) en PHP en envoi « batch »

[PATCH] Correction du bug « Error Retrieving Directory: system:111″ de tortunnel

3 avril 2010

Plop à tous …

Aujourd’hui je publie un patch ^^ … pour le logiciel tortunnel (l’open-source ça a du bon ;) ), en effet, pour ceux qui connaissent ce soft, une erreur « Error Retrieving Directory: system:111″ est apparue depuis quelque temps, rendant le logiciel inutilisable,  ce bug vient juste du fait que « moxie » a hardcodé les IP des « tor directory » dans son logiciel, en particulier : « 128.31.0.34″ qui n’existe plus, d’où l’erreur system:111, il faut donc changer 3 fichiers (protocole/(Directory.cpp|ServerListing.cpp|ServerListingGroup.cpp)) et remplacer « 128.31.0.34″ par « 192.251.226.206″ (ou par une autre ip d’un tor directory que l’on peut trouver ici). Attention il semblerait qu’il ne soit pas possible d’utiliser le « tor directory » courant en serveur de sortie (ce qui retournerait une erreur 111, malgré l’utilisation de ce patch, donc vous ne pourrez plus utiliser : 192.251.226.206 en node de sortie)
» En lire plus:[PATCH] Correction du bug « Error Retrieving Directory: system:111″ de tortunnel

Créer son propre service de mail jetable avec appengine

27 mars 2010

Plop à tous
Au détour d’un article de Korben, j’ai découvert les app engine de google, qui permettent de créer des sites/applications web en python et java. Le service est très performant et malgré quelques limites, il permet tout de même un trafic par jour de 1Gb en http et 1Gb en https (avec un certificat valide ;) ).

Le gros problème de ce service : la base de données (pas de join et on a seulement droit à : 10368000 requêtes par jour ^^).

L’API fournit, ainsi que l’environnement de développement est simple à maitriser/mettre en oeuvre. Il me fallait donc un projet plus ou moins (f)utile pour utiliser ce service et le connaitre un peu mieux. L’un des services proposés par les appengine de google est la réception de mail en http. Super utile pour créer des adresses mails à la volée, utilisant depuis quelque temps le service de mail jetable de yopmail, j’ai donc tenté de recréer une partie du service proposé par yopmail en python pour les appengine …

Le but de l’appli est très simple, on crée une adresse mail pour 30 minutes (ou plus), on fournit l’adresse mail générée à la place de notre adresse mail courante et on attend le mail. Une fois l’adresse expirée, les mails reçût seront automatiquement droppés.

Pour tester le service : en http et en https, les adresses mails proposées par le service sont du type : pseudo@mail-jetable.appspotmail.com (ok c’est long, mais il faut au moins ça pour combattre le spam ^^).

Le code source étant un peu plus long que mes scripts habituels, j’ai donc ouvert un dépôt SVN (sur google code évidemment ;) ) pour publier les sources.

Envoyer des mails dans le passé

20 mars 2010

Plop à tous …

Aujourd’hui, une astuce de « gros noob », le but est d’envoyer un mail à une date passée ou future, genre pour le rendu d’un devoir à 23h59m59s alors qu’on vient de le terminer à 2h42 du mat, tout en sachant que le prof ne le lira pas avant 7 ou 8 heures du mat’ … le truc totalement useless quoi, mais souvent on perd des points pour des trucs de ce genre, … (quoi ?? ça vous est jamais arrivé ?? bande de lèche-*** ….)
» En lire plus:Envoyer des mails dans le passé

Mon Application Android pour les horaires de la CTS

13 décembre 2009

Amis Strasbourgeois bonsoir …
Après un WE chargé sur Strasbourg, j’ai remarqué que la Compagnie des Transports de Strasbourg (CTS) avais mis en place un site web intéressant en temps réel (semble-t-il) pour calculer les horaires des BUS/Trams du réseau urbain.

L’autre partie du service « Temps Réel » se fait par SMS par envoi du code de la station à un numéro surtaxé … :s. Ayant un forfait 3G, je vais pas claquer un SMS surtaxé si je peux accéder au web gratuitement (quel radin ;) ), mais le site est assez bof depuis mon navigateur, et c’est assez lent …

Ayant acheté un G1 dans le but de dev des applis, j’en ai profité pour faire ce que je sais (apparemment) faire de mieux … parser des sites web pour en extraire des informations, dans ce cas précis, les horaires des transports en commun.

L’application ressemble à ceci : (super moche je sais, mais elle fait sont boulot … c’est l’essentiel).

android-CTSPour le code source, j’ai tenté de faire au plus simple (traduction : le code est aussi beau que le screenshot fournit plus haut ^^, pour ma décharge, je dirais que j’ai tout mis dans un fichier histoire de ne pas à avoir trop de fichier à fournir ici).

Si vous avez des idées pour améliorer l’appli je suis open ;) (à part si c’est pour me recycler et changer de métier :s). Je pense changer l’appli en widget (si j’ai le temps …).
» En lire plus:Mon Application Android pour les horaires de la CTS

Mon apprentissage de python avec Ogame ^^

3 décembre 2009

The kikoolol strike back !! Mon deuxième billets de la soirée …pour pas grand chose en fait.

J’ai voulu apprendre le langage python de façon plutôt ludique en créant un bot qui créer des batiments en boucle pour Ogame … rien d’illégal bien entendu ^^.
Dans le code Python qui va suivre, vous pourrez comprendre (ou pas) comment fonctionne :

  • Les requêtes HTTP en python avec des headers à partir de zéro
  • Les Threads pour les opérations en parallèle
  • Les Semaphores, pour éviter des requêtes en parallèle (pas apprécié par Ogame dans certain cas)

Pour l’utiliser, il suffit ensuite d’ajouter au source qui vont suivre :

  1. og = Ogame()
  2. og.setSessionCookie(
  3.  "le contenu du cookie phpsessid de votre univers",
  4.  "le contenu du cookie prssess de votre univers",
  5.  "le contenu du cookie loginC de votre univers",
  6.  "le parametre de l'url &session=…",
  7.  "uniXX.ogame.fr"votre#univers
  8. )
  9. Farmer.buildInChainsPlanets(og,["id planete","id planete"],[[4,1,2,4,1,2,4,1,2,4],[4,1,2,4,1,2,4,1,2,4]])

le premier paramètre de buildInChainsPlanets est l’objet og
le second est un tableau de string contenant l’id des planètes à « farmer »
le troisième est un tableau de tableau contenant les séquences des batiments à construire :
1 pour le metal 2 pour le cristal 3 pour le deuterium 4 pour l’electricite.

Et voilà … lorsque vous aurez conquis une planète rajoutez-là au tableau ainsi que la séquence de batiments que vous voulez, puis laissez tourner le script plusieurs jours (faite gaffe avec les sessions qui risque de changer si vous vous reconnectez avec votre navigateur).
» En lire plus:Mon apprentissage de python avec Ogame ^^

Checker la validité d’une adresse mail en PHP via SMTP

3 décembre 2009

plopinou …

Il arrive toujours un jour où l’on doit checker la validité d’une adresse mail de façon sûr (plus qu’une simple vérification sur la validité du nom de domaine).
Pour ce faire il faut directement se connecter sur le SMTP du domaine de l’adresse mail via un socket en PHP et envoyer l’adresse mail à checker.
» En lire plus:Checker la validité d’une adresse mail en PHP via SMTP

Mumuse avec GOLang …

1 décembre 2009

Depuis pas mal de temps déjà, Google a release un langage qui se veut simple, puissant … et tout et tout.

Pour savoir un peut ce que ça vaut, j’ai donc installé la bête, et fait un test basique : connexion HTTP/parsing regexp.

» En lire plus:Mumuse avec GOLang …

Exemple de Bot d’Authentification et de clic en Php

20 octobre 2009

Bonjour à tous …

Aujourd’hui ze bot « cliqueur » ^^, il s’agit en fait d’un bot qui s’authentifie en POST, récupère le cookie et va en get sur un lien (le clic quoi).

A quoi ça peut bien servir ?

Pour ma part, c’était pour récupérer une clé pour la closed beta de HON (un Dota avec des binaires pour linux, fallait pas rater ça!!) sur le site de Alienware, le problème, c’est que les clés étaient censé être disponible soit très tard dans la soirée, soit très tôt dans la matinée, et comme je n’aimais pas l’idée de rester sur le site à poireauter, j’ai fait ce que tout programmeurs auraient fait ^^, un sympatique script …

Les actions à faire étaient :

  1. Regarder sur le site si le nombre de clés disponibles étaient supérieur à 0
  2. S’authentifier
  3. Récupérer les clés

Ce qui donne donc le script suivant en tâche Cron toutes les 5 minutes (fallait juste pas oublier de couper le script après réception des clés ^^) :

  1. <?php
  2. define("USERNAME","login");
  3. define("PASSWORD","pass");
  4. define("MAILADRES","mail@mail.com");
  5. $stringLoginPost="username=".USERNAME."&password=".PASSWORD;
  6.  
  7. /***********************************************DO NOT TOUCH**************************************************/
  8. $hon = file_get_contents("http://www.alienwarearena.com/event/hon-beta-giveaway/");
  9.  
  10. preg_match('|<h3[^>]*>Closed Beta Keys Remaining</h3>[\W\w]*<h1[^>]*>([0-9]+)</h1>|iU',$hon,$retour);
  11.  
  12. if($retour[1]!=0)
  13. {
  14.  $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
  15.  if(socket_connect($socket,"www.alienwarearena.com","80"))
  16.  {
  17.  //La requete de post pour ce logger
  18.   $postReq = "POST /cmd/account/login/ HTTP/1.1\r\n";
  19.   $postReq.= "Host: www.alienwarearena.com\r\n";
  20.   $postReq.= "Connection: Keep-Alive\r\n";//comme ça on se reconnecte direct ;) Pipelinning ROXX!!
  21.   $postReq.= "Content-type: application/x-www-form-urlencoded\r\n";
  22.   $postReq.= "Content-Length: ".strlen($stringLoginPost)."\r\n\r\n";
  23.   $postReq.= $stringLoginPost."\r\n";
  24.   socket_write($socket,$postReq);
  25.   socket_recv($socket,$retour,1024,0);
  26.  //la récupération de la valeur du cookie
  27.   preg_match("#Set-Cookie: PHPSESSID=([^;]*); path=/#",$retour,$tabRet);
  28.  //On va à la page de récupération des clés ^^
  29.   $getReq = "GET /cmd/account/get-beta-key/hon/ HTTP/1.1\r\n";
  30.   $getReq.= "Host: www.alienwarearena.com\r\n";
  31.   $getReq.= "Cookie: PHPSESSID=".$tabRet[1]."\r\n";
  32.   $getReq.= "Connection: Close\r\n\r\n";
  33.   socket_write($socket,$getReq);
  34.   socket_recv($socket,$retour,1024,0);
  35.  
  36.   mail(MAILADRES,"HON KEY!!","You got an HON KEY : ".$retour);
  37.  }
  38.         socket_close($socket);
  39. }
  40. ?>

Donc voilà … le script reste une idée (qui a fonctionné dans mon cas) à modifier selon les cas, avec curl ça aurait été plus court, mais faire mumuse avec les sockets ça n’a pas de prix …