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

前言

先来假设两个使用 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

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 Responseurl = '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,右侧访问的则是该域名解析后的 ip :https://3.226.169.83/get
至于为什么会这样,这不是本文章要讨论的内容~


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

至于这个ip为啥不和上图的一样,因为它有多个ip吖!

后话

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

【Requests】获取本地的请求IP和域名解析的IP相关推荐

  1. Python获取本地mac地址、主机名、IP地址

    1 在windows系统,命令行输入 ipconfig /all 此处获得mac地址. 2 在Python中获取mac地址 import uuid mac = uuid.UUID( int=uuid. ...

  2. C/C++:Windows编程—代码获取本地所有网卡信息(网卡描述,IP地址,子网掩码,MAC地址)

    先看效果 看代码 使用 GetAdaptersInfo 函数获取网卡的所有信息. MSDN函数说明 https://docs.microsoft.com/en-us/windows/desktop/a ...

  3. 将域名解析到空间服务器,如何把域名解析到IP

    关于如何把域名解析到IP 把域名解析到IP,即设置域名解析使域名指向服务器空间. 1.获取IP地址 联系你的网站提供服务商获取你的IP地址,或者如果你的IP地址的格式有端口,如202.106.0.20 ...

  4. 获取本地IP地址信息,请求地址,请求的操作系统信息 ,浏览器信息

    程序运行效果图,如果这种有你需要的信息,不妨随着小编一起看下去吧! (1)接口 在浏览器上访问 localhost:8089/test/cs @RequestMapping("/cs&quo ...

  5. 关于java获取本地ip的几种方法

    关于java获取本地ip的几种方法 1.获取本地ip的方法 System.out.println(InetAddress.getLocalHost().getHostAddress()); 2.域名解 ...

  6. java将域名解析为IP地址,获取网卡的配置信息

    DNS域名解析系统 系统简介:用户通过输入需要查询的域名,便可输出域名对应的一个IP地址或多个IP地址. 系统功能:1.通过输入域名可以查询域名所对应的IP地址. 2.可以获取当地的主机IP地址和本地 ...

  7. vue中获取本地IP地址

    vue中获取本地IP地址 IP地址需要通过js获取: 网上有很多查询接口可以获取到IP,查到的搜狐的比较多,我这里就用搜狐的: http://pv.sohu.com/cityjson?ie=utf-8 ...

  8. 通过js获取本地IP地址

    通过js获取本地IP地址 最近在做pc项目,需要根据用户的IP地址定位城市.IP地址需要通过js获取: 网上有很多查询接口可以获取到IP,我这里用的是搜狐的: http://pv.sohu.com/c ...

  9. 【Qt】获取本地IP(IPv4)

    1.问题描述 获取本地IP列表有"127.0.0.1".IPv4.IPv6等,一般使用IPv4,如何从已经获取的IP列表中挑出IPv4. 2.解决方法 QString ipv4; ...

最新文章

  1. 企业级Nginx服务基础到架构优化详解--25条
  2. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
  3. JAVA学习之路 (三) 运算符
  4. 不要说自己没什么兴趣,也不要说自己兴趣很广泛,最好能具体到哪个方面,顺便提一下你最近看的一本该方面的书,有什么收获(转)...
  5. hdu 1599(Floyd求最小环)
  6. echart饼图标签重叠_Echarts 解决饼图文字过长重叠的问题
  7. gitlable iphone_使用gitlab ci构建IOS包并发送通知消息到企业微信
  8. (王道408考研数据结构)第四章串-第一节:串的定义和基本操作及存储结构
  9. 定时任务crontab
  10. php 获取上个月、下个月、本月的日期 当前月份的前后一个月
  11. 对区块链技术的一些思考
  12. Python学习第二章:变量和简单类型
  13. html 广告加载页面,JS广告代码延迟加载或是最后加载加快页面载入
  14. 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
  15. vm使用PE安装系统(1)
  16. Oracle数据库查询十个小技巧
  17. 《编写高质量代码(改善Java程序的151个建议)》读书笔记
  18. css样式 向下补白,CSS尺寸与补白属性-----margin和padding
  19. 由swr_get_delay想到的
  20. 注册用户数破亿 平安金管家APP成全球寿险首个过亿应用

热门文章

  1. Android逆向:去除RE管理器4.41及车来了广告
  2. icinga 被动模式 nsca 安装
  3. 深度学习【道路提取】:马萨诸塞州道路数据集分享
  4. NotePad++ 添加HEX-Editor插件
  5. linux获取控制台窗口句柄,C#获取控制台句柄的方法
  6. IT项目管理总结:第七章 项目成本管理
  7. iOS永久签名不掉签工具,轻松签超详使用教程
  8. Unity工程里的那些东西
  9. zdm各命令的功能和作用_利用ZDM菜单管线设计工具绘制管线步骤
  10. 在cmd命令下imp oracle dmp文件