python通过不同的网卡去做网络请求
2021/7/27 1:06:18
本文主要是介绍python通过不同的网卡去做网络请求,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python通过不同的网卡去做网络请求
为什么会有这种需求呢,很多的公司都会有内网和外网,而现在的电脑都会有双网卡,而电脑都会默认用你的以太网,现在刚好有这么一个场景,你写了一个程序要去做网络请求,而你的以太网又访问不到,刚好你可以用wlan网卡去做这个网络请求,那怎么办呢,现在就可以通过下面的办法,去选择你需要的网卡访问。
工具类
from netifaces import interfaces, ifaddresses, AF_INET, AF_INET6 import winreg import platform # 获取ipv4地址 def get_ipv4_address(key_name): if platform.system() == "Linux": try: return ifaddresses(key_name)[AF_INET][0]['addr'] # 返回ipv4地址信息 except ValueError: return None elif platform.system() == "Windows": key = get_key(key_name) # 获取网卡的键值 if not key: return else: return ifaddresses(key)[AF_INET][0]['addr'] # 返回ipv4地址信息 else: print('您的系统本程序暂时不支持') # 获取ipv6地址 def get_ipv6_address(key_name): if platform.system() == "Linux": try: return ifaddresses(key_name)[AF_INET6][0]['addr'] except ValueError: return None elif platform.system() == "Windows": key = get_key(key_name) if not key: return else: return ifaddresses(key)[AF_INET6][0]['addr'] else: print('您的系统本程序暂时不支持') # 获取Windows系统网卡接口在注册表的键值 def get_key(key_name): keys = interfaces() # 获取所有网卡的键值 key_name_dict = {} # 存放网卡键值与键值名称的字典 try: reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) # 建立注册表链接 reg_key = winreg.OpenKey(reg , r'SYSTEM\CurrentControlSet\Control\Network\{4d36e972-e325-11ce-bfc1-08002be10318}') except Exception as e: return '路径出错或者其他问题,请仔细检查' for key in keys: try: reg_subkey = winreg.OpenKey(reg_key , key + r'\Connection') # 读取网卡键值的Name key_name_dict[winreg.QueryValueEx(reg_subkey , 'Name')[0]] = key # 写入key_name字典 except FileNotFoundError: pass # print('所有接口信息字典列表: ' + str(key_name_dict)) return key_name_dict[key_name]
具体使用方法
import requests from requests_toolbelt.adapters.source import SourceAddressAdapter session = requests.Session() # 使用以太网的网卡访问 yitai_ip = get_ipv4_address('以太网') session.mount('http://', SourceAddressAdapter(yitai_ip)) session.mount('https://', SourceAddressAdapter((yitai_ip, 8999))) session.get(url="https://www.baidu.com") # 使用wlan的网卡访问 wlan_ip = get_ipv4_address('WLAN') session.mount('http://', SourceAddressAdapter(wlan_ip)) session.mount('https://', SourceAddressAdapter((wlan_ip, 8999))) session.get(url="https://www.baidu.com")
这篇关于python通过不同的网卡去做网络请求的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器