<?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>protected  * void &#187; HTTP</title>
	<atom:link href="http://www.danilocesar.com/blog/category/http/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danilocesar.com/blog</link>
	<description>Tecnologia, Linux e Software Livre</description>
	<lastBuildDate>Thu, 25 Feb 2010 19:27:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>WTF???</title>
		<link>http://www.danilocesar.com/blog/2008/07/25/wtf/</link>
		<comments>http://www.danilocesar.com/blog/2008/07/25/wtf/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 05:57:26 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[/dev/null]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[SL]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=145</guid>
		<description><![CDATA[Agora pouco digitei um endereço errado e tive acesso à uma infeliz página: WTF??? Outro teste: OK, já passou da hora usar OpenDNS!]]></description>
			<content:encoded><![CDATA[<p>Agora pouco digitei um endereço errado e tive acesso à uma infeliz página:</p>
<p><a href="http://www.danilocesar.com/blog/wp-content/uploads/2008/07/picture-1.png"><img class="alignnone size-full wp-image-147" title="WTF?" src="http://www.danilocesar.com/blog/wp-content/uploads/2008/07/picture-1.png" alt="" width="500" height="420" /></a></p>
<p>WTF???</p>
<p>Outro teste:</p>
<p><a href="http://www.danilocesar.com/blog/wp-content/uploads/2008/07/picture-3.png"><img class="alignnone size-full wp-image-149" title="WTF2?" src="http://www.danilocesar.com/blog/wp-content/uploads/2008/07/picture-3.png" alt="" width="499" height="122" /></a></p>
<p>OK, já passou da hora usar OpenDNS!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2008/07/25/wtf/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Liberando trabalhos da UFPR</title>
		<link>http://www.danilocesar.com/blog/2008/06/01/liberando-trabalhos-da-ufpr/</link>
		<comments>http://www.danilocesar.com/blog/2008/06/01/liberando-trabalhos-da-ufpr/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 18:10:53 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[/dev/null]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mandriva]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Ubuntu-Br]]></category>
		<category><![CDATA[raw socket]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[trabalhos]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=136</guid>
		<description><![CDATA[Estou prestes a me formar, e lembrando-me de um convite do Arthur Furlan, decidi que estava na hora de liberar alguns trabalinhos legais que escrevi na faculdade. Servidor/Cliente FTP usando raw socket. Acho que este é o que será mais útil, principalmente aos meus colegas de Universidade. Trabalho de redes1, a missão era implementar um [...]]]></description>
			<content:encoded><![CDATA[<p>Estou prestes a me <a href="http://www.inf.ufpr.br" target="_blank">formar</a>, e lembrando-me de um <a href="http://arthurfurlan.org/blog/2007/08/05/criando-um-servidor-tcp-concorrente-em-python/">convite</a> do <a href="http://arthurfurlan.org">Arthur Furla</a>n, decidi que estava na hora de liberar alguns trabalinhos legais que escrevi na faculdade.</p>
<h3>Servidor/Cliente FTP usando raw socket.</h3>
<p>Acho que este é o que será mais útil, principalmente aos meus colegas de <a href="http://www.ufpr.br">Universidade</a>.<br />
<a href="http://www.inf.ufpr.br/albini/R1_Graduacao.html" target="_blank"> Trabalho de redes1</a>, a missão era implementar um cliente/servidor FTP baseado no Kermit utilizando raw sockets. Algumas pessoas fizeram utilizando UDP, mas  ae fica sem graça né?! =)</p>
<p>Para <a href="http://en.wikipedia.org/wiki/Flow_control" target="_blank">controle de fluxo, foi implementado o pára-e-espera</a>. Toda mensagem deve retornar um ack/nack. Obviamente, não há TCP nem IP, a &#8220;conexão&#8221; é feita sem endereçamento pelo cabo de rede. Os cabos devem ser ponto-a-ponto (até pode ser utilizado um hub, mas provavelmente ele mate todos os pacotes por serem inválidos).</p>
<p>Para detectar erros utilizo <a href="http://pt.wikipedia.org/wiki/Paridade_%28telecomunica%C3%A7%C3%B5es%29" target="_blank">paridade-par</a> (sux), e caso o cabo de rede seja removido e colocado depois de pouco tempo, o sistema deve continuar de onde parou. O arquivo final precisa ser consistente. Isto é muito complicado usando apenas paridade par, logo nas mensagens de fim de arquivo envio como dado o MD5, para garantir consistência.</p>
<p>O tamanho de cada arquivo nos pacotes está incorreto. Esta informação está sendo ignorada.</p>
<p>O resto está descrito no arquivo: Mensagens de atá 255 bytes, etc etc.</p>
<p>Como estava aprendendo GTK+ na época, fiz umas modificações para incluir uma interface gráfica. Ficou meio estranho pois incluí isto depois que o trabalho já estava pronto. De qualquer forma, para compilar esta versão, utilize o comando &#8220;<em><strong>make gui</strong></em>&#8221;</p>
<p>No Unix, o pacote deve ser puxado com o comando:<br />
<code> </p>
<pre>svn co http://danilocesar.com/svn/redes1</pre>
<p></code><br />
Outro dia publico outros códigos.<br />
[]&#8216; s</p>
<p>Danilo Cesar</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2008/06/01/liberando-trabalhos-da-ufpr/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP e Null Bytes issues</title>
		<link>http://www.danilocesar.com/blog/2007/08/24/php-e-null-bytes-issues/</link>
		<comments>http://www.danilocesar.com/blog/2007/08/24/php-e-null-bytes-issues/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 14:29:54 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[/dev/null]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Quick Tip]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Ubuntu-Br]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/2007/08/24/php-e-null-bytes-issues/</guid>
		<description><![CDATA[if (file_exists(realpath($_GET['teste'] . ".php"))){ echo 'OK'; } else{ echo 'Fail'; } Aparentemente esta verificação é bastante segura né? Infelizmente não. O PHP usa o padrão de strings usado em C (aquelas terminadas com &#8216;\0&#8242;), o que gera um problema bastante conhecido chamado de Null Byte issue [1]. O que acontece se seu $_GET['teste'], aparentemente seguro, [...]]]></description>
			<content:encoded><![CDATA[<p><code lang="php"></p>
<p>if (file_exists(realpath($_GET['teste'] . ".php"))){<br />
echo 'OK';<br />
}<br />
else{<br />
echo 'Fail';<br />
}<br />
</code></p>
<p>Aparentemente esta verificação é bastante segura né?</p>
<p>Infelizmente não. O PHP usa o padrão de strings usado em C (aquelas terminadas com &#8216;\0&#8242;), o que gera um problema bastante conhecido chamado de Null Byte issue [1].</p>
<p>O que acontece se seu $_GET['teste'], aparentemente seguro, tiver um &#8216;\0&#8242;?<br />
Sua função realpath vai verificar apenas o $_GET['teste'] e nem vai saber que existe um &#8220;.php&#8221;</p>
<p>Faça o teste:</p>
<p>http://localhost/labs/teste.php?teste=/etc/passwd%00</p>
<p>(%00 é o código hexadecimal aceito pelos browsers para o \0)</p>
<p>E o resultado:</p>
<p><code>OK</code></p>
<p>[1] <a href="http://en.wikipedia.org/wiki/Null_character">http://en.wikipedia.org/wiki/Null_character</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2007/08/24/php-e-null-bytes-issues/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Túnel SSH com Proxy Socks: Agora em sabor Transparente!</title>
		<link>http://www.danilocesar.com/blog/2007/05/29/tunel-ssh-com-proxy-socks-agora-em-sabor-transparente/</link>
		<comments>http://www.danilocesar.com/blog/2007/05/29/tunel-ssh-com-proxy-socks-agora-em-sabor-transparente/#comments</comments>
		<pubDate>Wed, 30 May 2007 02:09:46 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Portáteis]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Ubuntu-Br]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/2007/05/29/tunel-ssh-com-proxy-socks-agora-em-sabor-transparente/</guid>
		<description><![CDATA[Há muito tempo que eu queria saber um pouco mais sobre os tais túneis SSH. Depois de procurar um pouco, achei um artigo que poderia me ajudar a fazer um túnel SSH afim de proteger meus dados em pontos de acesso wireless públicos. Mas eu queria mais; Não queria ficar pondo e removendo proxy de [...]]]></description>
			<content:encoded><![CDATA[<p>Há muito tempo que eu queria saber um pouco mais sobre os tais túneis SSH.</p>
<p>Depois de procurar um pouco, achei <a href="http://ubuntu.wordpress.com/2006/12/08/ssh-tunnel-socks-proxy-forwarding-secure-browsing/" target="_blank">um artigo</a> que poderia me ajudar a fazer um túnel SSH afim de proteger meus dados em pontos de acesso wireless públicos.</p>
<p>Mas eu queria mais; Não queria ficar pondo e removendo proxy de todas as aplicações só porque mudei de rede. Queria deixar isto transparente.</p>
<p>Depois de perder algumas horas com regras <a href="http://en.wikipedia.org/wiki/Iptables">IPTABLES</a> <a href="http://tips.linux.com/article.pl?sid=06/06/06/200234&amp;tid=100." target="_blank">descobri</a> o <strong><a href="http://tsocks.sourceforge.net" target="_blank">Tsocks</a>, </strong>ou Transparent <a href="http://en.wikipedia.org/wiki/SOCKS" target="_blank">Socks</a> para os íntimos.</p>
<h3>Instalação</h3>
<p>No Ubuntu/Debian como sempre é muito fácil:<br />
<code>apt-get install tsocks</code></p>
<p><sub>Falar de instalação já não tem mais graça&#8230;.<br />
</sub></p>
<h3>Configuração</h3>
<p>Basicamente é necessário editar o arquivo /etc/tsocks.conf. Particularmente, eu limpei este arquivo e coloquei apenas as seguintes linhas:<br />
<code><br />
local = 192.168.0.0/255.255.255.0<br />
path {<br />
reaches = 0.0.0.0/0.0.0.0<br />
server = 127.0.0.1<br />
server_type = 4<br />
server_port = 5151<br />
}<br />
</code><br />
Calma calma, vou explicar:</p>
<p><strong>Local</strong>: é o endereço e a máscara de subrede da rede local. Afina, quando você digitar 192.168.X.X você geralmente deseja acessar a rede interna, correto? Algumas pessoas podem querer utilizar 10.0.0.0/255.0.0.0.</p>
<p>Fora isto, eu quero que <strong>TODA</strong> a conexão feita para <strong>QUALQUER</strong> outro endereço, seja encaminhada para o meu Túnel. Para isto, criei um <strong>path </strong>.</p>
<p><strong>reaches:</strong> Da mesma forma que <strong>Local</strong>, indica o IP da rede para qual eu quero acessar. 0.0.0.0/0.0.0.0 significa aqui toda e qualquer rede (exceto a definida em <strong>Local</strong>).</p>
<p><strong>server</strong> : Indica o endereço IP do servidor Socks. No caso estará em minha máquina local.</p>
<p><strong>server_type</strong>: Indica a versão do servidor Socks.</p>
<p><strong>server_port</strong>: Indica a porta onde o servidor estará rodando. No meu caso, será a porta 5151.</p>
<h3>E agora Rapá?</h3>
<p>E agora precisamos rodar o nosso túnel. O meu fica da seguinte forma:</p>
<p><code> ssh -C -D 5151 MEU_LOGIN@talisker.c3sl.ufpr.br cat -<br />
</code></p>
<p>E depois iniciar o tsocks com o comando:</p>
<p><code>tsocks -on</code></p>
<p>Agora, para rodar o Firefox ou Pidgin utilizando o tsocks, basta dar o seguinte comando:</p>
<p><code>tsocks firefox<br />
tsocks gaim<br />
</code></p>
<p>E está aí, pronto para usar e sem configurações adicionais!</p>
<p>Qualquer dúvida, estamos aí!</p>
<p>[]&#8216;s</p>
<p>Danilo Cesar</p>
<p><span style="font-weight: bold">Update: </span>Desafio para férias: Fazer um port do Tsocks para <a href="http://www.maemo.org" target="_blank">Maemo</a> para usar encriptação nas redes do <a href="http://www.c3sl.ufpr.br">C3sl</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2007/05/29/tunel-ssh-com-proxy-socks-agora-em-sabor-transparente/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>O que fazer durante a atualização do seu DNS?</title>
		<link>http://www.danilocesar.com/blog/2006/12/20/o-que-fazer-durante-a-atualizacao-do-seu-dns/</link>
		<comments>http://www.danilocesar.com/blog/2006/12/20/o-que-fazer-durante-a-atualizacao-do-seu-dns/#comments</comments>
		<pubDate>Wed, 20 Dec 2006 14:33:35 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Ubuntu-Br]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/2006/12/20/o-que-fazer-durante-a-atualizacao-do-seu-dns/</guid>
		<description><![CDATA[Olá pessoas, Hoje venho escrever sobre uma idéia que tive para solucionar um certo problema. A algum tempo atrás necessitei trocar um site de um servidor para o outro, mas como este site servia algumas aplicações críticas (é, talvez nem tão críticas), o mesmo não poderia sair em nenhum momento do ar. Ou seja, deveria [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoas,</p>
<p>Hoje venho escrever sobre uma idéia que tive para solucionar um certo problema.</p>
<p>A algum tempo atrás necessitei trocar um site de um servidor para o outro, mas como este site servia algumas aplicações críticas (é, talvez nem tão críticas), o mesmo não poderia sair em nenhum momento do ar. Ou seja, deveria estar rodando perfeitamente tanto em um host quanto em outro.</p>
<p>Mas, como testar um sistema em um novo servidor? Substituindo as informações de DNS. Mas, no melhor dos casos demora uma hora. E se der errado? Substitui de volta? São pelo menos 3 horas de um sistema off-line. Acho que não é uma solução interessante para aplicações críticas né?</p>
<h3>Solução inteligente.</h3>
<p>Adicionar nova entrada no /etc/hosts. Simples assim.<br />
Desta forma, você poderá testar sua aplicação no seu novo servidor, e todos os seus clientes continuarão acessando no antigo! Assim, quando você tiver certeza de que tudo está funcionando, você substitui oficialmente o DNS no seu registro de domínios. Legal né?</p>
<h3>Passo a Passo</h3>
<p>1) Primeiro pegue as informações de DNS de seu novo host.<br />
Um exemplo seria o dreamhost: ns1.dreamhost.com</p>
<p>2) Com o comando ping, descubra qual o IP do servidor DNS<br />
<code><br />
$ ping ns1.dreamhost.com<br />
PING ns1.dreamhost.com (66.33.206.206) 56(84) bytes of data.<br />
64 bytes from ns1.dreamhost.com (66.33.206.206): icmp_seq=1 ttl=44 time=233 ms</p>
<p>--- ns1.dreamhost.com ping statistics ---<br />
1 packets transmitted, 1 received, 0% packet loss, time 0ms</p>
<p>rtt min/avg/max/mdev = 233.172/233.172/233.172/0.000 ms<br />
</code><br />
O Ip do servidor aqui é: 66.33.206.206</p>
<p>3) Abra o arquivo /etc/hosts (como root é claro), e adicione a linha<br />
<code><br />
66.33.206.206	seu_site.com.br www.seu_site.com.br<br />
</code></p>
<p>4) Agora, no seu browser acesse o seu_site.com.br, e perceba que você estará acessando no novo servidor, e não mais no oficial.<br />
Agora você pode testar a sua aplicação online, corretamente, sem colocar em risco a continuidade do seu serviço oficial. =)</p>
<p>Qualquer dúvida estamos ae!</p>
<p><em><strong>Acho que esta solução não funciona para quem usa servidores proxy&#8217;s</strong></em></p>
<p>[]&#8216;s<br />
Danilo Cesar</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2006/12/20/o-que-fazer-durante-a-atualizacao-do-seu-dns/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTTP Headers, HTTP por força bruta&#8230;</title>
		<link>http://www.danilocesar.com/blog/2006/02/19/http-headers-http-por-forca-bruta/</link>
		<comments>http://www.danilocesar.com/blog/2006/02/19/http-headers-http-por-forca-bruta/#comments</comments>
		<pubDate>Sun, 19 Feb 2006 16:50:38 +0000</pubDate>
		<dc:creator>Danilo Cesar</dc:creator>
				<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://www.danilocesar.com/blog/?p=23</guid>
		<description><![CDATA[Olá pessoal&#8230; Hoje deixei o aiBur Framework de lado para fazer algumas coisas divertidas&#8230; =) Um antigo camarada de programação ASP que está fazendo algumas brincadeiras com linux e SQUID me perguntou esses dias como ele poderia fazer um POST via linha de comando&#8230; Eu que não sabia exatamente o que ele queria indiquei: echo [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal&#8230;</p>
<p>Hoje deixei o aiBur Framework de lado para fazer algumas coisas divertidas&#8230; =)</p>
<p>Um antigo camarada de programação ASP que está fazendo algumas brincadeiras com linux e SQUID me perguntou esses dias como ele poderia fazer um POST via linha de comando&#8230; Eu que não sabia exatamente o que ele queria indiquei:</p>
<p><code lang="bash"><br />
echo "nome=danilo&#038;idade=20" | lynx --post-data http://www.meusite.com.br/meu_post.php<br />
</code><br />
Como muitos devem saber, este comando funciona perfeitamente para enviar POSTs via linha de comando. Mas meu amigo precisava de algo mais &#8220;bruto&#8221;. Ele precisava fazer, por exemplo, POST de um arquivo&#8230; Lá vai o Danilo arranjar uma solução&#8230;</p>
<p>Aqui vou conciliar uma dica que escrevi a muito tempo atrás para o <a href="http://www.vivaolinux.com.br/dicas/verDica.php?codigo=2140">vivaolinux</a>, e a idéia sobre Headers HTTP que vi no <a href="http://brunotorres.net/2005/12/12/o-basico-da-web-introducao-ao-http">BrunoTorres.net.</a></p>
<h3>
Ferramentas que vamos utilizar:<br />
</h3>
<p><a href="http://hpux.cs.utah.edu/hppd/hpux/Networking/Misc/tcputils-0.6.2/">TCPUTILs</a> -> Tcputils é um pacote que contém um conjunto de ferramentas para utilizar sockets diretamente pelo Shell&#8230; Na verdade é um servidor e cliente de echo&#8230; Quase como um telnet. Mas dá pra fazer algumas coisas bacanas com ele, que nós veremos agora&#8230;. =)</p>
<p>HTTP -> Hypertext Transfer Protocol ou Protocolo de transferência de hipertexto: é o formato da comunicação entre o Browser e o servidor. Por exemplo, é o cliente que envia cookies, o servidor que grava sessions, redireciona, etc etc etc&#8230; Seu padrão é definido pela <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html" title="World Wide Web Consortium">W3C</a></p>
<p><a href="http://livehttpheaders.mozdev.org/">LivehttpHeaders Extension</a>: Extenção do Firefox que visualiza todos os headers de uma requisição http.</p>
<p><span id="more-23"></span></p>
<h3>Bom, vamos brincar um pouco:</h3>
<p>Precisamos primeiramente instalar o pacote TCPutil. Como eu uso Debian, é fácil:<br />
<code lang="bash"><br />
apt-get install tcputil<br />
</code></p>
<p>Depois de instalado, virá uma lista de comandos. Iremos usar apenas o tcpconnect. Outros podem ser visto na documentação (man tcpconnect) ou no meu artigo citado acima&#8230;</p>
<p>A descrição do comando é a seguinte:<br />
<code lang="bash">tcpconnect [HOST] [porta]</code></p>
<p>Após a conexão estabilizada, o cliente (no caso, você) poderá enviar suas strings de conexão. No caso, poderá mandar cabeçalhos HTTP para o servidor. Vamos fazer um teste? </p>
<p>tcpconnect danilocesar.com 80</p>
<p>Após a conexão com o servidor, você enviará os seguintes Headers do HTTP:</p>
<p>GET /blog/index.php HTTP/1.1<br />
Host: www.danilocesar.com</p>
<p>Este é, talvez, o cabeçalho mais simples que uma requisição HTTP pode ter. Vamos entende-la:</p>
<p>GET -> É o método de envio de dados<br />
/blog/index.php ->  É a página que eu estou querendo<br />
HTTP/1.2 -> É a versão do protocolo HTTP que estou usando<br />
Host: -> É o Host que você está buscando.</p>
<p>E como respostas você vai ter os Headers vindos do Servidor e o código HTML específico da página.</p>
<p>Agora, nem todos os Headers que estaremos enviando possuem apenas 2 linhas. Para facilitar a nossa vida, colocaremos o cabeçalho HTTP agora em um arquivo texto e iremos enviar os headers assim:</p>
<p>tcpconnect danilocesar.com 80 < headers.txt</p>
<p>Creio que vá facilitar a nossa vida... Bom, vamos continuar.</p>
<p><sub>Meus testes agora vão ser feitos no meu localhost&#8230; Por poder editar melhor os arquivos e tals&#8230;.</sub></p>
<p>Creio que está na hora de enviar-mos alguns Headers mais <strong>&#8220;Pró&#8221;</strong></p>
<p>Se você está com preguiça de ler a documentação do HTTP, podemos visualizar os Headers que o firefox envia utilizando a extenção <a href="http://livehttpheaders.mozdev.org/">LiveHTTPHeaders</a>.</p>
<p>Vamos fazer um teste&#8230;. Com a extensão devidamente instalada, aperte ALT + L, e acesse uma página qualquer. Por exemplo, http://www.google.com.br</p>
<p>Os Headers que enviamos<br />
<code><br />
GET / HTTP/1.1<br />
Host: www.google.com.br<br />
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060209 Debian/1.5.dfsg+1.5.0.1-2 Firefox/1.5.0.1<br />
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />
Accept-Language: pt-br<br />
Accept-Encoding: gzip,deflate<br />
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive: 300<br />
Connection: keep-alive<br />
Cookie: KIDYMD=#243194:FBOB#<br />
</code><br />
<em><strong>Cuidado: As propriedades dos headers devem ocupar apenas uma linha cada uma. Toda quebra de linha a mais é feita pelo browser e deve ser discartada</strong></em></p>
<p>Os Headers que recebemos<br />
<code><br />
HTTP/1.x 200 OK<br />
Cache-Control: private<br />
Content-Type: text/html<br />
Content-Encoding: gzip<br />
Server: GWS/2.1<br />
Content-Length: 1556<br />
Date: Sun, 19 Feb 2006 16:25:35 GMT<br />
</code></p>
<p>Se você enviar estes mesmos headers no pelo tcpconnect, talvez você receba apenas algumas Strings estranhas, pois a informação vem toda compactada do Servidor pelo gzip. Para ver as informações inteiras, retire a linha &#8220;Accept-Encoding: gzip,deflate &#8221; do seu header.</p>
<p>Agora, dentro do seu LiveHTTPHeaders, dê um Clean, volte ao google e busque por HTTP:<br />
Temos agora 2 diferenças nos Headers.<br />
<code><br />
GET /search?hl=pt-BR&#038;q=HTTP+Headers&#038;btnG=Pesquisa+Google&#038;meta= HTTP/1.1</p>
<p>Referer: http://www.google.com.br/<br />
</code></p>
<p>O get agora está bem mais incrementado certo? Ele contém as Strings de busca do google.<br />
Um novo Header foi enviado pelo browser: Referer. Ele indica o caminho completo da página de onde você veio. Isto é muito utilizado para quebrar spammers de blog (método bem inseguro, mas quebra boa parte dos spammers), para estatisticas (quais sites possuem links para o seu).</p>
<h3>E os prometidos arquivos?</h3>
<p>Vamos agora aprender a enviar arquivos. Na verdade, não muda muita coisa.</p>
<p><code><br />
POST /obj/teste.php HTTP/1.1<br />
Host: localhost<br />
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060209 Debian/1.5.dfsg+1.5.0.1-2 Firefox/1.5.0.1<br />
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />
Accept-Language: pt-br<br />
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
Keep-Alive: 300<br />
Connection: keep-alive<br />
Referer: http://localhost/obj/teste.php<br />
Content-Type: multipart/form-data; boundary=--BoRdEr_Signature-00253658974569--<br />
Content-Length: 700</p>
<p>----BoRdEr_Signature-00253658974569--<br />
Content-Disposition: form-data; name="teste"; filename="source.list"<br />
Content-Type: text/plain</p>
<p>#deb cdrom:[Debian GNU/Linux testing _Etch_ - Official Snapshot i386 Binary-1 (20051212)]/ etch contrib main</p>
<p>#deb cdrom:[Debian GNU/Linux testing _Etch_ - Official Snapshot i386 Binary-1 (20051212)]/ etch contrib main</p>
<p>#deb file:/ apt/</p>
<p>#deb http://security.debian.org/ testing/updates main contrib<br />
deb http://security.debian.org/ etch/updates main contrib non-free</p>
<p>#deb http://ftp.debian.org/debian/ unstable main<br />
#deb-src http://ftp.pucpr.br/debian/ testing main</p>
<p>deb http://ftp.debian.org/debian/ testing main<br />
deb-src http://ftp.debian.org/debian/ testing main</p>
<p>----BoRdEr_Signature-00253658974569----</p>
<p></code></p>
<p>No caso, estou mandando o meu arquivo Source.list Vamos às descrições:<br />
<strong>Content-Type: multipart/form-data;</strong> &#8211; Indica o tipo do conteúdo<br />
<strong>boundary=&#8211;BoRdEr_Signature-00253658974569&#8211;</strong> Indica o separador de conteúdo.<br />
<strong>Content-Length: 700</strong> &#8211; Tamanho do seu arquivo.<br />
A parte de dentro seria o seu arquivo propriamente dito&#8230;<br />
<strong>Content-Type: text/plain</strong> &#8211; Tipo do conteúdo. No caso, texto plano, mas poderia ser uma imagem, um executável, etc et.</p>
<p>Da mesma forma, o código acima funciona com imagens, mas não mostro aqui com imagens pois seria inútil, pois provavelmente viria encriptada&#8230;</p>
<p>Bom, e termina aqui a descrição do problema e da solução.<br />
Caso tenha problemas, ou sugestõe, comente abaixo.</p>
<p>[]s!</p>
<p><sub><strong><em style="color: #FF0000;">O tcpconnect tem um número máximo de caracteres de resposta. Isso pode dar algum problema com Headers muito grandes</em></strong></sub></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danilocesar.com/blog/2006/02/19/http-headers-http-por-forca-bruta/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
