我需要测试给定的(python)应用程序在网络缓慢时是否正常工作。有没有办法在本地机器上模拟这个?理想情况下,可以对单个应用程序执行此操作,而无需对系统进行管理员所需的修改。例如,丢包代理服务器。
答案1
旁trickle
,一种可能的 hacky 方式,也有提供节流“速度”的一些实时状态的好处联系并让您分享节流的联系独立应用程序之间:
ssh -D 1080 -N -o ProxyCommand='
pv -B8K -trabcN OUT -L2K |
socat - tcp:%h:%p,rcvbuf=8K |
pv -B8K -trabcN IN -L30K' localhost
启动由于代理命令被pv
速率限制 ( -L
) 减慢而受到限制的 SOCKS5 服务器,此处以不同的速率限制输出和输入。
然后socksify你的命令,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
或其他socksifying命令在可执行文件中注入代码(使用$LD_PRELOAD
)来劫持其网络功能,以便它们通过SOCKS服务器。这不适用于静态链接或 setuid/setgid 的命令...
另请注意,tsocks
仅 TCP。我相信 ssh 的 SOCKS 服务器也只执行 TCP,所以即使你切换到另一个像 socksifier 的服务器dante
,你仍然无法以这种方式限制 UDP 流量。您可以尝试使用 dante 的 SOCKS 服务器来设计类似的方法ssh
。
编辑。当谈到python3时,我发现既没有trickle
也tsocks
没有设法转移python3的网络(使用测试youtube-dl
)。不过dante
似乎socksify
有效。要使用它,请创建一个~/.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://...