単一プログラムのネットワークトラフィックを人為的に遅くする行為

単一プログラムのネットワークトラフィックを人為的に遅くする行為

ネットワークが遅い場合は、特定の(Python)アプリケーションが正しく機能していることをテストする必要があります。私のローカルコンピュータでこれをシミュレートする方法はありますか?理想的には、管理者にシステムの変更を要求することなく、単一のアプリケーションに対してこれを行うことができます。たとえば、パケット損失プロキシサーバーがあります。

答え1

横にtrickle、制限「速度」のリアルタイム状態を提供する利点もあるハッキング可能な方法です。つながるそしてコスト削減を共有させてくださいつながる独立したアプリケーション間:

ssh -D 1080 -N -o ProxyCommand='
    pv -B8K -trabcN OUT -L2K |
    socat - tcp:%h:%p,rcvbuf=8K |
    pv -B8K -trabcN  IN -L30K' localhost

pv制限速度()によって遅くなるプロキシコマンドは、制限付きSOCKS5サーバーを起動します。-Lここで、出力と入力は異なる速度で制限されます。

次に、コマンドを靴下にします。tsocksたとえば、設定は次のようになります~/.tsocks.conf

server = 127.0.0.1
server_port = 1080
server_type = 5

以下の方法で一部のISOイメージをダウンロードしてくださいtsocks

$ wget -O /dev/null http://releases.ubuntu.com/18.10/ubuntu-18.10-live-server-amd64.iso
/dev/null             2%[                    ]  19.60M  1.99MB/s    eta 6m 47s

同じ靴下:

$ tsocks wget -O /dev/null http://releases.ubuntu.com/18.10/ubuntu-18.10-live-server-amd64.iso
/dev/null             0%[                    ] 802.40K  29.3KB/s    eta 3h 21m

一方、pv出力は次のようになります。

      OUT: 3.65KiB 0:00:32 [0.00 B/s] [ 116 B/s]
       IN:  960KiB 0:00:32 [30.5KiB/s] [30.0KiB/s]

(現在の速度(-r)と平均速度(-a)を表示します。)

tsocks$LD_PRELOADまたは、ネットワーク機能を奪ってSOCKSサーバーを通過するように実行可能ファイルにコードを挿入する他のソックスコマンドです。これは、静的リンクまたはsetuid / setgidコマンドには適用されません。

また、tsocksTCP専用です。私はsshのSOCKSサーバーもTCPだけを実行していると思うので、ソックスファイアなどの他のサーバーに切り替えても、danteこの方法でUDPトラフィックを制限することはできません。 danteのSOCKSサーバーを使用して、同様のアプローチを考案できますssh

編集する。 python3の場合、python3用のネットワークを転送することも管理することもできないことを発見しました(testを使用trickle)。しかし、うまくいくようです。これを使用するには、次のように作成します。tsocksyoutube-dldantesocksify~/.dante.conf

route {
        from: 0.0.0.0/0   to: 0.0.0.0/0   via: 127.0.0.1 port = 1080
}

アプリケーションを呼び出します。

SOCKS_CONF=~/.dante.conf socksify youtube-dl https://...

関連情報