<?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>Krix Apolinário &#187; Módulo</title>
	<atom:link href="http://blog.krix.com.br/tag/modulo/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.krix.com.br</link>
	<description></description>
	<lastBuildDate>Fri, 23 Jul 2010 18:20:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Arquivos &amp; Python</title>
		<link>http://blog.krix.com.br/2009/09/17/arquivos-python/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=arquivos-python</link>
		<comments>http://blog.krix.com.br/2009/09/17/arquivos-python/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 10:03:39 +0000</pubDate>
		<dc:creator>Krix Apolinário</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Arquivos]]></category>
		<category><![CDATA[Módulo]]></category>

		<guid isPermaLink="false">http://blog.krix.com.br/?p=2080</guid>
		<description><![CDATA[Algo que venho constantemente usando em meus scripts Python é a manipulação de arquivos, seja criando ou acrescendo textos. Para isso vou usar um exemplo para começar a explicar: Text = ''' 192.168.2.32 192.168.2.63 192.168.2.86 192.168.2.90 ''' &#160; MyFile = open&#40;'/home/krix/list_ips.txt', 'w'&#41; MyFile.write&#40;Text&#41; MyFile.close&#40;&#41; O código acima cria o arquivo (ou se ele já existe [...]]]></description>
			<content:encoded><![CDATA[<p>Algo que venho constantemente usando em meus scripts Python é a manipulação de arquivos, seja criando ou acrescendo textos. Para isso vou usar um exemplo para começar a explicar:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">Text = <span style="color: #483d8b;">''</span><span style="color: #483d8b;">'
192.168.2.32
192.168.2.63
192.168.2.86
192.168.2.90
'</span><span style="color: #483d8b;">''</span>
&nbsp;
MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O código acima cria o arquivo (ou se ele já existe o sobescreve) <em>/home/krix/list_ips.txt</em> inserindo o texto declarado na variável <em>Text</em> e em seguida o fecha. Parece bem simples não é?! E é. A manipulação de arquivos com Python é realmente bem simples.</p>
<p>A sintaxe da função <em>open()</em> é:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #008000;">open</span><span style="color: black;">&#40;</span>arquivo<span style="color: black;">&#91;</span>, modo<span style="color: black;">&#91;</span>, tamanho do buffer<span style="color: black;">&#93;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O primeiro parâmetro <em>arquivo</em> é obrigatório e como se pode ver é o nome e/ou caminho do arquivo a ser aberto;</p>
<p>O segundo parâmetro <em>modo</em>, que não é obrigatório, será uma string que indicará o modo como o arquivo será aberto. São eles:</p>
<ul>
<li><em>r</em> (<em>read</em>): O arquivo é aberto somente para leitura. Quando não informado o modo este será o padrão.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
ReadingFile = MyFile.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">print</span> ReadingFile</pre></div></div>

<ul>
<li><em>w</em> (<em>write</em>): O arquivo é aberto somente para escrita e será bloqueado caso exista subescrevendo seu conteúdo e criado se não existir.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>a</em> (<em>append</em>): O arquivo é aberto somente para escrita contudo ao contrário do <em>w</em> que subescreve o conteúdo do arquivo ele irá acrescentar ao arquivo.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span>
NewIPs = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
NewIPs.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">' '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>NewIPs<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Todos os modos acima citados quando seguido do caracter <em>mais</em> (+) o arquivo será aberto tanto para leitura quanto para escrita.</p>
<p>Quando os modos r, w ou a estiver seguido do caracter b ou t isso indicará a forma de manupulação do arquivos, o b indicará que será binário e o t em texto e quando não informado o t será o padrão.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'w+'</span><span style="color: black;">&#41;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'wb'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O terceiro parâmetro <em>tamanho do buffer</em>, também não obrigatório, e controla o comportamento do buffer do arquivo. Se 0 não será bufferizado, se 1 será bufferizado e se for um número positivo maior que 1 indicará o tamanho do buffer em bytes.</p>
<p>Acima usamos alguns métodos como o read, write e close mas não falamos nada sobre eles então abaixo irei dá uma definição a eles e a alguns outros métodos que julguei indispensáveis:</p>
<ul>
<li><em>read()</em>: Lê o arquivo.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>readline(size)</em>: Lê uma só linha do arquivo. Size será a quantidade de caracteres que será lido na linha.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>readlines(size)</em>: Lê todas as linhas do arquivo e retorna numa lista. Size será o número de bytes a ser lido.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>write(str)</em>: Escreve a string passada no arquivo.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>writelines()</em>: Escreve no arquivo todas as strings de uma lista.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: black;">writelines</span><span style="color: black;">&#40;</span><span style="color: #008000;">list</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O que seria o mesmo que:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">list</span>:
    MyFile.<span style="color: black;">writelines</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span></pre></div></div>

<ul>
<li><em>close()</em>: Fecha o arquivo.</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>No exemplo que dei mais acima quando falei sobre o <em>modo a</em> você percebeu que usei dois métodos que os quais ainda não tinha comentado, o <em>join</em> e o <em>append</em>. O <em>join</em> tem a função de concatenar uma string a outra o que seria justamente o que eu precisaria no código. O <em>append</em> adiciona um ítem ao final de uma lista. Dadas as definições vamos explicar: Se eu tivesse ignorado o append e usasse somente o join para adicionar o Text ao arquivo será que funcionaria sem problemas? Sim, mas sem problemas?!?! Humm, isso já seria relativo, se eu retirasse e dexasse o código assim:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">' '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>O arquivo ficaria assim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000;">1</span> <span style="color: #000000;">9</span> <span style="color: #000000;">2</span> . <span style="color: #000000;">1</span> <span style="color: #000000;">6</span> <span style="color: #000000;">8</span> . <span style="color: #000000;">2</span> . <span style="color: #000000;">3</span> <span style="color: #000000;">2</span>
<span style="color: #000000;">1</span> <span style="color: #000000;">9</span> <span style="color: #000000;">2</span> . <span style="color: #000000;">1</span> <span style="color: #000000;">6</span> <span style="color: #000000;">8</span> . <span style="color: #000000;">2</span> . <span style="color: #000000;">6</span> <span style="color: #000000;">3</span>
<span style="color: #000000;">1</span> <span style="color: #000000;">9</span> <span style="color: #000000;">2</span> . <span style="color: #000000;">1</span> <span style="color: #000000;">6</span> <span style="color: #000000;">8</span> . <span style="color: #000000;">2</span> . <span style="color: #000000;">8</span> <span style="color: #000000;">6</span>
<span style="color: #000000;">1</span> <span style="color: #000000;">9</span> <span style="color: #000000;">2</span> . <span style="color: #000000;">1</span> <span style="color: #000000;">6</span> <span style="color: #000000;">8</span> . <span style="color: #000000;">2</span> . <span style="color: #000000;">9</span> <span style="color: #000000;">0</span></pre></div></div>

<p>Mas deixando como o exemplo inicial o arquivo ficaria assim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">192.168.2.32
192.168.2.63
192.168.2.86
192.168.2.90</pre></div></div>

<p>Fico por aqui com o post, acho que já falei demais <img src='http://blog.krix.com.br/krix/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 435px; width: 1px; height: 1px;">
<ul>
<li>- <em>a</em> para anexar (<em>append</em>);</li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">MyFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/home/krix/list_ips.txt'</span>, <span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span>
NewIPs = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
NewIPs.<span style="color: black;">append</span><span style="color: black;">&#40;</span>Text<span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>NewIPs<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
MyFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.krix.com.br/2009/09/17/arquivos-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enviando Email em Python</title>
		<link>http://blog.krix.com.br/2009/07/11/enviando-email-em-python/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=enviando-email-em-python</link>
		<comments>http://blog.krix.com.br/2009/07/11/enviando-email-em-python/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 10:23:38 +0000</pubDate>
		<dc:creator>Krix Apolinário</dc:creator>
				<category><![CDATA[Linguagem]]></category>
		<category><![CDATA[Modulos]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Módulo]]></category>
		<category><![CDATA[smtplib]]></category>

		<guid isPermaLink="false">http://blog.krix.com.br/?p=1988</guid>
		<description><![CDATA[Python tem um módulo smtplib que permite o envio de emails tradicionais através do protocolo SMTP. Antes de falar sobre o módulo vamos dá uma olhada no código abaixo: 1 #!/usr/bin/env python 2 # -*- coding: iso-8859-1 -*- 3 4 # Krix Apolinário - krix@krix.com.br 5 6 import smtplib 7 8 def MySendMail&#40;&#41;: 9 server        [...]]]></description>
			<content:encoded><![CDATA[<p>Python tem um módulo <a title="Módulo smtplib" href="http://docs.python.org/library/smtplib.html" target="_blank">smtplib</a> que permite o envio de emails tradicionais através do protocolo <a title="Simple Mail Transfer Protocol" href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol" target="_blank">SMTP</a>. Antes de falar sobre o módulo vamos dá uma olhada no código abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"> <span style="color: #ff4500;">1</span>  <span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
 <span style="color: #ff4500;">2</span>  <span style="color: #808080; font-style: italic;"># -*- coding: iso-8859-1 -*-</span>
 <span style="color: #ff4500;">3</span>
 <span style="color: #ff4500;">4</span>  <span style="color: #808080; font-style: italic;"># Krix Apolinário - krix@krix.com.br</span>
 <span style="color: #ff4500;">5</span>
 <span style="color: #ff4500;">6</span>  <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">smtplib</span>
 <span style="color: #ff4500;">7</span>
 <span style="color: #ff4500;">8</span>  <span style="color: #ff7700;font-weight:bold;">def</span> MySendMail<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
 <span style="color: #ff4500;">9</span>      server        = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.krix.com.br'</span>, <span style="color: #ff4500;">25</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">10</span>      sender        = <span style="color: #483d8b;">'relatorio@krix.com.br'</span>
<span style="color: #ff4500;">11</span>      recipient     = <span style="color: #483d8b;">'krix@krix.com.br'</span>
<span style="color: #ff4500;">12</span>      message       = <span style="color: #483d8b;">''</span><span style="color: #483d8b;">'
13      From: %s
14      To: %s
15      Subject: Email de teste
16      Corpo do email
17      '</span><span style="color: #483d8b;">''</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>sender, recipient<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">18</span>      server.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>sender, recipient, message<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">19</span>      server.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">20</span>
<span style="color: #ff4500;">21</span>  <span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
<span style="color: #ff4500;">22</span>     <span style="color: #ff7700;font-weight:bold;">try</span>:
<span style="color: #ff4500;">23</span>         MySendMail<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">24</span>     <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IOError</span>:
<span style="color: #ff4500;">25</span>         <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Ooops... O email não foi enviado...'</span></pre></div></div>

<p>A classe SMTP controla a conexão com um servidor SMTP, para isso informei, host e a porta. O método SMTP.sendmail(sender, recipient, message) envia o email e o método SMTP.quit() termina a sessão com o servidor SMTP e fecha a conexão.</p>
<p>No exemplo acima como pode ser observado o corpo do email é um texto atribuído a uma variável, mas e se você estiver usando um script que irá gerar um log em um arquivo e você além de querer que esse log fique no arquivo salvo, você quer que ele também seja enviado por email, nesse caso ficaria assim:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"> <span style="color: #ff4500;">8</span>  <span style="color: #ff7700;font-weight:bold;">def</span> MySendMail<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
 <span style="color: #ff4500;">9</span>      server        = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.krix.com.br'</span>, <span style="color: #ff4500;">25</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">10</span>      sender        = <span style="color: #483d8b;">'relatorio@krix.com.br'</span>
<span style="color: #ff4500;">11</span>      recipient     = <span style="color: #483d8b;">'krix@krix.com.br'</span>
<span style="color: #ff4500;">12</span>      directory     = <span style="color: #483d8b;">'/home/krix/message_for_email.txt'</span>
<span style="color: #ff4500;">13</span>      open_archive  = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>directory, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">14</span>      message       = open_archive.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">15</span>      server.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>sender, recipient, message<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">16</span>      server.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">17</span>      open_archive.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.krix.com.br/2009/07/11/enviando-email-em-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Verificando Senhas Em Sistemas Unix Com Python</title>
		<link>http://blog.krix.com.br/2009/02/10/verificando-senhas-em-sistemas-unix-com-python/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=verificando-senhas-em-sistemas-unix-com-python</link>
		<comments>http://blog.krix.com.br/2009/02/10/verificando-senhas-em-sistemas-unix-com-python/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 04:19:11 +0000</pubDate>
		<dc:creator>Krix Apolinário</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Modulos]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Módulo]]></category>

		<guid isPermaLink="false">http://blog.krix.com.br/?p=1102</guid>
		<description><![CDATA[Antes de falar qualquer coisa acho melhor mostrar o script e depois explicá-lo aos poucos. #!/usr/bin/env python &#160; # Krix Apolinario # krix@krix.com.br # 10 de Fevereiro de 2009 &#160; # Script para verificar senha &#160; import spwd import crypt import getpass &#160; login            = raw_input&#40;'Login: '&#41; password         = getpass.getpass&#40;&#41; password_shadow  = spwd.getspnam&#40;login&#41;&#91;1&#93; checking         = [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de falar qualquer coisa acho melhor mostrar o script e depois explicá-lo aos poucos. <img src='http://blog.krix.com.br/krix/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Krix Apolinario</span>
<span style="color: #808080; font-style: italic;"># krix@krix.com.br</span>
<span style="color: #808080; font-style: italic;"># 10 de Fevereiro de 2009</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Script para verificar senha</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> spwd
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">crypt</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">getpass</span>
&nbsp;
login            = <span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Login: '</span><span style="color: black;">&#41;</span>
password         = <span style="color: #dc143c;">getpass</span>.<span style="color: #dc143c;">getpass</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
password_shadow  = spwd.<span style="color: black;">getspnam</span><span style="color: black;">&#40;</span>login<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
checking         = <span style="color: #dc143c;">crypt</span>.<span style="color: #dc143c;">crypt</span><span style="color: black;">&#40;</span>password, password_shadow<span style="color: black;">&#41;</span> == password_shadow
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> checking == <span style="color: #008000;">True</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'A senha informada esta correta'</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'A senha informada esta errada'</span></pre></div></div>

<p>Como pode ser visto fiz uso de 2 módulos que são específicos para serviços em sistemas Unix: <em>spwd</em>, <em>crypt</em> e de um módulo para serviços genéricos para sistemas operacionais: <em>getpass</em>.</p>
<p>O <em>spwd</em> é um módulo relativamente novo, pois está disponível a partir da versão 2.5 de <em>Python</em>. Este módulo permite acessar o arquivo <em>shadow</em> e o resultado dos dados são reportados como uma <a title="Tuple" href="http://en.wikipedia.org/wiki/Tuple" target="_blank">tupla</a>. Lembrando que para esse acesso exista o usuário que executar o script deve ter pemissão de root ou fazer parte do grupo <em>shadow</em>.</p>
<p>No script usei a função <em>getspnam()</em> que retornará como uma tupla as informações contidas no <em>shadow</em> referente ao login que informei, mas como somente preciso da senha descriminei para que fosse retornado somente o item [1].</p>
<p>O <em>crypt</em> é um módulo que implementa a rotina <a title="Man crypt" href="http://linux.die.net/man/3/crypt" target="_blank"><em>crypt</em></a> que é uma função Unix de criptografia de senhas, baseado no algoritmo <a title="Data Encryption Standard" href="http://pt.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank">Data Encryption Standard</a>.</p>
<p>No script usei a função <em>crypt()</em>, por sinal única do módulo, onde passei como parâmetros a senha informada e o <em>hash</em> da senha correta, para que fosse gerado um <em>hash</em> da senha informada e em seguida comparei o hash gerado com o <em>hash</em> da senha correta.</p>
<p>O <em>getpass</em> é um módulo onde podemos ter tuas duas funções: Uma delas é a que usamos no script, a  getpass e a outra é a getuser. A <em>getpass()</em> permite que você digite uma senha, sem que seja exibida na saída padrão, assim como o conhecido comando <a title="Man passwd" href="http://linux.die.net/man/1/passwd" target="_blank"><em>passwd</em></a> dos sistemas Unix. O <em>getuser()</em> retorna o usuário atual assim como o comando  <a title="Man whoami" href="http://linux.die.net/man/1/whoami" target="_blank"><em>whoami</em></a>.</p>
<p>No script usei a função <em>getpass() </em>e atribui a senha passada a ela a uma variável para que fosse possível usá-la depois.</p>
<p>Apesar de ser um script simples, ao meu ver, é de grande utilidade.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.krix.com.br/2009/02/10/verificando-senhas-em-sistemas-unix-com-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
