IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【Requests】获取本地的请求IP和域名解析的IP -> 正文阅读

[网络协议]【Requests】获取本地的请求IP和域名解析的IP

此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。
这篇文章没啥用,请略过。

前言

先来假设两个使用 Python 的网络请求库 Requests 场景:

  • 使用代理 ip 访问某网站,想查看当前的请求的代理 ip
  • 访问的是域名,但想查看 域名解析 后的 ip

本篇文章就来介绍以上两种获取 ip 的方法。


Requests 的安装和使用参考 官方文档:https://docs.python-requests.org/en/latest/


前置知识

HTTP请求

引用这张图是想说,后面会用到 Socket连接(有了 Socket连接,就可以获取到本地和远程的 ip 了。

HTTP请求和响应步骤

  • 图片来自 https://zhuanlan.zhihu.com/p/38240894

https://zhuanlan.zhihu.com/p/38240894

Socket

看到 菜鸟教程Socket函数介绍,后面会用到这两个Socket 函数。

  • socket.getpeername() 返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。
  • socket.getsockname() 返回套接字自己的地址。通常是一个元组(ipaddr,port)

在这里插入图片描述

DNS查询

网站:https://tool.chinaz.com/dns/?type=1&host=blog.csdn.net

这个网站可以查看该域名 blog.csdn.net 所有的 ip,看到有多个ip,这就是为什么访问同一个网站时却会是不同的 ip

打个比喻:就近原则,哪个服务器距离当前请求近,就由那个服务器来处理请求。(大致如此)
在这里插入图片描述

受害网站

下面请出本次的受害者:https://httpbin.org/get

代码

import requests
from requests.models import Response

url = 'https://httpbin.org/get'

resp: Response = requests.get(url, stream=True)
localhost_address = resp.raw._connection.sock.getsockname()
remote_address = resp.raw._connection.sock.getpeername()
print("local_address is  ==> ", localhost_address)
print("remote_address is ==> ", remote_address)

请求时候需要设定 stream=True,官方释义如下:

:param stream: (optional) if ``False``, the response content will be immediately downloaded.

调试模式,下断点
可以看到 Requests 响应值的 raw._connection.sock,是一个Socket连接
在这里插入图片描述

本地的请求IP

socket.getsockname():返回连接套接字的本地地址

这里可以打开CMD,然后输入 ipconfig,可以看到当前的主机 ip地址;
这是没有开启代理的~
在这里插入图片描述

这是开启了代理的~
在这里插入图片描述

DNS解析的IP

在这里插入图片描述
从上图中可以看到,他们访问的网址不一样,但是他们的返回结果是一样的;
左侧访问的是 https://httpbin.org/get,右侧访问的则是该域名解析后的 iphttps://3.226.169.83/get
至于为什么会这样,这不是本文章要讨论的内容~


socket.getpeername():返回连接套接字的远程地址

至于这个ip为啥不和上图的一样,因为它有多个ip吖!
在这里插入图片描述

后话

本次的分享到此结束,
如有疑问,请自行解决。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:51:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:22:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码