Python请求,如何指定传出流量的端口?

2023-11-21

我正在开发一个项目,我们想要为防火墙上的传入流量分配白名单数据包过滤器,并且我们使用带有请求库的 python 脚本向该网络外部的某些服务器发出一些 https 请求。目前,脚本使用临时端口连接到服务器,但我们希望通过特定端口发出这些 https 请求。这将使我们能够为这些端口创建严格的白名单。

如何指定请求库的端口,通过该端口发送请求?脚本当前使用以下类型的代码来发送必要的请求。

response = requests.post(data[0], data=query, headers=headers, timeout=10)

这是可行的,但我现在需要指定发送 http post 请求的端口,以允许在网络上进行更严格的数据包过滤。这个口岸申报如何实现?我已经从多个来源寻找解决方案,但一无所获。


requests是建立在urllib3,它提供了设置连接源地址的能力;当您将源地址设置为('', port_number)您告诉它使用默认主机名但选择特定端口。

您可以在泳池经理,然后你告诉requests通过创建新的池管理器来使用不同的池管理器传输适配器:

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager


class SourcePortAdapter(HTTPAdapter):
    """"Transport adapter" that allows us to set the source port."""
    def __init__(self, port, *args, **kwargs):
        self._source_port = port
        super(SourcePortAdapter, self).__init__(*args, **kwargs)

    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(
            num_pools=connections, maxsize=maxsize,
            block=block, source_address=('', self._source_port))

在会话对象中使用此适配器,以下安装适配器用于allHTTP 和 HTTPS 连接,使用54321作为源端口:

s = requests.Session()
s.mount('http://', SourcePortAdapter(54321))
s.mount('https://', SourcePortAdapter(54321))

您只能设置一个源端口,从而限制您一次只有一个活动连接。如果您需要在端口之间轮换,请注册多个适配器(每个 URL 一个)或每次重新注册全部挂载。

See the create_connection()实用函数文档有关详细信息source_address option:

If source_address已设置,它必须是一个元组(host, port)在建立连接之前将套接字绑定为源地址。主机''或端口0告诉操作系统使用默认值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python请求,如何指定传出流量的端口? 的相关文章

随机推荐

  • 检查 PHP 中是否为多字节字符串

    我想检查 PHP 上是否是字符串类型多字节 知道如何实现这一点吗 Example 也许 规则8字节 I read 可变宽度编码 WIKI and UTF 8 维基百科 有两种解释 首先 每个字符都是多字节
  • 在 PHP SoapClient 中禁用证书验证

    Summary 有没有办法强制 PHP 中内置的 SoapClient 类通过 HTTPS 连接到具有无效证书的服务器 我为什么要这么做 我已在还没有 DNS 条目或证书的服务器上部署了一个新应用程序 我想尝试使用 SoapClient 连
  • Java 中的 try/catch

    有人可以给我提示为什么这个尝试和捕获不起作用吗 它抛出扫描仪异常 而不是打印我期望的消息 import java util import java io import java math import javax swing public
  • 从 OpenApi.json 生成 C# 客户端

    我有一个 net core 2 2 类库 我已经安装了 VS Studio 2017 OpenAPI Swagger 连接服务 扩展 我尝试使用此扩展为以下 API 生成 C 客户端 https skybox vividseats com
  • 使用 Microsoft.Web.Administration.dll IIS 8.5 中的 WorkerProcess.GetRequests 方法时出现错误

    我正在用 C NET Framework 4 5 为 Microsoft Windows Server 2012 R2 Standard x64 IIS 8 5 编写一个 Windows 服务应用程序 并使用 Microsoft Web A
  • 如何使用 boost-library 构建适用于 iOS(设备和模拟器)的 ASSIMP 库?

    我想使用 ASSIMP 库http assimp sourceforge net在 iOS 项目中 不幸的是 我对 makefile 之类的东西不太有经验 所以我需要一些帮助 我已经下载了源代码 首先尝试使用 make 进行构建 在代码子文
  • JMSMessageID 是否应该在发布和订阅之间更改?

    JMS 2 0 规范说 The JMSMessageID标头字段包含一个唯一的值 标识提供商发送的每条消息 和 唯一性的确切范围由提供商定义 至少应该 涵盖提供程序的特定安装的所有消息 其中 安装是一些连接的消息路由器集 该规范没有明确指出
  • 什么时候应该在 jquery 函数中使用 return false ?

    我发现了很多类似这样的功能 function body a click function alert this innerHTML return false 有什么区别this and this 在jquery中 他们都有一条线return
  • 是否有任何 Git 命令可以将我们所有丑陋的提交合并为一个?

    当我在本地编写代码时 有时我会提交还不干净的代码 或者带有丑陋的消息作为临时修订 但是 当我希望我的代码与其他代码合并时 我想要其他人可以看到的唯一最终快照 隐藏看起来丑陋的修订 前任 我 fork 0 到我的本地存储库 我使用不干净的代码
  • 控制器逻辑与服务/业务层逻辑

    我正在开发一个应用程序 并使用 REST API 的存储库 服务 控制器方法 我发现自己在控制器逻辑与服务逻辑之间争论 服务逻辑处理业务逻辑 例如计算图书价格 控制器逻辑应处理表示细节 如果业务逻辑的一部分怎么办 应用程序是为了检查发布者是
  • 如何使 NSDateFormatter 显示特定于语言环境的日期?

    我正在使用 NSDateFormatter 在 iPhone 应用程序中设置日期 并且日期显示正确 但是 我发现所有区域设置 我的应用程序支持多达 12 种不同的语言 都遵循我通过 setDateFormat 指定的日期格式 理想情况下 我
  • 如何在 React Native 中解析 HTML 文件?

    如何从文件系统获取 HTML 文件并从中解析特定元素 例如 给定下面的 html 片段 如何提取表格内容并渲染它 div h1 header h1 table border 1 th Number th th content A th th
  • 显示来自 http://fpdownload.adobe.com/crossdomain.xml 的不安全内容

    最近 我注意到我创建的 Flash 视频播放器在通过 https URL 播放时开始出现不安全内容问题 我花了相当多的时间来完成所有措施 以确保我的文档源代码中的所有内容以及嵌入和视频 URL 都适合 https 协议 显然 在 https
  • SSE2:双精度对数函数

    我需要日志功能的开源 无许可证限制 实现 带有签名的东西 m128d mm log pd m128d 它可在 Intel Short Vector Math Library ICC 的一部分 中找到 但 ICC 既不是免费的也不是开源的 我
  • 如何检测 OS X 上的麦克风使用情况?

    有没有办法检测我的 Mac 麦克风何时在使用 类似于 Mikro Snitch 所做的事情吗 这可以在 Cocoa 中完成吗 这并不是真正的 Objective C 或 Cocoa 解决方案 但如果您愿意进行子进程调用 请尝试以下操作 io
  • 为什么纹理坐标对于 Viewport2DVisual3D 可以按预期工作,但对于 GeometryModel3D 却不能?

    我有一个在 3ds Max 中创建的模型 该模型是一个简单的矩形 它的纹理具有重叠的纹理坐标 模型应并排显示图像文件的右半部分两次 我将此模型导出为 obj 并使用 Microsoft Expression Blend 将其转换为 XAML
  • 如何在 CLI 和 Web 浏览器中编写新行?

    我正在从 CLI 命令和 Web 浏览器运行 php 脚本 我需要以两种方式正确显示新行 以便它不会打印 br 在 CLI 中 它在浏览器中显示新行 有谁知道如何为此编写 php 函数吗 感谢您的帮助 您可以编写一个函数来根据执行环境返回正
  • 将向量与向量列表进行匹配

    我有一个向量列表lis我需要将其与另一个向量匹配vec lis lt list c 2 0 0 c 1 1 0 c 1 0 1 c 0 2 0 c 0 1 1 c 0 0 2 vec lt c 1 1 0 所以要么我会得到一个逻辑输出 1
  • 软件渲染模式-WPF

    我有一个 WPF 用户控件 需要强制渲染RenderMode SoftwareOnly 由于我使用的是 NET 3 5 我必须这样做 var hwndSource PresentationSource FromVisual this as
  • Python请求,如何指定传出流量的端口?

    我正在开发一个项目 我们想要为防火墙上的传入流量分配白名单数据包过滤器 并且我们使用带有请求库的 python 脚本向该网络外部的某些服务器发出一些 https 请求 目前 脚本使用临时端口连接到服务器 但我们希望通过特定端口发出这些 ht