Un caso común de conformar una sola conexión TCP puede en realidad ensamblarse a partir de pares duales socat
y cpipe
de manera UNIX de esta manera:
socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'
Esto simula una conexión con ancho de banda de aproximadamente 300 kb / s de su servicio en :5000
y a aproximadamente 10 kB / s, y escuchas en :5555
las conexiones entrantes. Advertencia : Tenga en cuenta que esto por conexión , por lo que cada conexión TCP individual obtiene esta cantidad.
Explicación: El exterior (izquierda) socat
escucha con las opciones dadas :5555
como un servidor de bifurcación. El primer cpipe
comando en la SYSTEM:...
opción a continuación estrangula datos, que entró en socket: 5555 (y sale del primero, externo socat
) a como máximo 10kByte / s. Esos datos se reenvían usando otro socat
que se conecta localhost:5000
(donde el servicio que desea ralentizar debería estar escuchando). Luego, los datos de localhost:5000
se colocan en el cpipe
comando correcto , que (con los valores dados) lo acelera a aproximadamente 300kB / s.
La opción -ngr
a cpipe
es importante. Hace que cpipe lea de forma no codiciosa desde su descriptor de archivo de entrada. De lo contrario, es posible que se quede atascado con los datos en los buffers que no se reenvían y esperan una respuesta.
Usando la buffer
herramienta más común en lugar decpipe
También es posible .
(Créditos: Esto se basa en la receta de "doble tee" de Christophe Loor de la socat
documentación)