AMule
# AMule

aMule es un programa de intercambio P2P libre y multiplataforma, similar al conocido eMule que funciona tanto con la red eDonkey como con Kademlia.

Deriva del código fuente de xMule, el cual a su vez deriva del proyecto lMule, el primer intento de portar el cliente eMule a GNU/Linux. Al igual que eMule, aMule se distribuye y publica bajo los términos de la licencia GNU GPL.

El objetivo de aMule es ser un "eMule multiplataforma", funcionando en los sistemas operativos GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Mac OS X, Irix y Windows, y en las arquitecturas x86, AMD64, ARM, UltraSPARC, PowerPC, Macintosh, Xbox y NSLU2.

Existen dos versiones de aMule, la versión estable, y la versión de desarrollo (SVN), que se publica diariamente con los últimos avances, aunque no se asegura su estabilidad. aMule admite también enlaces magnéticos.

## Puertos TCP & UDP

De acuerdo con el FAQ oficial, la aplicación utiliza los siguientes puertos por defecto. El tráfico es desde la perspectiva del cliente:

* 4662 TCP (entrada y salida): Transferencias de cliente a cliente (P2P).
* 4665 UDP (entrada y salida): Utilizado para recibir y enviar peticiones de búsqueda globales. Éste siempre es el puerto anterior +3.
* 4672 UDP (entrada y salida): Protocolo eMule extendido: Queue Rating, File Reask Ping, etc.

Adicionalmente, otros elementos de la red eDonkey, como los servidores, o aplicaciones auxiliares de aMule, utilizan los puertos siguientes:

* 4661 TCP (salida): Puerto en el que los servidores eDonkey esperan conexiones (definido por el servidor). No utilizado en Kad.
* 4711 TCP: Puerto WebServer. Utilizado para acceder a aMule por web.
* 4712 TCP: Puerto de Conexiones Externas (EC). Utilizado para la comunicación de aMule con otras aplicaciones (ej: aMule WebServer o aMuleCMD).

La mayoría de estos puertos son configurables.

## Arquitectura modular

A diferencia de eMule, aMule puede ser compilado como un único programa monolítico o como un "demonio", lo que permite su ejecución en segundo plano, sin interfaz gráfica y con un menor consumo de recursos. Para comunicarse con el programa existen tres interfaces diferentes:

* aMuleCMD: cliente de línea de comandos.
* aMuleGUI: cliente de interfaz gráfica. Actualmente en desarrollo, por lo que le faltan muchas de las opciones de la versión monolítica, además de ser inestable.
* aMuleWEB: servidor web que permite el manejo mediante un navegador web.

Además, existe todo un protocolo de comunicación creado para poder desarrollar aplicaciones que se comuniquen bidireccionalmente con el núcleo del programa.

