<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Category: Python | /sys/admin]]></title>
  <link href="http://devopsysadmin.github.io/blog/categories/python/atom.xml" rel="self"/>
  <link href="http://devopsysadmin.github.io/"/>
  <updated>2015-12-29T11:34:22+01:00</updated>
  <id>http://devopsysadmin.github.io/</id>
  <author>
    <name><![CDATA[David PG]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Passwords Con Caracteres Aleatorios]]></title>
    <link href="http://devopsysadmin.github.io/blog/2015/02/23/passwords-con-caracteres-aleatorios/"/>
    <updated>2015-02-23T16:01:00+01:00</updated>
    <id>http://devopsysadmin.github.io/blog/2015/02/23/passwords-con-caracteres-aleatorios</id>
    <content type="html"><![CDATA[<p>En muchas ocasiones, cuando tenemos que crear un servicio que pide usuario/password, tendemos al uso de passwords simples o poco elaboradas. Tanto si es para un uso personal como si es para compartir información entre usuarios (este, quizás, más importante aún securizar), las password simples o basadas en diccionarios no son del todo una buena idea.</p>


<p> <p>Este pequeño script de python genera una clave de N caracteres aleatorios (pasados por argumento, o 10 en su defecto), que puede añadir símbolos indicando el argumento &ldquo;@&rdquo;.</p></p>

<p><div class="highlight"><pre><code class="language-python" data-lang="python"><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">h1</span><span class="o">&gt;</span><span class="err">!</span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">env</span> <span class="n">python</span><span class="o">&lt;/</span><span class="n">h1</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">h1</span><span class="o">&gt;-&lt;</span><span class="n">em</span><span class="o">&gt;-</span> <span class="n">coding</span><span class="p">:</span> <span class="n">utf</span><span class="o">-</span><span class="mi">8</span> <span class="o">-&lt;/</span><span class="n">em</span><span class="o">&gt;-&lt;/</span><span class="n">h1</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="kn">import</span> <span class="nn">string</span><span class="o">,</span><span class="nn">random</span><span class="o">,</span><span class="nn">sys</span><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="n">dictionary</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">digits</span>
<span class="n">dictionary_extra</span> <span class="o">=</span> <span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="nd">@.</span><span class="o">-</span><span class="err">!</span><span class="o">~&amp;</span><span class="n">rsquo</span><span class="p">;</span>
<span class="n">N</span> <span class="o">=</span> <span class="mi">10</span><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span><span class="o">&gt;</span><span class="mi">1</span><span class="p">):</span>
    <span class="k">if</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="o">==&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="err">@</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;):</span>
        <span class="n">dictionary</span> <span class="o">+=</span> <span class="n">dictionary_extra</span>
        <span class="k">if</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">&gt;</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">N</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">:])</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="n">N</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">print</span> <span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">SystemRandom</span><span class="p">()</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">dictionary</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">N</span><span class="p">))</span></code></pre></div></p>

<p><p>Ejemplos de uso: <br />
<pre>
$ python randompasswd @20
Dk5nl8w~.WxrkEj94!V~</p>

<p>$ python randompasswd @
0KAiU0z@rC</p>

<p>$ python randompasswd
eqUL9Kaw22G1QFc
</pre></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sendlines, Un Expect Simplificado]]></title>
    <link href="http://devopsysadmin.github.io/blog/2015/02/19/sendlines-un-expect-simplificado/"/>
    <updated>2015-02-19T17:17:00+01:00</updated>
    <id>http://devopsysadmin.github.io/blog/2015/02/19/sendlines-un-expect-simplificado</id>
    <content type="html"><![CDATA[<p>Para automatizar tareas siempre había hecho uso de <a href="http://www.tcl.tk/man/expect5.31/autoexpect.1.html">autoexpect</a>, ya que, una vez realizado (y guardado) todo la primera vez, sólo había que hacer un par de apaños al script resultante. Sin embargo, hay veces que no necesitamos algo tan sofisticado o no queremos instalar tcl/tsh en la máquina.</p>


<p>No hay problema: un pequeño script en python lee de un archivo de texto y le manda, línea a línea, su contenido al ejecutable que hayamos elegido.</p>


<p>Seguramente haya muchas cosas por pulir, pero hace lo que tiene que hacer (<a href="http://es.wikipedia.org/wiki/Principio_KISS">Pricipio KISS</a>, que le llaman ;) ). </p>


<p> Uso: <code>sendlines -f Fichero_de_texto -c "comando a ejecutar" [ -d delay ]</code>,
donde:<br />
<ul>
    <li>fichero_de_texto: archivo que contiene las lineas que se van a mandar. No contempla comentarios, lo manda del tirón</li>
    <li>comando: orden que recibirá las entradas de fichero_de_texto. Si tiene parámetros, poner todo el comando entre comillas (ej: "grep -v grep")</li>
    <li>delay: tiempo entre lineas. Opcional, espera un tiempo (en segundos) entre cada linea que manda</li>
</ul>
</p>


<p><div class="highlight"><pre><code class="language-python" data-lang="python"><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">h1</span><span class="o">&gt;</span><span class="err">!</span><span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="nb">bin</span><span class="o">/</span><span class="n">env</span> <span class="n">python</span><span class="o">&lt;/</span><span class="n">h1</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">h1</span><span class="o">&gt;-&lt;</span><span class="n">em</span><span class="o">&gt;-</span> <span class="n">coding</span><span class="p">:</span> <span class="n">utf</span><span class="o">-</span><span class="mi">8</span> <span class="o">-&lt;/</span><span class="n">em</span><span class="o">&gt;-&lt;/</span><span class="n">h1</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="kn">import</span> <span class="nn">subprocess</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">getopt</span><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">textFile</span><span class="p">,</span><span class="n">delay</span><span class="p">):</span>
    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">textFile</span><span class="p">,</span><span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="n">r</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;)</span> <span class="k">as</span> <span class="n">text</span><span class="p">:</span>
        <span class="n">content</span><span class="o">=</span><span class="n">text</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span>
    <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span><span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span><span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">content</span><span class="p">:</span>
        <span class="n">p</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span><span class="o">+&amp;</span><span class="n">lsquo</span><span class="p">;</span>\<span class="n">n</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;)</span>
        <span class="k">if</span><span class="p">(</span><span class="n">delay</span><span class="p">):</span> <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="nb">float</span><span class="p">(</span><span class="n">delay</span><span class="p">))</span>
    <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
    <span class="n">p</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span><span class="o">&lt;/</span><span class="n">p</span><span class="o">&gt;</span>

<span class="o">&lt;</span><span class="n">p</span><span class="o">&gt;</span><span class="k">def</span> <span class="nf">usage</span><span class="p">():</span>
    <span class="k">print</span> <span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span>
        <span class="n">Usage</span><span class="p">:</span> <span class="n">sendlines</span> <span class="o">-</span><span class="n">f</span> <span class="n">textFile</span> <span class="o">-</span><span class="n">c</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="n">COMMAND</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;</span> <span class="p">[</span> <span class="o">-</span><span class="n">d</span> <span class="n">DELAY</span> <span class="p">]</span>
        <span class="o">-</span> <span class="n">textFile</span><span class="p">:</span> <span class="n">Text</span> <span class="nb">file</span> <span class="n">where</span> <span class="n">read</span> <span class="n">lines</span> <span class="n">from</span><span class="o">.</span> <span class="n">Mandatory</span><span class="o">.</span>
        <span class="o">-</span> <span class="n">COMMAND</span><span class="p">:</span> <span class="n">Command</span> <span class="n">to</span> <span class="n">be</span> <span class="n">executed</span> <span class="p">(</span><span class="k">if</span> <span class="n">there</span> <span class="n">are</span> <span class="nb">any</span> <span class="n">arguments</span> <span class="n">to</span> <span class="n">be</span> <span class="n">sent</span><span class="p">,</span> <span class="n">must</span> <span class="n">be</span> <span class="n">put</span> <span class="nb">all</span> <span class="n">between</span> <span class="n">quotes</span><span class="p">)</span><span class="o">.</span> <span class="n">Mandatory</span>
        <span class="o">-</span> <span class="n">DELAY</span><span class="p">:</span> <span class="n">Time</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span> <span class="n">to</span> <span class="n">wait</span> <span class="n">between</span> <span class="n">sending</span> <span class="n">lines</span><span class="o">.</span> <span class="n">Optional</span><span class="o">.</span>
        <span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;</span>
<span class="k">if</span> <span class="o">&lt;</span><span class="n">strong</span><span class="o">&gt;</span><span class="n">name</span><span class="o">&lt;/</span><span class="n">strong</span><span class="o">&gt;</span> <span class="o">==</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">&lt;</span><span class="n">strong</span><span class="o">&gt;</span><span class="n">main</span><span class="o">&lt;/</span><span class="n">strong</span><span class="o">&gt;&amp;</span><span class="n">rdquo</span><span class="p">;:</span>
    <span class="n">textFile</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">command</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="n">delay</span> <span class="o">=</span> <span class="bp">None</span>
    <span class="k">try</span><span class="p">:</span>
        <span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">getopt</span><span class="o">.</span><span class="n">getopt</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="n">f</span><span class="p">:</span><span class="n">c</span><span class="p">:</span><span class="n">d</span><span class="p">:</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="p">[</span><span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="nb">file</span><span class="o">=&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="n">command</span><span class="o">=&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="n">delay</span><span class="o">=&amp;</span><span class="n">rdquo</span><span class="p">;])</span>
    <span class="k">except</span> <span class="n">getopt</span><span class="o">.</span><span class="n">GetoptError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
        <span class="c"># print help information and exit:</span>
        <span class="k">print</span> <span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)</span> <span class="c"># will print something like &amp;ldquo;option -a not recognized&amp;rdquo;</span>
        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">o</span><span class="p">,</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">opts</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">o</span> <span class="ow">in</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">-</span><span class="n">f</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">ndash</span><span class="p">;</span><span class="nb">file</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;):</span>
            <span class="n">textFile</span> <span class="o">=</span> <span class="n">a</span>
        <span class="k">elif</span> <span class="n">o</span> <span class="ow">in</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">-</span><span class="n">c</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">ndash</span><span class="p">;</span><span class="n">command</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;):</span>
            <span class="n">command</span> <span class="o">=</span> <span class="n">a</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span> <span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;)</span>
        <span class="k">elif</span> <span class="n">o</span> <span class="ow">in</span> <span class="p">(</span><span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">-</span><span class="n">d</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="o">&amp;</span><span class="n">ndash</span><span class="p">;</span><span class="n">delay</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;):</span>
            <span class="n">delay</span> <span class="o">=</span> <span class="n">a</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">ldquo</span><span class="p">;</span><span class="n">unhandled</span> <span class="n">option</span><span class="o">&amp;</span><span class="n">rdquo</span><span class="p">;</span>
            <span class="n">usage</span><span class="p">()</span>
    <span class="k">if</span><span class="p">(</span><span class="n">command</span> <span class="ow">and</span> <span class="n">textFile</span><span class="p">):</span>
        <span class="n">run</span><span class="p">(</span><span class="n">command</span><span class="p">,</span><span class="n">textFile</span><span class="p">,</span><span class="n">delay</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="n">usage</span><span class="p">()</span>
        <span class="k">print</span> <span class="o">&amp;</span><span class="n">lsquo</span><span class="p">;</span><span class="n">Missing</span> <span class="n">argument</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">.</span> <span class="n">Exit</span>\<span class="n">n</span><span class="o">&amp;</span><span class="n">rsquo</span><span class="p">;</span>
        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></code></pre></div></p>
]]></content>
  </entry>
  
</feed>
