python判断ip所属地区 python 判断ip 网段
IP地址是互联网中唯一标识一个设备的地址,有时候需要判断一个IP地址所属的地区,这就需要用到IP地址归属查询。本文将介绍Python如何通过IP地址查询所属地区并展示代码。
一、 IP地址归属查询
IP地址归属查询又称IP地址归属地查询、IP地址归属地定位、IP地址查询、IP地址定位等,是通过查询互联网上公共的IP数据库,来得到一个IP地址所属的地理位置、运营商等信息。
二、 IP地址的分类
IP地址分为IPv4和IPv6两种,IPv4是32位地址,IPv6是128位地址。通常我们使用的是IPv4地址, 其中一个IPv4地址由4个数字组成,每个数字之间用点号“.”隔开,每个数字的取值范围为0~255。例如: 192.168.1.1。
三、 IP地址转二进制
IP地址在计算机中以二进制表示,需要将IP地址转为二进制数,这就需要用到位运算符。在Python中,使用bin()函数将十进制数转为二进制数。例如:
ip = "192.168.1.1"
binary_ip = ".".join([bin(int(x)+256)[3:] for x in ip.split(".")])
print(binary_ip)
输出结果为:11000000.10101000.00000001.00000001
四、 IP地址归属地查询库
在Python中,有多个第三方库可以使用,例如pygeoip、maxminddb等。在本文中,我们将使用淘宝IP地址库,淘宝IP地址库是淘宝开放平台提供的免费IP地址库,包括IPv4和IPv6地址库。我们只需通过HTTP请求即可获取到所需的IP地址信息。
五、 Python代码实现
接下来,我们将通过Python代码来实现IP地址归属地查询。代码分为两部分:第一部分是将IP地址转换为二进制位,第二部分是通过HTTP请求查询IP地址归属地。
首先,我们需要导入所需的库:
import requests
然后,实现将IP地址转为二进制:
def get_binary_ip(ip):
"""
将IP地址转为二进制
:param ip: IP地址,例如:"192.168.1.1"
:return: IP地址的二进制表示,例如:"11000000.10101000.00000001.00000001"
"""
binary_ip = ".".join([bin(int(x) + 256)[3:] for x in ip.split(".")])
return binary_ip
接下来,实现通过HTTP请求查询IP地址归属地:
def get_location_by_ip(ip):
"""
通过HTTP请求查询IP地址归属地
:param ip: IP地址,例如:"192.168.1.1"
:return: IP地址的归属地,例如:"广东省深圳市"
"""
url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
try:
response = requests.get(url, timeout=5)
data = response.json()
if data["code"] == 0:
location = data["data"]["region"] + data["data"]["city"]
else:
location = "未知"
except Exception as e:
print(e)
location = "未知"
return location
最后,我们将两个函数结合起来,实现完整功能:
import requests
def get_binary_ip(ip):
"""
将IP地址转为二进制
:param ip: IP地址,例如:"192.168.1.1"
:return: IP地址的二进制表示,例如:"11000000.10101000.00000001.00000001"
"""
binary_ip = ".".join([bin(int(x) + 256)[3:] for x in ip.split(".")])
return binary_ip
def get_location_by_ip(ip):
"""
通过HTTP请求查询IP地址归属地
:param ip: IP地址,例如:"192.168.1.1"
:return: IP地址的归属地,例如:"广东省深圳市"
"""
url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip
try:
response = requests.get(url, timeout=5)
data = response.json()
if data["code"] == 0:
location = data["data"]["region"] + data["data"]["city"]
else:
location = "未知"
except Exception as e:
print(e)
location = "未知"
return location
if __name__ == "__main__":
ip = "192.168.1.1"
binary_ip = get_binary_ip(ip)
location = get_location_by_ip(ip)
print("IP地址:{}的归属地是:{}".format(ip, location))
六、 总结
本文介绍了Python如何通过IP地址查询所属地区并展示了代码实现。通过学习本文,你可以掌握将IP地址转为二进制数和通过HTTP请求查询IP地址归属地的方法。
python判断ip所属地区 python 判断ip 网段的更多相关文章
- PHP获取IP及地区信息(纯真IP数据库)
昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...
- python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...
- python实现判断一个字符串是否是合法IP地址
#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:判断一个字符串是否是合法IP地址 ''' import re def jud ...
- python实现ip地址的包含关系判断
python的IPy模块虽然可以实现一些ip地址的判断,但是不是很完美,有些场景根本判断不出来,还会抛出异常,比如一个地址范围和一个ip/掩码,这种不同类型就无法判断. 对此通过自己写函数来实现ip地 ...
- python --- 19 判断对象所属,区分函数和对象, 反射
一.判断对象所属 isinstance, type , issubclass 1.issubclass(x,y) 判断x是否是y 的子类 2.type(x) 精准返回x 的数据类型 3.isi ...
- python扫描proxy并获取可用代理ip列表
mac或linux下可以work的代码如下: # coding=utf-8 import requests import re from bs4 import BeautifulSoup as bs ...
- Python基础(三):简化除法判断、分析apache访问日志、扫描存活主机、利用多线程实现ssh并发访问
一.简化除法判断 目标: 编写mydiv.py脚本,主要要求如下: 提示用户输入一个数字作为除数 如果用户按下Ctrl+C或Ctrl+D则退出程序 如果用户输入非数字字符,提示用户应该输入数字 如果用 ...
- python代理池的构建2——代理ip是否可用的处理和检查
上一篇博客地址:python代理池的构建1--代理IP类的构建,以及配置文件.日志文件.requests请求头 一.代理ip是否可用的处理(httpbin_validator.py) #-*-codi ...
- ip校验方法:判断ip是否位于指定的范围内
import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.reg ...
- python扫描proxy并获取可用代理ip
今天咱写一个挺实用的工具,就是扫描并获取可用的proxy 首先呢,我先百度找了一个网站:http://www.xicidaili.com 作为例子 这个网站里公布了许多的国内外可用的代理的ip和端口 ...
随机推荐
- Vue——计算属性、监听属性、Vue生命周期、组件介绍和使用、组件间通信、ref属性
计算属性 // 1 计算属性是基于他们的依赖变量进行缓存的 // 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) // 3 计算属性就像pyth ...
- 读少写多的条件下 ConcurrentHashMap 和 ReadWriteLock 的选择
场景是这样的:两个对象往一个 Map 里循环写入,另外一个对象偶尔读一次,写的频率比读的频率高很多.希望实现的是读的时候暂停写入.CocurrentHashMap 和 ReadWriteLock 各有 ...
- 尚医通day16-网站怎么接入微信扫码支付?
第01章-准备工作 1.微信支付产品介绍 参考资料:产品中心 - 微信支付商户平台 (qq.com) 付款码支付.JSAPI支付.小程序支付.Native支付.APP支付.刷脸支付 1.1.付款码支付 ...
- 如何在 Windows10 Professional 服务器上搭建自己的 Git 服务器。
一.简介 以前,在别家的公司,一般早就把源代码管理工具搭建好了,很少有机会自己搭建一套.最近,公司也许要把现在不少的源码进行管理,于是我打算自己搭建源代码管理服务器.说起源代码管理,当然有很多中解决方 ...
- GO web学习(一)
跟着b站https://space.bilibili.com/361469957 杨旭老师学习做的笔记 开启web服务 •http.ListenAndServer() •第一个参数是网络地址 如果为& ...
- Redis核心技术与实践 01 | 基本架构:一个键值数据库包含什么?
原文地址:https://time.geekbang.org/column/article/268262 个人博客地址:http://njpkhuan.cn/archives/redis-he-xin ...
- Diffusers 一岁啦 !
十分高兴 Diffusers 迎来它的一岁生日!这是令人激动的一年,感谢社区和开源贡献者,我们对我们的工作感到十分骄傲和自豪.去年,文本到图像的模型,如 DALL-E 2, Imagen, 和 Sta ...
- 记一次 HTTPS 抓包分析和 SNI 的思考
日常听说 HTTPS 是加密协议,那现实中的 HTTPS 流量,是真的完全加密吗? --答案是,不一定.原因嘛,抓个包就知道了. 我们用 curl 命令触发一下: curl -v 'https://s ...
- Kitex微服务开发实践(ETCD服务注册)
服务注册通常用于分布式系统或微服务架构中,是一种用于管理和发现这些分布式服务的机制.它的目标是让服务能够动态地找到其他服务,并能够与其进行通信,而无需显式地配置其位置信息 本文简单讲述使用etcd进行 ...
- LangChain:打造自己的LLM应用
1.LangChain是什么 LangChain是一个框架,用于开发由LLM驱动的应用程序.可以简单认为是LLM领域的Spring,以及开源版的ChatGPT插件系统.核心的2个功能为: 1)可以将 ...