Controlador automático de los rates del MLDonkey

Bueno, pues como estos días estoy por España y tengo poco que contar (me pego todo el día estudiando, o mal estudiando para ser sinceros). Voy a poner un post acerca de como automatizar las rates del MLDonkey. Es un script que hice hace mucho tiempo y que he encontrado hoy haciendo limpieza en el ordenador, es muy útil si tenéis varios ordenadores en casa, entre ellos un servidor corriendo el MLDonkey y queréis que cuando alguien más se conecte a la red, el servidor deje de utilizar todo el ancho de banda disponible y se establezcan los rates fijados.

El script se llama mldonkeyBand2 y si decidís cambiarle el nombre tendréis que modificar las líneas 84,88,138… del script. Está sin licencia, podría ser GPL aunque prefiero declararlo como dominio público y si alguien hace alguna modificación (mejora), que me lo comuniqué por favor.

Está bastante comentado así que no pongo ninguna explicación, de todos modos si tenéis alguna duda ¡no dudéis en preguntarme! 🙂 (Se ve bastante feo debido a que no consigo dominar el editor html, además he tenido que añadir # para en lugar de usar saltos de linea… grrrrr)


#!/bin/bash
# Script wich test the current number of host in the LAN and
#change MLDonkey bandwidth depending on them.
#
# Writed by: Jaime Bosque (aka) KetS
# e-mail: jaboto (at) gmail.com
#
#Requirements:
# awk, nmap, telnet & MLdonkey :)
#
#Known issues:
# if we are alone in the LAN and we start the current script
# our download rates will be the one set in MLDonkey at the time
# of starting the script.
#
# Number of Host when MLDonkey will run with all the bandwidth
#(2 means current machine and router).
HOSTS=2
LAN=192.168.62
#
# MLDonkey bandwidth limits (0 means all the bandwidth)
MAX_UP=0
MAX_DOWN=0
MIN_UP=2
MIN_DOWN=6
#
# MLDonkey User and Password
USER=admin
PASSWORD=jaime
#
# Server Machine settings of telnet server
IP=localhost
PORT=4000
#
# Variable for output messages (not used anymore
current=""
#
statusMLDonkey(){
state=`ps ax | awk '/mlnet/ {if ($5 == "./mlnet") print $1}' | wc -l`
#state 0 means not running
#state 1 means running
}
#
#lanBeforeState 0 means we weren't alone
#lanBeforeState 1 means we were alone
lanBeforeState=1
#
numberBefore=0
lanChanged(){
hostsnow=$1
if [ $numberBefore -ne $hostsnow ];then
# echo "Something has changed in the LAN"
if [ $hostsnow -gt $HOSTS ];then
# echo "We are not alone in the LAN"
if [ $lanBeforeState -eq 0 ];then
echo "We do nothing"
return 11
else
# echo "We were alone but not now"
# echo "We set the rate to LOW"
lanBeforeState=0
return 22
fi
fi
if [ $hostsnow -le $HOSTS ];then
# echo "We are alone in the LAN"
if [ $lanBeforeState -eq 1 ];then
# echo "We do nothing"
return 11
else
# echo "We weren't alone but now yes!"
# echo "We set the rate to hig"
lanBeforeState=1
return 33
fi
fi
fi
# echo "LAN hasn't changed"
}
start(){
check
}
check(){
if [ -e mldonkeyBand2.pid ]; then
echo "ERROR: mldonkeyBand2 already running" >&2
exit 0
else
echo $$ > mldonkeyBand2.pid
run
fi
}
run(){
while true; do
statusMLDonkey
if [ "$state" == "1" ]; then
numberHosts=`nmap -sP $LAN.* | awk /$LAN/ | wc -l`
# echo "Number of hosts in LAN: $numberHosts"
lanChanged $numberHosts
returned=$?
if [ $returned = 33 ]; then
#Let's change the rates to high!
{
sleep 1
echo "auth $USER $PASSWORD"
sleep 2
echo "set max_hard_upload_rate $MAX_UP"
sleep 2
echo "set max_hard_download_rate $MAX_DOWN"
sleep 2
echo "q"
}| telnet $IP $PORT
current="high bandwidth mode"
fi
if [ $returned = 22 ]; then
#Let's change the rates to low!
{
sleep 1
echo "auth $USER $PASSWORD"
sleep 2
echo "set max_hard_upload_rate $MIN_UP"
sleep 2
echo "set max_hard_download_rate $MIN_DOWN"
sleep 2
echo "q"
}| telnet $IP $PORT
current="low bandwidth mode"
fi
numberBefore=$numberHosts
echo "Sleeping 20 seconds"
sleep 20
else
#MLDonkey is not running we wait a bit...
sleep 30
fi
done
}
status(){
if [ -e mldonkeyBand2.pid ]; then
read pid < mldonkeyBand2.pid
echo "mldonkeyBand2 is running as pid $pid"
return 1
else
echo "mldonkeyBand2 is not running"
return 0
fi
}
stop(){
status
running=$?
if [ $running -ne 0 ]; then
read pid < mldonkeyBand2.pid
kill $pid
rm mldonkeyBand2.pid
else
echo "mldonkeyBand2 is not running"
fi
}
#
case "$1" in
'start')
start;;
'status')
status;;
'stop')
stop;;
*)
echo "Use $0 with { start | status | stop }" >&2;;
esac
#
exit 0

Para usarlo simplemente hacerlo correr con ./mldonkeyBand2.sh start . Aunque yo lo que hago, al ejecutarlo en una máquina remota donde no quiero utilizar logs ni que se muera el proceso al cerrar mi consola es:


$> nohup ./mldonkeyBand2.sh start > /dev/null &

Recordad que para que sea ejecutable tenéis que darle permisos de ejecución:


$> chmod +x mldonkeyBand2

Anuncios

4 comentarios to “Controlador automático de los rates del MLDonkey”

  1. Geek Lectures - Things geeks should know about » Blog Archive » Controlador automático de los rates del MLDonkey Says:

    […] maraxush wrote an interesting post today onHere’s a quick excerptBueno, pues como estos días estoy por España y tengo poco que contar (me pego todo el día estudiando, o mal estudiando para ser sinceros). Voy a poner un post acerca de como automatizar las rates del MLDonkey. Es un script que hice hace mucho tiempo y que he encontrado hoy haciendo limpieza en el ordenador, es muy útil si tenéis varios ordenadores en casa, entre ellos un servidor corriendo el MLDonkey y queréis que cuando alguien más se conecte a la red, el servidor deje de utilizar todo el ancho de banda disponible y se establezcan los rates fijados. El script se llama mldonkeyBand2 y si decidís cambiarle el nombre tendréis que modificar las líneas 84,88,138… del script. Está sin licencia, podría ser GPL aunque prefiero declararlo como dominio público y si alguien hace alguna modificación (mejora), que me lo comuniqué por favor. Está bastante comentado así que no pongo ninguna […] […]

  2. meneame.net Says:

    Control automático de los rates de MLdonkey para redes compartidas

    Algo que siempre había buscado yo. Ahora mi madre ya no se queja de que le va muy mal "el interné" y me pide que quite el emule. Cito textualmente: "Un script muy útil si tenéis varios ordenadores en casa, entre ellos un servidor cor…

  3. Script para mlnet -controlador automático de las tasas- « Mis experiencias, aquí plasmadas Says:

    […] Script para mlnet -controlador automático de las tasas- Hace unos días recibí un e-mail que hacía referencia al script que escribí para controlar las tasas del mldonkey: Controlador automático de los rates del MLDonkey. […]

  4. Good bye MLDonkey, hello Tranmission! « Mis experiencias, aquí plasmadas Says:

    […] you may remember four years ago I writed about an script which was in charge of setting automatically your MLDonkey rates in order to not overload your […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s