有没有办法在python中使用除系统默认值之外的其他网关发出http请求?

时间:2017-09-22 10:48:10

标签: python networking python-requests

我想在Python脚本中通过http模拟文件下载。该脚本用于测试本地LAN中的路由器/调制解调器设备。

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

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

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

1 个答案:

答案 0 :(得分:2)

我可以提供两种方法来实现你想要的:一种糟糕的方式,一种干净的方式。 让我们谈谈糟糕的方式:

如果您的脚本正在使用"默认网关"对于系统,可能是通过为脚本使用目的地设置专用路由到系统中以避免脚本使用默认网关,可能足以解决您的问题。这是一种糟糕的方式,因为不仅您的脚本会受到影响,从您的主机到该目的地的所有流量都会受到影响。

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

以下是您需要执行的步骤摘要:

  • 使用ip命令和' table table_name'来准备第二个(或第三个...)路由表。选项
  • 使用uidrange选项使用ip规则创建规则流量选择器。此选项允许您根据用户的UID选择流量。

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

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

总结一下干净的方法,它的做法与坏方法相同,但仅限于Linux系统的有限数量的用户uid使用多路由表内核功能,并切换到选定的用户进入您的脚本以使用特殊的路由设置。

内核的多路由表功能是我认为能够合并两个不同系统的唯一功能,如您所请求的,主机和VM,而无需VM。您可以通过从一个用户切换到另一个用户的任何语言的脚本来激活该功能。