2017-09-22 17 views
1

我想通过一个Python脚本中的http来模拟文件下载。该脚本用于测试本地LAN中的路由器/调制解调器设备。有没有办法使用另一个网关,而不是系统默认的python中的http请求?

目前,我有一个虚拟机的网络配置为使用设备作为默认网关和DNS。我的测试机器上的python脚本使用Phython的paramiko库sshs进入VM。在使用这个ssh连接的python脚本中,我运行了wget https://some.websi.te/some_file.zip。这似乎过度杀毒,但我不想在运行测试脚本的机器上重新配置网络。

有没有办法消除额外的虚拟机(通过SSH运行wget)并仍然模拟下载?当然,这应该在我的本地机器上的python测试脚本中运行?

换句话说,我可以让Python使用另一个网关,而不是脚本中的系统默认值?

+0

不,路由和HTTP发生在OSI堆栈的非常不同的层上, –

回答

2

我可以提供2种方法来做你想要的:一种不好的方式,一种干净的方式。 讲起了不错的方法:

如果你的脚本使用系统的“默认网关”,可能是由你的脚本中使用您的目的地专用路径设置成你的系统,以避免你的脚本使用默认网关,可能足以解决您的问题。这是一种糟糕的方式,因为不仅脚本将受到影响,从主机生成的所有流量都将受到影响。

让我们来谈谈干净的方式。我想你正在运行Linux,但我认为你可能能够在支持多路由表功能的所有操作系统中执行相同的操作。

这里的步骤,您需要做的总结:使用ip命令

  • 准备第二次(或第三...)路由表和“与表table_name”选项
  • 到使用uidrange选项使用ip规则创建规则流量选择器。此选项允许您根据用户的UID选择流量。

当您完成这些步骤后,您可以通过在选定的UID范围内创建一个用户帐户来测试您的设置,并将其设置为ip-rule命令并测试您的路由设置。

最后一步是通过将您的uid切换到在ip-rule中选择的uid来修改您的python脚本,并在您完成生成流量时从它存在。

总结干净的方式,它是做一样的烂路,但只是通过使用多路由表内核特性数量有限,你的Linux系统用户的UID,并切换到所选择的用户放入您的脚本以使用特殊路由设置。

内核的多路由表功能是我认为能够合并2个不同系统的唯一功能,就像您请求它,主机和虚拟机一样,不需要虚拟机。而且您可以通过从一个用户切换到另一个用户到任何语言的脚本来激活该功能。

+0

好吧,稍后会试验一下,如果我成功了,请发布指南。谢谢。 – JCGB

相关问题